福建省高校非计算机专业计算机等级考试习题集(二级c语言).docx
2009年10月25日(二级C语言)褊建省高校非计算机专必计算机等级考试习题集四、五、六、七、j212835394649535355565859606263646567687070717375777981福建省高校非计算机专业计算机等级考试2c习题集目录第一部分:选择题(每题2分,20题/套,共40分)一、概述语法基础三、控制结构数组函数指针结构体和共用体八、链表九、枚举、自定义类型和位运算十、文件第二部分:改错题(每题10分,2题/套,共20分).第1套第2套第3套第4套第5套第6套第7套第8套第9套第10套第11套第2套第三部分:填空题(每题10分,每套抽2题,共20分)第1套第2套第3套第4套第5套第6套第7套第8套第9套第10套第11套第12套第四部分:编程题(每题10分,2题/套,共20分)第1套第2套第3套第4套第5套第6套第7套第8套第9套第10套第11套第12套第五部分:参考答案一、选择改错三、填空四、编程858789919495969799100101103105106108109111112114114116118119124附录:福建省高等学校计算机应用水平等级考试二级(C语言)考试大纲第一部分:选择题(每题2分,20题/套,共40分)1 .在C语言中,合法的字符常量是().A.'字B. "A" C. "ABC" D. 'x41'2 .下面叙述正确的是().A.程序中必须包含有输入语句 B.变量按所定义的类型存放数据C. main函数必须位于文件的开头D,每行只能写一条语句3.错误的叙述是().A. 一个C语言源程序可由一个或多个函数组成B.若一条语句较长,也可分写在下一行上C. C程序必须包含一个main()函数D.构成C语言源程序的基本单元是算术表达式4.()是关于C语言数据类型的正确叙述。A.变量必须先定义后使用B.C.枚举类型不是基本类型D.5. main()函数的位置()»A.必须在自定义函数前面B.C.必须位于程序的最前面D.6. C语言函数体由()括起来。A. <>B.()C, 7. ()是不正确的叙述。A.注释说明只能位于一条语句的后面 C. C源程序可由一个或多个函数组成 8. 一个C语言源程序是由()o A. 一个主程序和若干子程序组成 C.若干过程组成D.9.结构化程序设计的三种基本结构是 A.函数结构、判断结构、选择结构 C.顺序结构、选择结构、循环结构 10. C源程序的调试是指对源程序进行 A.录入与编辑B.查错与编译C.11. C语言中,可将一系列语句置于( A. 一对尖括号"< >”之间B.不允许使用空类型 数组并不是构造类型可以在自定义函数后面 必须在自定义函数后面D.B. C源程序的基本组成单元是函数 D.每条语句最后必须有一个分号B.函数组成若干子程序组成().B.平行结构、嵌套结构、函数结构 D.判断结构、嵌套结构、循环结构 ()o 查错与排错 D.连接与运行)从而构成复合语句。一对圆括号"()”之间C. 一对花括号1”之间D. 一对方框号"”之间12 .构成C源程序的基本单位是().A.语句 B.变量C.运算符 D.函数13 .以下叙述中正确的是().A. C源程序中注释部分可以出现在程序中任意合适的地方B. 一对花括号” 只能作为函数体的定界符C. C源程序编译时注释部分的错误将被发现D.构成C源程序的基本单位是函数,所有函数名都可以由用户命名二、将旅基勒14.C语言的下列运算符中,优先级最高的运算符是().A.+B.+=C. IID.;=15.A.()为正确的用户标识符。StructB. 5fC. _f0.6D._for16.A.C语言基本数据类型包括( 整型、实型、逻辑型)oB.整型、实型、字符型C.整型、字符型、逻辑型D.整型、实型、字符串型17.A.()为合法的常量。52686LB. E-7C. 1.2E-2.1D. E12118.A.19.A.20.A.21.()为正确的变量名。-kl5B. IntC. k_5()为正确的字符常量。""B. "24m"C. "c"()为非法的字符串常量。""B. "s"C. 'efg'C语言整型数据在内存中的代码是用(D. k.jeepD.,M'D. “26 62”)表示的。A.22.A.23.A.24.原码B.反码C.补码以下选项中,合法的实型常数是().E-3B. .2E1C. 1E.5下列C语言合法的数据类型关键字是( DoubleB. UnsignedC. IntegerTurbo C中,int型数据占用的字节数(D. BCD 码D. L5ED. CharA.由用户自己定义B.为2个字节C.是任意的D.等于所用计算机的字长25. Turbo C中,基本数据类型存储空间长度的排列顺序是()。A.B.C.D.26.char<int<long char=int<long char<int<long char=int=longint<float<double int<float<double int=float=double int<float<double以下叙述中正确的是().A.字符常量用一对单撇号,作为单个字符的定界符B.字符常量和字符串常量一样,都是用双引号括起来C.字符常量存储时,自动在字符后加一个字符结束符号,0'D.字符常量和字符串常量所分配的内存空间大小是一样的27 .已知,A,的ASCII码的十进制值为65, U的ASCII码的十进制值为48,则以下程序 运行结果是().main() char chl,ch2;chl=,A'+5-'3'ch2=,A'+6-3;printf(" %d,%cn",chl,ch2);A. 67,DB. C,DC. C,68D. 67,6828 .若有定义intm=6;则正确的赋值表达式是(A. m*7B. m*5=8C. m-=m*6D. double(-m)29 .语句k=(m=5,n=+m);运行之后,变量k、m、n的值依次为()。A. 5,5,6B. 5,6,5C. 6,6,5D. 6,6,630 .语句x=5%4+(4/5);运行之后,整型变量x的值为()oA. 1B.2C.3D.O31 .()语句符合C语言语法。A. float z=28,int x,y=18;B. int x=25,y=25,z=25;C. int x=25:y=25:z=25;D. int x+y=z;32 .若有定义int a,x;则语句a=(x=8,x+8);运行后,变量a、x的值依次为()。A. 16,8B,8,8C. 16,16D. 8,1633 .若变量m,n,t已定义且赋予初值,则正确的表达式是(A. m=m+l=t-n B. m=6+n+t,m+C. m=m2D. m=int(5.6%4)34 .若有定义:int a,b; float x,则以下不符合C语言语法的表达式是(A. x%7B. x/=a-bC. a=b=2D. x=(float)a/b35 .若有定义:intm=4,n=5;fl()atk;,则以下符合C语言语法的表达式是(A. (m+n)*=kB. m=(n=5)C. k=float(n)/mD. n%2.536 .若有定义:inta=6;则语句a*=a-=a/=3;运行后,a的值是()»A. 10B. 0C. 34D. 2437 .下面关于C语言变量的叙述中,错误的是()。A.可以用define关键字定义变量B.变量名用大小写字母是有区别的C. C语言允许不同基本类型的变量之间进行混合运算D. C语言中要求对变量作强制定义的主要理由是:便于确定类型和分配空间38.若有定义:inta=5,b=2;则表达式b= (a!=5)的值为()»1 . 5B.OC.3D.239 .逗号表达式(a=15,a*4),a+15的值为().A.15B. 30C. 75D. 6040 .下列语句中,符合C语言语法的赋值语句是()oA.a=7+b+c=a+7;B.a=7+b+=a+7;C.a=7+b,b+,a+7;D.a=7=b,c=a+7;41.()是正确的叙述。A.(int)5.0/6 与 5/6 等价B.G1与“G”等价C.5/6 与 5.0/6.0 等价D.+3与4等价42.下面叙述中,错误的是()oA.C语言中的表达式求值,是按其运算符的优先级先高后低的次序进行B.自增与自减运算符的结合方向为“自右至左”C.关系运算符的优先级低于算术运算符D.C语言算术运算符不包含模运算符“ ”43. ()是正确的叙述。A. 表达式是合法的B. 若变量x,y为整型,则(a+b)+是合法的C. 强制类型转换运算的优先级高于算术运算D. 表达式m' * 'n'是不合法的44. 若有定义int i=lj=9;则表达式(+j)*(i-)的值为().A. 0 B. 10 C. 9 D. 845. 设整型变量x为7,使整型变量y不为2的表达式是().A.y=x%3B. y = x/3C.y =(+x)/3D. y=8-(x)46. 若已定义inta=3,b=2,c=l;则语句+all+b&&+c;运行后b的值为(A. 0B. 3 C. 1 D. 247. 若有定义:inti=5J=4;则语句i/=+j;运行后i的值为()。48. 若已定义:inta=2,b=2;则表达式(a+(b+), b)的值是()。B. 3 C. 4 D. 649. 若有定义:int r,x=245;则语句r=x/100%9;运行后r的值为()。A.2B.5C.0D.2750. 若已定义:inti=6,t;则语句t=3+(-i);运行后t的值为()oA.9B.7C.8D.551. C语言的运算符按运算对象的个数属()oA. 单目运算符 B.四目运算符 C.双目运算符D.三目运算符52. 若已定义:inta=5,b=9,c=6;则语句b+; +c; a=b-c;运行后a的值为()。A. 5B. 3 C. 2 D. 453. 以下程序运行时,若从键盘输入5,则输出结果是()。main()int a;scanf(H%dH,&a);if(a+>5) printf(M%dnM,a);else printf(n%dn,a-);A. 7B. 4 C. 5 D. 654.若已定义float x;要从键盘输入数据36.582给变量x,则应选用()语句。A.scanf(M%2.3fM,&x);B.scanf(H%6f'&x);C.scanf(H%6.3F&x);D.scanf(H%5.3F&x);55A.C56A.C57A.C58,若已定义double y;拟从键盘输入一个值赋给变量y,则正确的函数调用是( scanf(H%d,&y);B.scanf(H%7.2F;&y);scanf(H%ir&y);D.scanf(H%ldM,&y);.已有定义char s;使用scan* )函数输入一个字符给变量s,不正确的函数调用是()。 scanf(M%cH,&s);B.scanf(H%dH,&s);scanf(M%uH,&s);D.scanf(H%ir*,&s);, 函数putchar()的功能是向终端输出()o一个字符B.多个字符一个关系表达式D. 一个实型变量值.若已定义inta=ll;执行以下语句后的输出结果是()。printf(Ha=%d,a= %o9a= %xnH,a,a,a);A.a=ll, a=ll, a=bB. a=ll, a=13, a=bC.a=ll, a=13, a=cD. a=ll, a=12, a=1359.若有定义 int m=4321,n=123,k=21;语句 printf("4d+%3d+%2dlm,n,k);执行后的 输出结果是()oA.4321432143211231231232121B. 432112321C.4321+123+21D, 432+123+02160. 已有如下定义和输入语句,char cl,c2;int x;scanf(H %c%d%cH,&cl,&x,&c2);若要求x、cl、c2的值分别为9、4C和IT,正确的数据输入是()oA. K9H B. K 9 H C. K9 H D. 9KH61. 以下程序段的运行结果是()oint a=l;printf(H%d, %d, %dnn, a, +a, a+);A. 3,3,1 B. 1,2,2C. 1,2,3 D. 3,2,162. 以下程序的运行结果是()ovoid main()int a=65;char c=*A*;printf(H%d+%c=%dnH,a,c,a+c);A. A+A=AA B. 65+A=65A C. 65+65=130 D. 65+A=13063. 若已定义:intx=7;floaty=7.0;以下语句中能输出正确值的是()。A.printf(M%d %d”,x,y);B. printf(H%d %.3fH,x,y);C.printf(H%.3f %.3r',x,y);D. printf(H%.3f %d”,x,y);64. putchar函数可以向终端输出一个()。A.字符或字符型变量值B,整型变量表达式值C.实型变量值D.字符串65.若已定义:int a=6;Hoat b=L5;要求输出形式为:6 * 1.50=9.00 ,应选用的正确输 出语句是()oA.printf(H%d * %f=%fa,b,a*b);B. printf(u%d * %.2f=%.2fM,a,b,a*b);C.printf(H%d * %d=%.2fH,a,b,a*b);D. printf(H%.2f * %.2f=%.2ra,b,a*b);66. 有以下程序:main()int c;while(c=getchar()!= *n*) switch(c-'21) case 0:case 1 : putchar(c+4);case 2 : putchar(c+4); break;case 3 : putchar(c+3);default: putchar(c+2); break;printf(HnH);当输入:247回车,程序的输出结果是()。A.689B.6689C.66778D.6688767. 若已定义int x=5,y=9,z;语句z=x>=y;运行后z的值为()。A.1B.tC.0D.f68. 判定逻辑值为“真”的最准确叙述是()oA. 1B.大于。的数 C.非0的整数 D.非0的数69. 若已定义int x=-16,y=-12,z;语句z=xv=y;运行后z的值为()。A.tB. 1 C.fD. 070. 能正确表示数学关系式100WsV300的表达式为()。A.(s>=100) & (s<300)B. 100<= s<300C.(s>=100) && (s<300)D. (s>=100) and (s<300)71. 若定义int a=2,b=3;则表达式!allb的值为()oA. 0B. 1 C. 2D. 372. 若定义inta=-5,b=-8,c=12;则表达式a>=bllb<c的值为()。A.变量i的值B.变量j的值 C. 0 D. 173. 下列表达式()不能用来判断整型变量x中的值是否为奇数。A. x%2=l B. !(x%2=0) C. !(x%2) D. x%274. 若有定义:inta=3,b=2,c=3;则值为0的表达式是()。A.(a-b)=(c/b)B. a>=cC.c-blla+b&&(b*c-a-c)D. (b*c-a-c)&&(b*c-a-b)75. 若已定义:intx=4,y=2,z=0;则表达式(xyv=y)ll (y二z)的值是()。A. 1B. 0 C. 2D. 476. 若有定义:int a=3,b=2,c=l,k;则表达式k=a>b>c的值是()。A.0B.1C.2D.377. 以下运算符中优先级最高的是()oA.<=B.&&C.IID.!78. 执行以下语句后,b的值是()oint a=5,b=6,c= 1 ,x=2,y=3,z=4;(a=c>x) II (b=y>z);A. 0B. 1 C. -1D. 679. 以下程序运行后,a的值是()omain()int a,b;for(a=l,b=l;a<=100;a+)if(b>=20) break;if(b%3=l) b+=3; continue; b-=5;A. 101 B. 100C. 8 D. 780. 已定义double k=3.6;则正确的赋值表达式是(A.k=double(-3.6)B. k%3C.k=k*(-1.0)=-3.6D. k+=k-=(k=1.2)*(k=3)81. 已定义char c = *A* ;则正确的赋值表达式是()。A.c=028B.c=(c+)%4C.c+l=66D.c+=127-82. 已定义intm=,A,;则正确的表达式是()。A.2*m=m+B.m=int(-3.2)C.m%3D.m=m-m=m-583. 设已定义float a=2.0,b=3.0;使a值为5.0的表达式是(A.a+= bB.a*=b+2.0C.a/=b+2.0D.a-=b+2.084. 若已定义int m=7;float k=5.5;则表达式k+ m%2/4的值为()。A.6.375B.6.75C.5.75D.5.585. 若已定义 int a=3,b=3,x=l,y=2;表达式(a=y>x)&&(x=b>a)的值是()。A.6B.1C.9D.086. 若有定义:inta=2,b=3; float x=5;则表达式x*b/a的值是(A.7.5B.7C.6D.587. 若有定义:int x=8; float y=130;char z='A'则表达式 x+z%(int)y 的值是()。已知4,的ASCII码的十进制值为65A.运行时产生错误信息B. 8C. 73D. 8.588. 若已定义:int m=7,n=4; float x=3.0,y=8.0,k;贝!执行语句 k=m/2+n*x/y;后,变量 k的值是()oA. 3B. 4C. 4.5D. 589. 若有定义:float x=2,y=4,h=3;下列表达式中与(x+y)*h/2.0计算结果不相符的是 ()oA. (x+y)*h/2 B. (x+y)*h*l/2 C. (l/2)*(x+y)*h D. h/2*(x+y)90. 表达式2+sqrt(16.0)/4结果的数据类型是()。A.DoubleB.intC.charD.void91. 若有定义:inta=4,b=5,c=6;则表达式(l.0*a+b)/c的值是()。A.1.5B.1C.4D.4.5三,控制辂相92. 以下程序段的运行结果是()oint x=3;doprintf(M%3d, n,x-=2);while(!(-x);A. 1,B. 30,C.死循环93.以下程序运行时,若从键盘输入6,则输出结果是(void main()int x;scanf(M%dH,&x);if(x->6)printf(H%dnH,x);elseD 1,-2,printf(M%dnH,-x);A. 4B. 5C. 694.以下程序的运行结果是()ovoid main()int m,n=l,t=l;if(t= 0)t=-t;elsem=n>=0?7:3;printf(H%dnH,m);A. 3B.-lC. 795 . 对于整型变量a,赋值语句a=(a%3=0?l:0);与(A. if (a%3= =0) a=l; else a=0;B. if (a%3!=0) a=0; else a=l;C. if (a%3) a=0; else a=l;D. if (a%3) a=l; else a=0;96 .以下程序运行的结果是()oD. 3D. 1)语句不等价。void main()int x,y,z,a;x=y=z=l;a=15;if(!x)a-;else if(y)if(z)a=3;elsea+=4;printf(H%dnH,a);A. 15B. 3C. 19D. 1497.若己定义inta=l,b=2,t=3;则执行以下程序段后变量a, b, t的值分别为( if(a<b) t=b; b=a; a=t;A. a=2,b=l,t=2B. a=2,b=l,t=lC. a=2,b=l,t=3D. a=3,b=l,t=298 .以下程序段运行后变量k的值为()oint a=3,b=2;int k;k=(-a=b+)?a:b+l;A. 0B. 1C. 2D. 399 .以下程序的运行结果是()ovoid main()int n=9;switch(n-) default: printf(H%d M,n+);case 8:case 7: printf(M%dn,n); break;case 6: printf(M%d*n+);case 5: printf(M%dn,n);100.以下程序的运行结果是()ovoid main() int n=8;switch(n-) default: printf(H%d n,n+);case 8:case 6: printf(M%d M,n); break;case 4: printf(M%d n,n+);J-A. 8B. 86 C. 7D. 87101 .以下程序的运行结果是()ovoid main() int a;if(a=6)printf(M%dnM,a);else if(a>6)printf(M%dnH,a+2);elseprintf(M%dn,a+3);A.运行时产生错误信息B. 9 C. 8 D. 6102 .若有定义:int x=10,y=8,a;贝!)执行语句a=(-x=y)? x: y);后,变量a的值是()。A. 8B. 9C. 10D. 0103 .若有定义:inta=2,b=3,c=l;则以下程序段的运行结果是(if(a>b)if(a>c)printf(M%d M,a);elseprintf(M%d M,b);printf(H%d M,c);A. 31B. 21 C. 3D. 1104 .以下条件语句中(其中si和s2分别表示C语言的语句),()与其他三条语句不等价。A.if(a) si; else s2;B. if(a = 0) s2; else si;C.if(a != 0) si; else s2;D. if(a = 0) si; else s2;105 .下列程序段中,非死循环的是()oA. int i=100;while(l)i=i% 100+1;if(i>=100) break;B. int k=0;do+k;while(k>=0);C. int s=10;while(+s%2+s%2) s+;D. for(;)106 .若已定义int a;不会产生死循环的语句是()oA.for(; ;a+= 2);B. for(a=10; ;a-);C.for( ;(a=getchar()!= 1Xn*; ); D. while(-l) a+;107.在循环语句的循环体中,break语句的作用是()»A.继续执行break语句之后的循环体各语句B.提前结束循环,接着执行该循环后续的语句C.结束本次循环D.暂停程序的运行108 .以下程序段运行后,循环体中的n+=3;语句运行的次数为()int iJ,n=0;for(i=l;l<=3;i+)for(j=l;j<=i;j+)n+=3;printf(M%dnn,n);A. 6次 B.9次C.12次 D.1次109 . dowhile循环与whi加循环的主要区别是()。A. while循环体至少无条件执行一次,而do-while循环体可能都不执行B. do-while循环体中可使用continue语句,while循环体中不允许出现continue语句C. dowhile循环体中可使用break语句,while循环体中不允许出现break语句D. dowhile循环体至少无条件执行一次,而while循环体可能都不执行110 .以下程序段运行后,循环体运行的次数为()oint i=8,a=0;for (;i<8;i+) a+= i;A.0次 B.1次 C.8次 D.无限111 .以下程序段运行后变量a的值为()oint i=l,a=0;for( ;i<3;i+) continue; a+=i;)A. 6B. 3C. 0D. 5112.有以下程序:void main() int i;for(i=l;i<=3;i+)switch(i) case 1: printf(M%dM, i); break; case 2: printf(H%dM, i);default :printf(H%dMJ);执行后输出结果是()oA. 1223B. 1113.以下程序的运行结果是(void main()int s = 0, i = 0;while(i< 8)i+; if(i%2=0) continue; s+=i;printf(,%dnM,s);C.)o111223A. 36B. 7114.以下程序的运行结果是(void main()int s = 0, i = 0;while(i< 10)i+;if(i % 2=0) s += i;printf(M%dnH,s);C.16A. 20B. 30115.以下程序的运行结果是(c.)o25D. 123D. 12D. 45void main() int x = 5;doprintf(H%2dM, x-); while(!x);A. 5432 1B. 432 1 0C. 5D. 4116 .以下程序的运行结果是()ovoid main()int ij, k=0;for(i= 3;i>=l;i-)for(j=i;j<=3;j +) k += i * j ;printf(H%dnM, k);A. 19B. 29C. 6D. 25117 .以下程序运行时,循环体的执行次数是()。void main()int ij;fdr(i=O J=1 ;i<=j+l ;i=i+2 j-) printf(H%3d, i);A.3B.2C.1D.0118.设已定义chars=""NameAddress023n",则字符串所占的字节数是(A.19B.16C.18D.14119.数组元素下标的数据类型为()。A. 整型常量、字符型常量或整型表达式B. 字符串常量C.实型常量或实型表达式D.任何类型的表达式120 .()是正确的数组定义。A. int n=109xn;B. int x10;C. int N=10;int xN;D. int n;scanf(H%dH,&n);int xn;121 .若已定义intarr10;则不能正确引用arr数组元素的是()。A.arrOB.arrlC.arr10-lD. arr7+3122 .若已定义int x4=2,l,3;则元素xl的值为(A.0B.2C.1D. 3123 .以下程序段运行后,xl的值为()oint x5=5,432,1;xl=x3+x2+2-x3-l;A. 6B. 0C. 1D. 5124 .()是合法的数组定义。A. char str=48,49,50,51,52,53;B. int a5=0,l,2,3,4,5;C. int a =HstringM;D. char str =4string,;125.若有以下程序:void main()chars10= Hajskdr,r10;r=s;printf(H%snM,r);则().A.执行时输出:ajskdlB.执行时输出:aC. 执行时输出:ajD. 编译不通过126.下面程序段的运行结果是()。int m=5,8,7,6,9,2,i=l;domi+=2; while(m +i>5);for(i=0;i<6;i+)printfC'%d H,mi);A. 7 10 9 8 11 4B. 71098112C. 51098112D. 51098114127.下面程序段的运行结果是()oint m=5,8,7,6,9,2,i=l;for(i=0;i<6;i+)if(i % 2 !=0) mi+=10;for(i=0;i<6;i+) printf(H%d M,mi);A. 518716912B. 151817161912C. 158176192D. 587692下面关于数组的叙述中,正确的是().A.B.CD.129定义数组后,数组的大小是固定的,且数组元素的数据类型都相同定义数组时,可不加类型说明符定义数组后,可通过赋值运算符”="对该数组名直接赋值 在数据类型中,数组属基本类型 以下程序段的运行结果是().int a=l,2,3,4,ij;j=l;for(i=3;i>=0;i-) ai=ai*j;j=j*3;for(i=0;i<4;i+) printf("%d ",ai);A. 3 69 12B. 1812 94C. 27 18 94D. 54 18 94130 .下面关于字符数组的叙述中,错误的是().A.可以通过赋值运算符“=”对字符数组整体赋值B.不可以用关系运算符对字符数组中的字符串进行比较C.字符数组中的字符串可以整体输入、输出 D.字符数组可以存放字符串131 .以下程序段的运行结果是().main()int i=4j;j=i;pic(i+2*j-2,'*');putchar(,n,);for(j-=2;j>=0;j-) pic(3-j, *');pic(i+2*j, putchar(*nf);pic(int len9char c) int k;for(k=l;k<=len;k+) putchar(c);A. *B. *C. *D. *132,以下程序段执行后输出的结果是().int a4=l,2,3,4,5,6,7,8,9,10,ll,12);printf("%dn",al2);A. 2B. 3C. 6D. 7133 .以下程序段执行后p的值是().inta33=3,2,13,2,l,3,2,l);int j,k,p=l;for(j=0;i<2;i+)for(k=j;k<4;k+) p*=ajk;A. 108 B. 18C. 12D. 2134 .不能对二维数组a进行正确初始化的语句是(),A. inta32=l,2,3,