subzm在c语言中的作用,C语言章节复习题

 1. 编写程序,输入一个正整数n,求下列算式的值。要求定义和调用函数fact(k)计算k的阶乘,函数返回值的类型是double。 #include double fact(int k) { double t=1; int i; for(i=1;i<=k;i++) t*=i; return t; } void main() { int i,n; double s=0; scanf(“%d”,&n); for(i=1;i<=n;i++) s+=1/fact(i); printf(“%f\n”,s); } 2. 输入一个x,输出下面分段函数f(x)的值。要求将分段函数的计算定义成函数。

#include int f(double x) // 函数定义 { int y=0; if(x>0) y=1; else if(x==0) y=0; else y=-1; return y; } void main() { double x; int y; scanf(“%lf”,&x); y=f(x); // 函数调用 printf("f(%g)=%d\n",x,y); } 3. 输入一个正整数,输出该数的各个数字之和。要求编写函数,计算整数的各个数字之和。 #include int sum(int a) { int s=0; while(a!=0){ s+=a%10; a=a/10; } return s; } void main() { int x; scanf(“%d”,&x); printf("%d\n",sum(x)); } 4. 输入两个正整数a和n,求a+aa+aaa+……+aa…a(最后一项为n个a)之和。例如输入2和3,输出246(即2+22+222)。要求定义并调用函数f(a,n),它的功能是返回aa…a(n个a)。例如f(2,3)返回222。 #include int f(int a,int n) { int s=0; for(;n>0;n--) s=s*10+a; // s+=pow(10,n-1)*a; return s; } void main() { int a,n,sum=0,i; printf(“input a n:\n”);

scanf(“%d%d”,&a,&n); for(i=1;i<=n;i++) sum+=f(a,i); printf(“%d\n”,sum); } 5. 输入三个数,输出它们的最小值。要求定义一个函数,返回两个数的最小值。 #include double min(double x,double y) { if(x return x; else return y; } void main() { double x,y,z,t; scanf(“%lf%lf%lf”,&x,&y,&z); t=min(x,y); t=min(t,z); printf("min:%f\n",t); } 6. 在主函数中输入字符c和m,调用函数prn,连续将字符c输出m次。定义函数prn,完成连续将某个字符c输出m次后换行。 #include void prn(char,int); // 函数声明 void main() { char c; int m; printf(“Input c m:\n”); scanf(“%c%d”,&c,&m); prn(c,m); } void prn(char c,int m) { int i; for(i=1;i<=m;i++) putchar(c); printf(“\n”); } 7. 输入一个整数n,计算3.2n的值。要求定义函数计算xn 值。 #include double fact(double x,int n); void main() { double x,y; int n; printf(“Input x n:\n”); scanf(“%lf%d”,&x,&n); y=fact(x,n); printf(“%f\n”,y); } double fact(double x,int n) { int i; double t=1; for(i=1;i<=n;i++) t=t*x; return t; } 8. 输入平面上p1(x1,x2)、p2(x2,y2)两点坐标,计算两点间的距离输出。要求定义一个函数计算平面上两点间的距离。 #include #include double f(double,double,double,double); void main() { double x1,x2,y1,y2,d; printf(“Input (x1,y1),(x2,y2):\n”);

scanf(“(%lf,%lf),(%lf,%lf)”,&x1,&y1,&x2,&y2); d=f(x1,y1,x2,y2); printf(“%f\n”,d); } double f(double x1,double y1,double x2,double y2) { double d; d=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)); return d; } 9. 输出一张摄氏温度——华氏温度转换表。摄氏温度取[-100℃ ~150℃ ],温度间隔5℃ ,要求定义函数ctof(c),将摄氏温度转换为华氏温度,转换公式:F=32+C*9/5 #include void main() { float c,f, ctof(float); int i; for(i=0,c=-100;c<=150;c+=5) { f=ctof(c); printf("%6.0f %-6.0f",c,f); i++; if(i%5==0) printf("\n"); } } float ctof(float c) { float f; f=32+c*9/5; return f; } 10. 求11~999之间所有“回文数”之和。要求编制函数 JSValue(m)用于判断m是否为回文数。回文数是指各位数字左右对称,例如

11、1

21、67

6、909等等。 #include int JSValue(int m) { int a=0,b; b=m; while(b!=0){ a=a*10+b%10; b=b/10; } if(a==m) return 1; else return 0; } void main() { int s=0,i; for(i=11;i<=999;i++) if(JSValue(i)==1) s+=i; printf(“%d\n”,s); } 11. 输入100个学生的数学课程成绩,计算平均分,并统计成绩在平均分数正负10%区间的学生的人数。 #include void main() { int a[100],i,k=0; float sum=0,aver; for(i=0;i<100;i++) { scanf(“%d”,&a[i]); sum+=a[i]; } aver=sum/100; for(i=0;i<100;i++) if(0.9*aver<=a[i]&&a[i]<=1.1*aver) // 当前成绩在平均分数正负10%区间 k++; printf(“%f,%d\n”,aver,k); } 12. 输入两个正整数m和n(m#include int isprime(int x) { int i; for(i=2;i if(x%i==0) return 0; return 1; } void main() { int m,n,s=0,k; scanf(“%d%d”,&m,&n); for(k=m;k<=n;k++) if(isprime(k)==1) s+=k; printf(“%d\n”,s); } 13. 输入一个字符串(少于80个字符),再输入一个字符,统计并输出该字符在字符串中出现的次数(例如:输入morning回车,再输入n,输出2)。 #include main() { char s[80],c; int i,k=0; printf("输入字符串:\n"); gets(s); printf("输入字符:\n"); c=getchar(); for(i=0;s[i]!='\0';i++) if(s[i]==c) k++; printf("%s中包含%d个%c\n",s,k,c); } 14. 输入10组数,每组数3个数,输出每组数的最大值。要求定义并调用函数max(x,y,z)求x、y、z的最大值。 #include double max(double x,double y,double z) { double m; m=x; if(mif(mreturn m; } void main() { double x,y,z,i; for(i=1;i<=10;i++){ scanf(“%lf%lf%lf”,&x,&y,&z); printf(“%f\n”,max(x,y,z)); } } 15. 输入一个字符串,统计其中数字字符出现的次数。 #include void main() { char s[80]; int i,n=0; gets(s); for(i=0;s[i]!='\0';i++) if(s[i]>='0'&&s[i]<='9') n++; printf("%s中包含%d个字符\n",s,n); } 16. 将一个大小为10的数组b的值按逆序重新存放(数组的值由键盘任意输入,不使用辅助数组)。 #include void main() { double a[10],t; int i,j; for(i=0;i<10;i++) scanf("%lf",&a[i]); for(i=0,j=9;i { t=a[i];a[i]=a[j];a[j]=t;} for(i=0;i<10;i++) printf("%8.2f",a[i]); } 17. 计算5×5数组周边元素的和。 #include void main() { double a[5][5],sum=0; int i,j; for(i=0;i<5;i++) for(j=0;j<5;j++) scanf("%lf",&a[i][j]); for(i=0;i<5;i+=4) for(j=0;j<5;j++) sum+=a[i][j]; // 第

1、最后两行元素和 for(i=1;i<4;i++) for(j=0;j<5;j+=4) sum+=a[i][j]; // 最左、右两列(不包括角上)元素和 printf("%8.2f\n",sum); } 18. 输入一5行、5列的数组,将数组的每1行均除以该行上的主对角元素(第1行同除以a[0][0],第2行同除以a[1][1],...),然后以行列对齐格式输出数组内容。 #include void main() { float a[5][5],t; int i,j; for(i=0;i<5;i++) for(j=0;j<5;j++) scanf("%f",&a[i][j]); for(i=0;i<5;i++) { t=a[i][i]; // { for(j=0;j<5;j++) for(j=0;j<5;j++) // if(i!=j) a[i][j]=a[i][j]/a[i][j]; a[i][j]=a[i][j]/t; // a[i][i]=1; } } for(i=0;i<5;i++) { for(j=0;j<5;j++) printf("%8.2f",a[i][j]); printf("\n"); } } 19. 输入一个字符串(字符个数少于80),判断是否为回文?若是输出YES,否则输出NO。

解一: #include void main() { char s[80]; int i,j; gets(s); for(j=0;s[j]!='\0';j++); // 求字符串长度 for(i=0,j--;i if(s[i]!=s[j]) { printf("NO\n"); break; } if(i>=j) printf("YES\n"); } 解二: #include void main() { char s[80]; int i,j,flag=1; gets(s); for(j=0;s[j]!='\0';j++); for(i=0,j--;i if(s[i]!=s[j]) flag=0; if(flag==1) printf("YES\n"); else printf("NO\n"); } 20. 编写函数fun,返回一个数组(10个数)中除最大值和最小值以外的平均值。 #include double fun(double a[ ],int n) { double sum=0,max,min; int i; max=min=a[0]; for(i=0;i { if(max else if(min>a[i]) min=a[i]; sum+=a[i]; } return (sum-max-min)/(n-2); } void main() { double b[10],v; int i; for(i=0;i<10;i++) scanf("%lf",&b[i]); v=fun(b,10); printf("average:%.2f\n",v); } 21. 在主函数中输入一个正整数x,编写函数f1,它的功能是:求出能整除x且不是偶数的各正整数,并放在数组a中,这些除数的个数返回给主函数。在主函数中输出各除数。 #include int f1(int a[ ],int x) { int j,n=0; for(j=1;j<=x/2;j+=2) if(x%j==0) { a[n]=j; n++; } return n; } void main() { int a[20],i,n,x; scanf("%d",&x); n=f1(a,x); for(i=0;i printf("%5d",a[i]); printf("\n"); } 22. 在主函数中输入6行、6列的数组和变量m的值,编写函数f2,该函数的功能是:将数组左下半三角元素中的值乘以m。在主函数中以行列对齐格式输出该数组。 #include void f2(int a[ ][6],int m) { int i,j; for(i=0;i<6;i++) for(j=0;j<=i;j++) a[i][j]*=m; } void main() { int a[6][6],i,j,m; for(i=0;i<6;i++) for(j=0;j<6;j++) scanf("%d",&a[i][j]); printf("Input m:"); scanf("%d",&m); f2(a,m); // 调用函数 for(i=0;i<6;i++) { for(j=0;j<6;j++) printf("%5d",a[i][j]); printf("\n"); } } 23. 编写一个函数f3,它的功能是:实现两个字符串的连接。 #include void main() { char s1[100],s2[40]; void f3(char s1[ ],char s2[ ]); gets(s1); gets(s2); f3(s1,s2); puts(s1); } void f3(char s1[ ],char s2[ ]) { int i,j; for(i=0;s1[i]!='\0';i++); // 找s1 中字符串结束位置 for(j=0;s2[j]!='\0';j++,i++) s1[i]=s2[j]; // 将s2 中字符串连接到s1后 s1[i]='\0'; // 连接后加结束标志 return ; } 24. 在数组x的10个数中求平均值v,找出与v相差最小的数组元素。 #include #include void main() { double x[10],v,d; int i; for(i=0,v=0;i<10;i++) { scanf("%lf",&x[i]); v+=x[i]; } v=v/10; d=x[0]; for(i=1;i<10;i++) if(fabs(d-v)>fabs(x[i]-v)) d=x[i]; printf("平均值:%-8.2f,与平均值最近元素:%-8.2f\n",v,d); } 25. 输入n(n≤20)个数放在一维数组中,找出其中最小的数,将它与数组最前面的数交换后输出这些数。 #include void main() { int i,k,temp,n,a[20]; printf("Input n:\n"); scanf("%d",&n); for(i=0;i scanf("%d",&a[i]); for(k=0,i=1;i if(a[i] temp=a[0];a[0]=a[k];a[k]=temp; for(i=0;i printf("Input %d numbers:\n",n); for(i=0;i printf("Input x:"); scanf("%d",&x); for(i=n-1;i>=0;i--) if(a[i]>x) a[i+1]=a[i]; else break; a[i+1]=x; for(i=0;i} 27. 输入一个5行、6列的数组,找出该数组中绝对值最大的元素、输出该元素及其两个下标值。 #include #include void main() { int a[5][6],i,j,max,maxi,maxj; for(i=0;i<5;i++) for(j=0;j<6;j++) scanf("%d",&a[i][j]); max=abs(a[0][0]);maxi=maxj=0; for(i=0;i<5;i++) for(j=0;j<6;j++) if(abs(a[i][j])>max) { max=abs(a[i][j]); maxi=i; maxj=j; } printf("max: %d\n",a[maxi][maxj]); printf("row: %d col: %d\n",maxi,maxj); } 28. 从键盘输入任意一个整数,统计该整数中出现的不同数字的个数。 #include void main() { int x,a[10]={0},i,n=0; printf("Input x:\n"); scanf("%d",&x); while(x!=0) { a[x%10]=1; x=x/10; } for(i=0;i<10;i++) n+=a[i]; printf("%d\n",n); } 29. 三角形面积公式为: 其中 s=(a+b+c)/2 a、b、c分别是三角形的三条边。请分别定义计算s和area的宏,写程序,在程序中用带实参的宏名来求面积。 #include #include #define s(a,b,c) (a+b+c)/2 #define area(a,b,c,s) sqrt(s*(s-a)*(s-b)*(s-c)) main() { double x,y,z,d,t; scanf(“%lf%lf%lf”,&x,&y,&z); if(x+y>z&&x+z>y&&y+z>x) { d=s(x,y,z); t=area(x,y,z,d); printf(“area=%f\n”,t); } else printf(“error!\n”); } 30. 编程,输入一个正整数,将其转换成二进制数。 #include main() { int x,a[32],i,j; printf("Enter x:"); scanf("%d",&x); for(i=0;x!=0;i++) { a[i]=x%2; x/=2; } for(j=i-1;j>=0;j--) printf("%d",a[j]); printf("\n"); } 31. 输入一行字符,统计并输出其中英文字母、数字字符、空格和其他字符的个数。 #include void main() { char str[80]; int zm,sz,kg,qt,i; zm=sz=kg=qt=0; gets(str); for(i=0;str[i]!='\0';i++) if(str[i]>='A'&&str[i]<='Z'|| str[i]>='a'&&str[i]<='z')zm++; else if(str[i]>='0'&&str[i]<='9') sz++; else if(str[i]==' ') kg++; else qt++; printf(" 字母=%d,数字=%d,空格=%d,其它=%d\n",zm,sz,kg,qt); } 32. 编制函数del_char,函数原型为 void del_char(char *a,char ch),函数的功能是删除a指向的字符串中的值为ch的字符。例如从字符串"AscADef" 中删除 'A' 后,字符串为"scDef"。 #include void del_char(char *a,char ch) { char *p; p=a; while(*a!=’\0’){ if(*a!=ch) { *p=*a; p++; } a++; } *p=’\0’; } void main() { char s[80],ch; printf(“请输入字符串:”); gets(s); printf(“输入要删除字符:”); ch=getchar(); del_char(s,ch); puts(s); } 33. 编制函数,其功能是在float类型1维数组中查找最大值、最小值并将它们返回到主函数输出。 #include void max_min(int *a,int n,int *max,int *min) { int *p; *max=*min=*a; for(p=a;p if(*p>*max) *max=*p; if(*p

max_min(a,10,&max,&min); printf(“max=%d,min=%d\n”,max,min); } 34. 输入10个数,按绝对值从小到大排序后输出。要求定义一个函数sort,完成绝对值从小到大排序。 #include #include void sort(int *a,int n) { int i,j,k,t; for(i=0;i { k=i; for(j=i+1;j if(fabs(*(a+j)) t=*(a+i);*(a+i)=*(a+k);*(a+k)=t; } } void main() { int a[10],i; for(i=0;i<10;i++) scanf("%d",a+i); sort(a,10); for(i=0;i<10;i++) printf("%d ",*(a+i)); } 35. 输入n和x,n和x分别表示对数组前n个元素赋初值为x。要求定义一个函数value,完成对一维整型数组的n个元素进行赋值,具体赋值x。 #include void value(double *a,int n,double x) { int i; for(i=0;i *(a+i)=x; } void main() { double a[10],x; int i,n; printf (“Input n x:\n"); scanf("%d%lf",&n,&x); value(a,n,x); for(i=0;i printf("%8.2f",*(a+i)); } 36. 定义一个函数,计算两个数的和与乘积。 #include void f(double x,double y,double *p,double *q) { *p=x+y; *q=x*y; } void main() { double a,b,add,mult; printf ("Input a b:\n"); scanf("%lf%lf",&a,&b); f(a,b,&add,&mult); printf("add=%-8.2f mult=%-8.2f\n",add,mult); } 37. 定义一个函数,将一维数组中最大值及最小值交换位置。 #include void f(int *a,int n) { int i,*p,*q,t; for(i=0,p=q=a;i { if(*p*(a+i)) q=a+i; } t=*p;*p=*q;*q=t; } void main() { int a[10],i; for(i=0;i<10;i++) scanf("%d",a+i); f(a,10); for(i=0;i<10;i++) printf("%d ",*(a+i)); } 38. 编写求字符串长度函数strlen,将字符串中小写字母转换成大写字母函数。 #include int strlen(char *s) { int i; for(i=0;*(s+i)!='\0';i++); return i; } void cov(char *s) { for(;*s!='\0';s++) if(*s>='a'&&*s<='z') *s-=32; } void main() { char a[100]; gets(a); printf("strlen:%d\n",strlen(a)); cov(a); puts(a); } 39. 编写函数void fun(int *a, int *n) ,它的功能是:求出1到100之内能被3或者7整除,但不能同时被3和7整除的所有整数,并将他们放在a所指的数组中,通过n返回这些数的个数。 #include void fun(int *a, int *n) { int i,j; for(i=1,j=0;i<=100;i++) if((i%3==0||i%7==0)&&i%21!=0) { a[j]=i; j++; } *n=j; } void main() { int a[100],i,n; fun(a,&n); for(i=0;i printf("%d ",*(a+i)); } 40. 编程,检查一个5×5二维数组a是否对称(即:对所有i和j都有a[i][j]=a[j][i])。 若是输出YES,否则输出NO #include void main() { double a[5][5]; int i,j; for(i=0;i<5;i++) for(j=0;j<5;j++) scanf("%lf",*(a+i)+j); for(i=0;i<5;i++) for(j=0;j if(*(*(a+i)+j)!=*(*(a+j)+i)) { printf("NO\n"); return; } printf("YES\n"); } 41. 定义函数int strdel(char *s),删除空格字符并返回空格个数。 #include #include int strdel(char *s) { int n=0; for(;*s!='\0';) if(*s==' ') { strcpy(s,s+1); n++; } else s++; return n; } void main() { char str[80]; int n; gets(str); n=strdel(str); printf("空格数:%d,删除空格后:%s\n",n,str); } 42. 编写函数void fun(char *s,int b[ ]),统计在s所指向字符串中26个英文字母(不区分大小写)各自出现的次数,并依次放在b所指的数组中,在主函数中输出各字母出现的次数。 #include void fun(char *s,int b[ ]) { char *p; for(p=s;*p!='\0';p++) if(*p>='a'&&*p<='z') b[*p-'a']++; else if(*p>='A'&&*p<='Z') b[*p-'A']++; } void main() { char str[80]; int a[26]={0},i; gets(str);fun(str,a); for(i=0;i<26;i++) printf("%2c",'A'+i); printf("\n"); for(i=0;i<26;i++) printf("%2d",a[i]); printf("\n"); } 43. 函数int fact(char *s,char *t)的功能是:将形参s所指字符串中所有ASCII码值小于97的字符存入形参t所指字符数组中,形成一个新串,并统计出符合条件的字符个数作为函数值返回。 #include int fact(char *s,char *t) { int n=0; for(;*s!='\0';s++) if(*s<97) { *t=*s; t++; n++; } *t='\0'; return n; } void main() { char s[80],t[80]; gets(s); printf("<97:%d\n",fact(s,t)); puts(t); } 44. 编写程序,输入当天日期,要求输出明天日期(利用结构类型)。 #include void main() { int m[]={0,31,28,31,30,31,60,31,31,30,31,30,31}; int leap; struct date { int year,month,day;}d; printf(“year-month-day:”);

scanf(“%d-%d-%d”,&d.year,&d.month,&d.day); if(d.year%4==0&&d.year%100!=0||d.year%400==0) m[2]=29; // 闰年2月份有29天 d.day++; if(d.day>m[d.month]) { d.day=1; d.month++; if(d.month>12) { d.year++; d.month=1; } } printf(“明天:%d-%d-%d\n”,d.year,d.month,d.day); } 45. 将1000以内的奇数写入文件design1.dat中。 #include main() { int a; FILE *fp; fp=fopen(“design1.dat”,”w”); for(a=1;a<=1000;a++) if(a%2==1) fprintf(fp,“%4d”,a); fclose(fp); } 46. 求上题所建文件design1.dat中的数据和,在屏幕上输出结果。 #include main() { int a,sum=0; FILE *fp; fp=fopen(“design1.dat”,”r”); while(!feof(fp)) { fscanf(fp,“%d”,&a); sum+=a; } fclose(fp); printf(“sum=%d\n”,sum); }

第1 页共20 页

C 语言复习题(2013 版)

一、选择题

请把答案填写在下面的横线上,否则不能得分。

1. B 2. D 3. C 4. D 5. A 6. B 7. A 8. D 9. C 10. D 11. C 12. B 13. D 14. B 15. D 16. C 17. D 18. D 19. A 20. C 21. A 22. D 23. B 24. C 25. C 26. B 27. B 28. A 29. D 30. A 31. C 32. A 33. B 34. A 35. C 36. D 37. B 38. D 39. A 40. C 41. B 42. D 43. C 44. C 45. D 46. D 47. D 48. C 49. D 50. C 51. A 52. B 53. B 54. A 55. C 56. A 57. B 58. A 59. B 60. C 61. D 62. C 63. C 64. A 65. B 66. C 1. 下列关于C 程序的说法错误的是( )。

A)一个程序必须有一个main 函数B)函数首部后面必须有分号

C)可以使用“/* */”来注释一段代码D)每个语句的末尾必须有分号 2. 下列关于C 程序的说法错误的是( )。

A)stdio.h 是输入输出头文件B)一个C 语句必须以分号结束

C)VC6.0 中可以使用“//”来注释一行D)#define 命令不是预处理命令 3. 下列选项中,不能作为C 语言标识符的是( )。 A)_total B)p405 C)$123 D)abc 4. 若有“float x=123.41; printf("%4.2f",x);”,则执行后的输出结果为( )。 A)12.3 B)12.34 C)123.4 D)123.41 5. 下列选项中,不能正确表示分式

3 4 的C 语言表达式是( )。

A)4/3 B)4/3.0 C)1.0*4/3 D)4/(float)3 6. 若有定义“int x,y;”,则表达式“x=1,y=x+3/2”的值为( )。 A)1 B)2 C)2.0 D)2.5 7. 下列关于C 程序的说法错误的是( )。

A)C 语言程序的基本组成单位是语句B)C 语言程序中一行可以写多条语句 C)每条语句必须以分号结束D)一个语句可以写在多行上 8. 以下关于标识符的说法错误的是( )。

A)标识符由字母、数字和下划线组成B)标识符不能与系统的关键字同名 C)首字符必须是字母或下划线D)不区分大小写,s 和S 是同一个变量 9. 表达式7%4+7/2 的值是( )。 A)4 B)4.5 C)6 D)6.5 10. 已知变量a 和b 是int 型,若有语句“scanf("a=%d,b=%d",&a,&b);”,使a 的值是5,b 的值是8,则正确的输入是( )。

A)5 8↙ B)5,8↙ C)a=5 b=8↙ D)a=5,b=8↙ 11. 若有定义“int a; float b;”,执行“scanf("%3d%f",&a,&b);”语句时,从键盘输入: 1234 567.8↙,则a 和b 的值分别是( )。 A)1234 和567.800000 B)123 和567.800000 C)123 和4.000000 D)234 和567.800000 12. 执行“printf ("%f%%",1.0/3);” 语句后,正确的输出结果是( )。

第2 页共20 页

A)0.3 B)0.333333% C)0.3% D)0.003% 13. 若要定义符号常量PI 代表3.14,正确的预处理命令是( )。 A)#define PI 3.14; B)#define PI=3.14 C)define PI 3.14 D)#define PI 3.14 14. 以下变量定义及初始化语句中正确的是( )。 A)double a=0.5;b=1.5; B)char a=97,b='b'; C)int a=b=0; D)float a=1,b=&a; 15. 以下关于算法的描述中不正确的是( )。 A)算法中每一个步骤的含义都应该是确定的 B)算法中每一个步骤都应该能有效执行 C)正确的算法应在有限步骤内结束 D)正确的算法都必须有输入和输出

16. 当一个关系表达式成立时,该表达式的值为( )。 A)-1 B)0 C)1 D)不确定的非0 值 17. 关于if 语句的说法正确的是( )。 A)双分支语句中有可能两个分支都不执行 B)if 多分支语句中不能没有最后的else C)if 语句中可以使用continue 语句

D)else 总是与前面最近的、没有与其它else 配对的if 配对

18. 要判断x 是否满足表达式“-1≤x≤1”,正确的C 语言表达式是( )。 A)-1<=x<=1 B)-1≤x≤1 C)x>=-1||x<=1 D)x>=-1&&x<=1 19. 若有程序段“int x=10; while(x!=0) x=x-1;”,执行完该程序段后x 的值是( )。 A)0 B)-1 C)10 D)9 20. 若有定义“float x,*p=&x;”,能正确输入一个值给x 的语句是( )。

A)scanf("%f",x); B)scanf("%lf",&x); C)scanf("%f",p); D)scanf("%lf",&p); 21. 以下选项中,对变量的定义和初始化正确的是( )。

A)int a,*p=&a; B)int a,*p=*a; C)int a,p=&a; D)int a,*p=a; 22. 逻辑运算符两侧运算对象的数据类型为( )。 A)只能是0 或者1 B)只能是0 或非0 正数

C)只能是整型或字符型数据D)可以是任何类型的数据

23. 在c 语言中,执行完语句“for (i=1;i<=10;i++);”后,i 的值是( )。 A)10 B)11 C)1 D)不确定

24. 定义了指向某个变量的指针,其含义是指针变量里存放的是该变量的( )。 A)值B)名C)地址D)一个标志

25. 若有语句“int *pt, a=4; pt=&a;”,则下面均代表地址的一组选项是( ) A)a,pt B)&a,*pt C)&a,pt D)*pt,&pt 26. 若有语句“float *p,m=3.14;”,想要建立如下图所示的存储结构,则正确的赋值语句是

( )。 p m A)p=m; B)p=&m; C)*p=m; D)*p=&m; 27. 有语句“int a=3, b=5, *p, *q; p=&a; q=&b;”,若要实现下图中所示的存储结构,则可以

使用的赋值语句是( )。 3.14 第3 页共20 页

A)*p=*q; B)p=q; C)p=*q; D)*p=q; 28. 以下程序段中有个语句是错误的,则下列说法正确的是( )。 int *p, i; char *q, ch; p=&i; q=&ch; *p=4; p=q; A)p 和q 的类型不一致,不能执行语句p=q B)*p 中应该存放地址值,因此不能执行*p=4 C)q 虽然指向了具体的存储单元,但是该单元中没有具体的值,所以不能执行p=q D)q 没有指向具体的存储单元,所以不能执行p=q 29. 若输入字符串:abcde,则以下while 循环体将执行( )次。 while((ch=getchar( ))=='e') printf("*"); A)5 B)4 C)6 D)1 30. 若i,j 已______定义为int 类型,则以下循环嵌套程序段中循环体一共要执行的次数是( )。

for (i=5;i>0;i--) for (j=0;j<4;j++) { ... } A)20 B)25 C)24 D)30 31. 关于函数的说法不正确的是( )。

A)C 语言用函数实现模块的功能B)可根据需要自己来编写函数 C)可以在一个函数内定义另一个函数D)一个函数可以没有参数

32. C 程序中,若对函数类型未加显式说明,则函数类型默认为( )。 A)int B)void C)double D)int * 33. 在函数内部定义的局部变量,若不对其存储类型进行说明,则默认为( )。 A)static B)auto C)extern D)以上均不对

34. 若函数fun 被调用3 次,则最后一次的输出结果为( )。 void fun( ) { int a=1; a+=2; printf("a=%d\n",a); } A)a=3 B)a=5 C)a=7 D)a=9 35. 若函数fun 被调用3 次,则最后一次的输出结果为( )。 void fun( ) { static int a=1; q 5 b p 3 a 第4 页共20 页

a+=2; printf("a=%d\n",a); } A)a=3 B)a=5 C)a=7 D)a=9 36. 如果在一个函数中的复合语句中定义了一个变量,则该变量( )。 A)在该函数中有效B)为非法变量

C)在本程序范围内均有效D)只在该复合语句中有效 37. C 语言规定,函数返回值的类型是由( )。

A)调用该函数时系统临时决定B)在定义该函数时所指定的类型决定 C)return 语句中的表达式类型决定D)调用该函数时主调函数类型决定 38. putchar 函数可以向终端输出一个( )。 A)整型变量表达式值B)实型变量值 C)字符串D)字符或字符型变量值

39. 执行以下程序段的输出结果是( )。 void fun(int x, int y) { x=10; y=20; } void main( ) { int a=1, b=2; fun(a, b); printf("%d, %d\n", a,b); } A)1,2 B)10,20 C)10,2 D)1,20 40. 执行函数调用“fun('5')”得到的返回值为( )。 int fun(char ch) { return(ch>='0'&&ch<='9'); } A)-1 B)0 C)1 D)2 41. 关于局部变量的说法正确的是( )。

A)有效范围是从定义开始到程序结束的所有函数 B)有效范围是从定义开始到函数结束 C)形参不是局部变量,而是全局变量 D)复合语句中不能定义局部变量

42. 关于变量属性的说法错误的是( )。

A)动态变量是在函数开始执行时分配内存单元,函数执行完毕后立即释放

B)静态变量是在函数的执行过程中始终占用同一内存单元,程序执行结束时才释放 C)全局变量都是静态变量,只有局部变量才有动态变量 D)动态变量若不赋初值,系统会自动赋值为0 43. 若有变量定义“int x=5,*p=&x;”,则执行函数调用“fun(p);”时,传递给fun 函数的是 ( )。

A)指针变量p 的地址B)指针变量*p 的值 C)变量x 的地址D)变量x 的值

44. 以下数组的定义形式正确的是( )。

A)int k=5,a[k]; B)int a[ ]; C)char c[]={'a'}; D)char a(10); 45. 以下一维数组的定义及初始化中,错误的是( )。 A)int a[3]={0}; B)int a[3]={1,1,1}; 第5 页共20 页

C)static int a[3]; D)int n=3,a[n]={0}; 46. 若有定义“int a[ ][3]={0,1,2,3,4,5,6,7};”,则元素a[1][2]的值为( )。 A)1 B)2 C)4 D)5 47. 若有说明语句“int a[2][4]={{1},{2,3}};”,则数组元素a[1][1]的值为( )。 A)0 B)1 C)2 D)3 48. 若有定义“char s1[20],s2[ ]="China";”,为使s1 的值与s2 相同,下列选项中正确的是 ( )。

A)s1=s2; B)strcmp(s1,s2); C)strcpy(s1,s2); D)strcpy(s2,s1); 49. 为了比较字符串s 是否大于t,条件表达式应该写成( )。 A)s>t B)strcmp(s,t)<0 C)strcmp(s,t)==0 D)strcmp(s,t)>0 50. 若有语句“int a[10],*p=&a[2];”,则执行语句“p=p+4;”后,p 指向的数组元素是( )。

A)a[4] B)a[5] C)a[6] D)a[7] 51. 执行以下程序段的输出结果是( )。 char s[ ]="Program",*ptr; for (ptr=s; *ptr!='g'; ptr++) printf("%c",*ptr); A)Pro B)Prog C)Proram D)程序有错误 52. 对以下说明语句的正确理解是( )。 int a[10]={6,7,8,9,10}; A)将5 个初值依次赋给a[1]至a[5] B)将5 个初值依次赋给a[0]至a[4] C)将5 个初值依次赋给a[6]至a[10] D)因为数组长度与初值的个数不相同,所以此语句不正确 53. 以下给字符数组str 定义和赋值正确的是( )。

A)char str[10]; str={"China! "}; B)char str[ ]={"China!"}; C)char str[10]; strcpy(str, "abcdefghijkl"); D)char str[10]={"abcdefghijkl"}; 54. 当接受用户输入的含有空格的字符串时,应使用( )函数。 A)gets B)getchar C)scanf D)printf 55. 执行以下程序段的输出结果是( )。 int a[ ]={1,8,2,8,3,8,4,8,5,8}; printf("%d,%d\n",a[4]+3,a[4+3]); A)6,6 B)8,8 C)6,8 D)8,6 56. 以下说法正确的是( )。

A)p[i]等价于*(p+i) B)&p[i]等价于*(p+i) C)p[i]等价于p+i D)p[i]等价于*p+i 57. 设有定义“double a[10], *s=a”,以下能够代表数组元素a[2]的是( )。 A)(*s)[2] B)*(s+2) C)*s[2] D)*s+2 58. 执行下面程序段的输出结果是( )。 char s[ ]="Prog"; char *p; for (p=s;p

用不正确的是( )。

第6 页共20 页

A)scanf("%s",stu.name); B)printf("%d,%s,%d\n",stu); C)p->score=98; D)strcpy((*p).name,"LiMing"); 60. 已知如下定义,则下面叙述不正确的是( )。 struct stu{ int a; float b;}stutype; A)struct 是结构体类型的关键字

B)struct stu 是用户定义的结构体类型 C)stutype 是用户定义的结构体类型名 D)a 和b 都是结构体成员名

61. 当定义一个结构体变量时,系统为它分配的内存空间是( )。 A)结构体中一个成员所需的内存容量 B)结构体中第一个成员所需的内存容量 C)结构体中占内存容量最大者所需的容量 D)结构中各成员所需内存容量之和

62. 定义结构体类型“struct s{ int x; float f; }a[3];”,则执行语句“printf("%d",sizeof(a));”的 输出结果是( )。 A)4 B)12 C)24 D)8 63. 执行下列程序段的输出结果是( )。 struct c{int x; int y;}s[2]={1,3,2,7}; printf("%d", s[0].x*s[1].x); A)14 B)6 C)2 D)21 64. 若执行fopen 函数时发生错误,则函数的返回值是( )。 A)地址值B)0 C)1 D)EOF 65. 若要用fopen 函数打开一个新的二进制文件,该文件要既能读又能写,则文件打开方式 应是( )。

A)"ab+" B)"wb+" C)"rb+" D)"ab" 66. 当顺利执行了文件关闭操作时,fclose 函数的返回值是( )。 A)-1 B)TRUE C)0 D)1

二、填空题

请把答案填在下面的横线上,否则不能得分。 1. C 语言程序的基本单位是____________。

2. 要求运算对象必须是整型的运算符是____________。

3. 为了计算表达式x y2013 ,需要用到的数学函数是____________。(写出函数名) 4. 若要计算实数x 的绝对值,则要用到的数学函数是____________。(写出函数名) 5. 结构化程序的三种基本控制结构是____________、选择结构和循环结构。 6. C 语言程序设计中,单行注释以____________符号作开始标记。

7. C 语言程序设计中,多行注释以____________符号作开始标记,以____________符号作为

结束标记。

8. C 语言的标识符只能由字母、____________和____________组成,且第一个字符必须为字

母或____________。

9. C 语言中一个实数常量默认为____________类型。

第7 页共20 页

10. C 语言中求字节的运算符是____________。

11. 若有C 语言语句“scanf("%d,%d",&a,&b);”,如果要给变量a 输入5,变量b 输入6,则

在程序执行时,应该输入____________,然后回车。 12. C 语言中表示换行的转义字符是____________。 13. C 语言程序书写格式自由,一行可以写几个语句,一个语句也可以写在多行上。每条语 句的最后必须有一个____________符号表示语句的结束。

14. 若有定义“int a=2,b=3,x; x=a>b?a:b;”,则x 的值为____________。

15. switch 语句中,为了在其它条件都不满足时执行某个操作,应该使用____________子句。

16. 如果循环体不需要执行任何操作,此时应使用____________语句作为循环体。 17. 若要提前终止循环语句的执行,应该使用____________语句。

18. 若有定义“int a,*p=&a;”,要通过指针变量p 来输入a 的值,请填空。 scanf("%d",____________); 19. 若有定义“int x,*p;”,为了让p 指向x,应该执行的操作是____________。 20. 判断闰年的逻辑表达式为y%4==0&&y%100!=0______y%400______0。 21. 关系表达式的值是一个逻辑值,只有____________种取值。 22. 设“a=1,b=2,c=3,d=4,m=n=1”,执行完“(m=a>b)&&(n=c>d)”后,n 的值为____________。 23. C 语言提供了3 种基本循环结构:while 循环、do-while 循环和____________循环。 24. for 语句中有3 个表达式,各表达式间用____________分隔。 25. 除了给指针变量赋地址值外,还可以给指针变量赋空值,给指针变量p 赋空值的语句是 ____________。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值