一、 选择题
1. 以下非法的赋值语句是 A: n=(i=2,++i); B: j++; C: ++(i+1); D: x=j>0;
2. 已有定义:int x=3,y=4,z=5;,则表达式!(x+y)+z-1 && y+z/2 的值是 A: 6 B: 0 C: 2 D: 1
3. 阅读以下程序: main() { int x;
scanf(“%d”,&x);
if(x--<5) printf(“%d”,x); else printf(“%d”,x++); }
程序运行后,如果从键盘上输人5,则输出结果是( )。 A: 3 B: 4 C: 5 D: 6
4. 有如下程序 main0
{ int a=2,b=-1,c=2; if(a
if(b<0) c=0; else c++
printf(\}
该程序的输出结果是 A: 0 B: 1 C: 2 D: 3
5. 有以下程序 #include
{ int a,b,c=246; a=c/100%9; b=(-1)&&(-1);
printf(\}
输出结果是( )。 A: 2,1 B: 3,2 C: 4,3 D: 2,-1
6. 两次运行下面的程序,如果从键盘上分别输入6 和4,则输出结果是 main( ) { int x;
scanf(\
if(x + + >5) printf(\else printf(\A: 7 和5 B: 6 和3 C: 7 和4 D: 6 和4
7. 能表示x 为偶数的表达式是 A: x%2==0 B: x%2==1 C: x%2 D: x%2!=0
8. 下面的程序段中共出现了几处语法错误? int a,b;
scanf(\b=2a;
if(b>0) printf(\A: 1 B: 2 C: 3 D: 4
9. C 语言中,逻辑“真”等价于 A: 大于零的数 B: 大于零的整数 C: 非零的数 D: 非零的整数 2 / 18
10. C 语言的 switch 语句中,case 后 A: 只能为常量
B: 只能为常量或常量表达式
C: 可为常量及表达式或有确定值的变量及表达式 D: 可为任何量或表达式
11. 已知int i=10;表达式\的值是 A: 0 B: 1 C: 19 D: 20
12. 设有int i, j, k; 则表达式i=1,j=2,k=3, i&&j&&k 的值为 A: 1 B: 2 C: 3 D: 0
13. 逻辑运算符两侧运算对象的数据类型 A: 只能是0 或1
B: 只能是0 或非0 正数
C: 只能是整型或字符型数据 D: 可以是任何类型的数据
14. 能正确表示“当x 的取值在[1,10]和[200,210]范围内为真,否则为 假”的表达式是( )
A: (x>=1)&&(x<=10)&&(x>=200)&&(x<=210) B: (x>=1)||(x<=10)||(x>=200)||(x<=210)
C: (x>=1)&&(x<=10)||(x>=200)&&(x<=210) D: (x>=1)||(x<=10)&&(x>=200)||(x<=210)
15. 已知x=43,ch=’a’,y=0;则表达式(x>=y&&ch<’b’&&!y)的值 是( ) A: 0 B: 1
C: 语法错误 D: 假
16. 执行下列语句后a 的值为 int a=5,b=6,w=1,x=2,y=3,z=4; (a=w>x)&&(b=y>z); A: 5 B: 0 C: 2 3 / 18
D: 1
17. 以下程序的输出结果是( ) main()
{ int a=5,b=0,c=0;
if(a=b+c) printf(“***\\n”); else printf(“$$$\\n”); }
A: 有语法错误不能通过编译 B: 可以通过编译但不能通过连接 C: *** D: $$$
18. 以下程序的输出结果是( ) main() { int m=5;
if(m++>5) printf(“%d\\n”,m); else printf(“%d\\n”,m--); } A: 4 B: 5 C: 6 D: 7
19. 若运行时给变量x 输入12,则以下程序的运行结果是( ) main() { int x,y;
scanf(“%d”,&x);
y=x>12?x+10:x-12; printf(“%d\\n”,y); } A: 0 B: 22 C: 12 D: 10
20. 若w=1,x=2,y=3,z=4,则表达式w 21. 设有int a=2,b;则执行b=a&&1;语句后,b 的结果是 A: 0 4 / 18 B: 1 C: 2 D: 3 22. 设有int m=1,n=2;则++m==n 的结果是 A: 0 B: 1 C: 2 D: 3 23. 设有int n=2;则++n+1==4 的结果是 A: true B: false C: 1 D: 0 24. 设有int n=2;则++n+1==4,n 的结果是 A: 1 B: 2 C: 3 D: 4 25. 以下使i 的运算结果为4 的表达式是 A: int i=0,j=0; (i=3,(j++)+i); B: int i=1,j=0; j=i=((i=3)*2); C: int i=0,j=1; (j==1)?(i=1):(i=3); D: int i=1,j=1; i+=j+=2; 26. 当a=5,b=2 时,表达式a= =b 的值为 A: 2 B: 1 C: 0 D: 5 27. 若执行以下程序时从键盘上输入9,_______则输出结果是 main() { int n; scanf(\ if(n++<10) printf(\else printf(\} A: 11 B: 10 C: 9 5 / 18 D: 8 28. main() { int a,b,d=241; a=d/100%9; b=(-1)&&(-1); printf(“%d,%d”,a,b); } A: 6,1 B: 2,1 C: 6,0 D: 2,0 29. 若有int x=10,y=20,z=30;以下语句执行后x,y,z 的值是( ) if (x>y) z=x;x=y;y=z; A: x=10,y=20,z=30 B: x=20,y=30,z=30 C: x=20,y=30,z=10 D: x=20,y=30,z=20 30. 下列表达式中能表示a 在0 到100 之间的是 A: a>0&a<100 B: !(a<0||a>100) C: 0 D: !(a>0&&a<100) 31. 为了避免嵌套的if—else 语句的二义性,C 语言规定else 总是与( ) 组成配对关系。 A: 缩排位置相同的if B: 在其之前未配对的if C: 在其之前未配对的最近的if D: 同一行上的if 32. 已知:int x,a,b;下列选项中错误的if 语句是 A: if(a=b) x++; B: if(a<=b) x++; C: if(a-b) x++; D: if(x) x++; 33. 当把以下四个表达式用作if 语句的控制表达式时,有一个选项与其它 三个选项含义不同,这个选项是( )。 A: k%2 B: k%2==1 6 / 18 C: (k%2)!=0 D: !k%2==1 34. 设有定义:int a=2,b=3,c=4;,则以下选项中值为0 的表达式是( )。 A: (!a==1)&&(!b==0) B: a C: a && b D: a||(b+b)&&(c-a) 35. 以下程序段的输出结果是。 int a=10,b=50,c=30; if(a>b) a=b; b=c; c=a; printf(\; A: a=10 b=50 c=10 B: a=10 b=30 c=10 C: a=50 b=30 c=10 D: a=50 b=30 c=50 36. 以下4 个选项中,不能看作一条语句的是 A: {;} B: a=0,b=0,c=0; C: if(a>0); D: if(b==0) m=1;n=2; 以下题目为二级题 37. if语句的基本形式是:if(表达式)语句,以下关于“表达式”值的叙述中正确的是 A)必须是逻辑值 B)必须是整数值 C)必须是正数 D)可以是任意合法的数值 38. 有以下程序段 int i,n; for(i=0;i<8;i++) {n=rand()%5; switch (n) { case 1: case 3:printf(\case 2: case 4:printf(\ 7 / 18 case 0:exit(0); } printf(\} 以下关于程序段执行情况的叙述,正确的是 A)for循环语句固定执行8次 B)当产生的随机数n为4时结束循环操作 C)当产生的随机数n为1和2时不做任何操作 D)当产生的随机数n为0时结束程序运行 39.有以下程序 #include { int x=1,y=0; if(!x) y++; else if(x==0) if (x) y+=2; else y+=3; printf(\} 程序运行后的输出结果是 A)3 B)2 C)1 D) 0 40.有以下程序 #include { if(x!=y) return ((x+y)/2); else return (x); } main() { inta=4,b=5,c=6; printf(\} 程序运行后的输出结果是 A)3 B)6 C)8 D)12 41. 有以下程序: #include main(){ int a=0,b=0,c=0,d=0; if(a=1) b=1;c=2; else d=3; printf(\,%d,%d,%d\} 程序输出( ). A)1,1,2,0 B)0,0,0,3 C)编译有错 D) 0,1,2,0 42. 有以下程序: #include A) a=2,b=2 B) a=2,b=1 C) a=1,b=1 D) a=1,b=0 43. 若有定义int x, y; 并已正确给变量赋值,则以下选项中与表达式(x-y)?(x++) : (y++)中的条件表达式(x-y) 等价的是( ) A) (x-y<0||x-y>0) B) (x-y<0) C) (x-y>0) D)(x-y==0) 44 .有以下程序: #include if ( !x ) y++; else if (x==0) if(x) y+=2; else y+=3; printf(\} 程序运行后的输出结果是( ) A) 3 B) 2 C) 1 D) 0 45. 若有定义: float x=1.5; int a =1,b=3,c=2;则正确的switch语句是() A)switch(a+b) {case 1: printf(\ case 2+1 : printf(\ B)switch( (int)x ); { case 1: printf(\ case 2 : printf(\C) switch( x ); { case 1.0: printf(\ case 2.0 : printf(\D) switch( a+b ) { case 1: printf(\ case c: printf(\ 46. 若变量已正确定义,在if ( W ) printf(\中,以下不可替代W的是()。 A) a<>b+c B) ch=getchar() C) a==b+c D) a++ 47. 下列叙述中正确的是( ) . A) 在switch语句中,不一定使用break语句 B) 在switch语句中必须使用default C) break语句必须与switch语句中的case配对使用 D) break 语句只能用于switch语句 48. 有如下嵌套的if语句 if ( a if(b else k=c; 以下选项中与上述语句等价的语句是( ) A) k=(ac)?b:c); B) k=(a 49. 设有宏定义: #define IsDIV(k,n) ((k%n==1) ? 1:0) 且变量m已正确定义并赋值,则宏调用: IsDIV(m,5) && IsDIV(m,7) 为真时所要表达的是: A) 判断m是否能被5和7整除 B) 判断m被5和7 整除是否都余1 C) 判断m被5或者7整除是否余1 D) 判断m是否能被5或者7整除 50. 有以下程序 #include 程序运行结果是 A) 3 B) 1 C) 2 D) 0 51. 以下选项中,当x为大于1的奇数时,值为0的表达式是 A) x%2==0 B) x/2 C) x%2!=0 D) x%2==1 52. 有以下程序 #include 程序运行时,输入的值在哪个范围才会有输出结果() A) 小于3的整数 B) 不大于10的整数 C) 大于3或等于10的整数 D) 大于3且不等于10的整数 53. 在以下给出的表达式中,与while(E)中的E不等价的表达式是() A) (E>0 || E<0) B) (E==0) C) (!E==0) D) (E!=0) 54. 以下选项中与 if (a==1) a=b; else a++; 语句功能不同的switch语句是() A) switch(a==1) {case 0: a=b; break; case 1: a++; } B) switch(a) {case 1: a=b; break; default: a++; } C) switch(a) { default : a++; break; case 1: a=b; } D) switch(a==1) {case 1: a=b; break; case 0: a++; } 55. 有以下程序 #include 程序运行后的输出结果是() 12 / 18 A) 1,3,2 B) 1,3,3 C) 1,2,3 D) 3,2,1 56. 下列条件语句中,输出结果与其他语句不同的是() A) if(a!=0) printf(\ else printf(\B) if(a==0) printf(\ else printf(\C) if(a==0) printf(\ else printf(\D) if(a) printf(\ else printf(\ 57. 有以下程序 #include 程序的运行结果是() A) 1 B) 41 C) 2 D) 331 58. 若有以下程序 #include int a=1,b=2,c=3,d=4,r=0; if(a!=1) ; else r=1; if(b==2) r+=2; else; if(c!=3) r+=3; else; if(d==4) r+=4; printf(\} 则程序的输出结果是() A) 10 B) 7 C) 6 D) 3 59. 有以下程序 #include main(){ int a; scanf(\ if(a++<9) printf(\ else printf(\} 程序运行时从键盘输入9<回车>, 则输出结果是 A) 10 B) 11 C) 9 D) 8 60.设x=3,y=-4,z=6,写出表达式 !(x>y)+(y!=z)||(x+y)&&(y-z) 的结果( ) A、0 B、1 C、-1 D、6 二、 填空题 1、C语言中用_____表示逻辑值“真”,用_____表示逻辑值“假” 2、C语言中的关系运算符“!=”的优先级_____ “<=”的优先级。 3、C语言中的逻辑运算符“&&”的优先级_____ “||”的优先级。 4、C语言中的关系运算符\的优先级_____ 逻辑运算符“&&”的优先级 5、将下列数学式改写成C语言关系表达式或逻辑表达式 A) _______________ B) _______________ A) a=b 或a 6、请写出以下程序的输出结果是_____________ #include 7、请写出与以下表达式等价的表达式 A) _______________ B) _______________ A) !(x>0) B) !0 14 / 18 8、若变量已正确定义,以下语句段的输出结果是______________ x=0; y=2; z=3 switch( x ) { case 0 : switch( y==2 ) { case 1: printf(\ break; case 2: printf(\ break; } case 1 : switch( z ) { case 1: printf(\ case 2: printf(\ break; default: printf(\ } } 9、 int a=3; a+=(a<1)?a:1; printf(“%d”,a); 结果是__________ 以下题目为二级题 10、有以下程序 #include scanf(\ if(x>15)printf(\if(x>10)printf(\if(x>5)printf(\} 若程序运行时从键盘输入12<回车>,则输出结果为__________。 11、以下程序运行后的输出结果是_________。 #include { int x=10,y=20,t=0; if(x==y)t=x;x=y;y=t; printf(\} 12、以下程序的运行结果是_________。 main() { int a=2,b=7,c=5; 15 / 18 switch(a>0) {case 1: switch (b<0) {case 1:printf (\ case 2: printf(\ } case 0: switch(c==5) { case 0: printf(\ case 1: printf(\ case 2: printf(\ } default : printf(\} printf(\ } 13、 以下程序的运行结果i的值为_________. main() { char ch='$'; int i=1,j; j=!ch&&i++; printf(\} 14、以下程序用于判断a,b,c能否构成三角形,若能输出YES,若不能输出NO。当a,b,c输入三角形三条边长时,确定a,b,c能构成三角形的条件是需要同时满足三条件:a+b>c,a+c>b,b+c>a。 请填空。 main() { float a,b,c; scanf(“%f%f%f”,&a,&b,&c); if(____________)printf(“YES\\n”);/*a,b,c能构成三角形*/ else printf(“NO\\n”);/*a,b,c不能构成三角形*/ } 三、 编程题 1. 从键盘输入一个学生的分数, 要求实现这样的判断功能: 如果分数大于 100,输出 Input error! 如果分数介于 100到 90 之间, 输出 Very Good! 如果分 数介于 80 到 90 只,输出 Good! 如果分数介于 70 到 80 之间,输出 Middle 如果 分数介于 60到 70 之间, 输出 Pass! 如果分数小于 60,输出 No Pass! 2. 输入一个整数,判断该数是奇数还是偶数。 3. 从键盘接收三个整数,编程求出最小数。 16 / 18 4. 从键盘接收一个字符,如果是字母,输出其对应的 ASCII 码,如果是数字,按原样输出,否则给出提示信息: 输入错误! 。 5. 输入一个字符,判断它是否是小写字母,是小写字母,则将它转换成大写字母,如果不是,则不转换,然后输出所得到字符。 6. 编程判断输入的正整数是否既是 5 又是7的整倍数。若是,输出 yes,否则输出 no。 7. 编写一个简单计算器程序,输入格式为:data1 op data2。其中 data1和 data2 是参加运算的两个数,op 为运算符,它的取值只能是+、-、*、/。 8. 已知银行整存整取存款不同期限的月息利率分别为: 0.315% 期限一年 0.330% 期限二年 月息利率 = 0.345% 期限三年 0.375% 期限五年 0.420% 期限八年 要求输入存钱的本金和期限,求到期时能从银行得到的利息与本金的合计。 附录: 答案: 一、 选择题 1 C 11 B 21 B 31 C 41 C 51 A 二、 填空题 1 非0, 0 6 1 17 / 18 2 D 12 A 22 B 32 B 42 B 52 D 3 B 13 D 23 C 33 D 43 A 53 B 4 C 14 C 24 C 34 A 44 D 54 A 5 A 15 B 25 D 35 B 45 A 55 B 6 A 16 B 26 C 36 D 46 A 56 C 7 A 17 D 27 B 37 D 47 A 57 A 8 C 18 C 28 B 38 D 48 B 58 B 9 C 19 A 29 B 39 D 49 B 59 A 10 B 20 D 30 B 40 B 50 A 60 B 2 低于 7 A) x<=9 3 高于 8 * # 4 高于 9 4 5 A) a==b||a 18 / 18