C语言练习题1(分支?循环)
编辑:高山流水审核:高山流水校对:高山流水
选择题(例)
1. 有如下程序
main()
{
float x=2.0,y;
if (x<0.0)y=0.0;
else if(x<10.0)y=1.0/x;
else y=1.0;
printf("%f\n",y);
}
该程序的输出结果是A
A?0.500000
B?0.250000
C?1.000000
D?0.000000
2. C语言的if语句中,用作判断的表达式为C
A?关系表达式
B?逻辑表达式
C?任意表达式
D?算术表达式
3.假定所有变量均己正确定义,下列程序段运行后x的值是().D
k1=1;
k2=2;
k3=3;
x=15;
if(!k1)x--;
else if(k2)x=4;
else x=3;
A?15
B?14
C?3
D?4
选择题(79道)
1.C语言中的switch语句中case后D
A?可为任何量或表达式
B?只能为常量或常量表达式
C?可为常量或表达式或有确定值的变量及表达式
D?只能为常量
2. 执行下列语句后的输出为().C
int j=-1;
if(j<=1) printf("****\n");
else printf("%%%%\n");
A?****c
B?有错,执行不正确
C?****
D?%%%%
3. 有以下程序
main()
{
int i=1,j=1,k=2;
if((j++||k++)&&i++)
printf("%d,%d,%d\n",i,j,k);
}
执行后输出结果是A
A?2,2,2
B?2,2,3
C?l,l,2
D?2,2,l
4. 判断char型变量c是否为大写字母的C的表达式是C A?'A'<=c<='Z'
B?('A'<=c)AND('Z'<=c)
C?(c>='A')&&(c<='Z')
D?(c>='A')&(c<='Z')
5. 有如下程序
main()
{
float x=2.0,y;
if (x<0.0)y=0.0;
else if(x<10.0)y=1.0/x;
else y=1.0;
printf("%f\n",y);
}
该程序的输出结果是A
A?0.500000
B?0.250000
C?1.000000
D?0.000000
6. C语言的if语句中,用作判断的表达式为C
A?关系表达式
B?逻辑表达式
C?任意表达式
D?算术表达式
7. 假定所有变量均己正确定义,下列程序段运行后x的值是().D
k1=1;
k2=2;
k3=3;
x=15;
if(!k1)x--;
else if(k2)x=4;
else x=3;
A?15
B?14
C?3
D?4
8. C语言的if语句嵌套时,if与else的配对关系是()?C
A?每个else与if的配对是任意的
B?每个else与if总是与最外层的if配对
C?每个else总是与它上面的最近的if配对
D?每个else总是与它上面的if配对
9. 为了避免在嵌套的条件语句if-else中产生二义性,c语言规定:else语句总是与(B)配对.
A?其之后最近的if
B?其之前最近的if
C?缩排位置相同的if
D?同一行上的1f
10. 以下程序的运行结果是B
main()
{
int a=2,b=-1,c=2;
if(a
if(b<0) c=0;
else c+=1;
printf("%d\n",c);
}
A?0
B?2
C?1
11. 为表示关系x≥y≥z,应使用的表达式是A
A?(x>=y)&&(y>=z)
B?(x>=y>=z)
C?(x>=y)AND(y>=z)
D?(x>=y)&(y>=z)
12. 若执行以下程序时从程盘上输入3和4,则输出结果是B
main()
{
int a,b,s;
scanf("%d%d",&a,&b);
s=a;
if(a
s*=s;
printf("%d\n",s);
}
A?14
B?l6
C?20
D?l8
13. int a=1,b=2,c=3; if(a>c)b=a;a=c;c=b;则c的值为().B
A?3
B?2
C?不一定
D?1
14. 在C语言中,if语句后的一对圆括号中,用以决定分支的流程的表达式().D A?只能用关系表达式
B?只能用逻辑表达式
C?只能用逻辑表达式或关系表达式
D?可用任意表达式
15. 假定所有变量均已正确定义,下面语句段执行后的x的值是B
a=b=c=0;x=35;
if(!a)x--;else if(b);if(c)x=3;else x=4;
A?34
B?4
C?35
D?3
16. main()
int x=1,a=0,b=0;
switch(x)
{
case 0:b++;
case 1:a++;
case 2:a++;b++;
}
printf("a=%d,b=%d",a,b);
}
该程序的输出结果是()B
A?2,2
B?2,l
C,1,1
D?1,0
注:准确的说输出结果应为a=2,b=1
17. 下面的程序片断所表示的数学函数关系是A
y=-1;
if(x!=0)y=1;
if(x>0)y=1;
else y=0;
A?
y=0 (x<0)
0 (x=0)
1 (x>0)
B?
y=1 (x<0)?1 (x=0) 0 (x>0)
C?
y=?1 (x<0) 1 (x=0) 0 (x>0)
D?
y=?1 (x<0)
0 (x=0)
1 (x>0)
注:前两行完全可以忽略
18. 为了避免在嵌套的条件语句if-else中产生二义性;C语言规定else总与()配对C
A.同一行上的if
B?其之后最近的if
C?其之前最近的未配对的if
D?缩排位置相同的if
19. C语言中switch后的括号内表达式的值可以是C A?只能为整型和字符型
B?只能为整型
C?任何类型
D?只能为整型,字符型,枚举型
20. 下列程序的输出结果是().A
main()
{
int x=1,y=0,a=0,b=0;
switch(x)
{
case 1:switch(y)
{
case 0:a++;break;
case 1:b++;break;
}
case 2:a++;b++;break;
case 3:a++;b++;break;
}
printf("a=%d,b=%d\n",a,b);
}
A?a=2, b=l
B?a=l, b=0
C?a=2, b=2
D?a=l, b=l
21. 有如下程序
main()
{
int x=1,a=0,b=0;
switch(x)
{
case 0:b++;
case 1:a++;
case 2:a++;b++;
}
printf("a=%d,b=%d\n",a,b);
}
该程序的输出结果是B
A?a=l, b=l
C?a=l, b=0
D?a=2, b=2
22. 下列程序的输出结果是().A
main()
{
int x=1,y=0,a=0,b=0;
switch(x)
{
case 1:switch(y)
{
case 0:a++;break;
case 1:b++;break;
}
case 2:a++;b++;break;
case 3:a++;b++;break;
}
printf("a=%d,b=%d\n",a,b);
}
A?a=2, b=l
B?a=2, b=2
C?a=1, b=0
D?a=l, b=l
23. 下列运算符中优先级别最高的是A A?!
B?%
C?-=
D?&&
24. 有以下程序
main()
{
int a=5,b=4,c=3,d=2;
if(a>b>c)
printf("%d\n",d);
else if((c-1>=d)==1)
printf("%d\n",d+1);
else printf("%d\n",d+2);
}
执行后输出结果是D
A?2
B?4
D?3
25. int a=3,b=2,c=1; if(a>b>c)a=b; else a=c;则a的值是()C
A?2
B?3
C?1
D?O
26. 运行以下程序后,输出的结果是B
main()
{
int k=-3;
if(k<=0)
printf("****\n"),
else printf("&&&&\n");
}
A?****
B?有语法错误不能通过编译
C?&&&&
D?****&&&&
27. 设a?b和c都是int型变量,且a=3,b=4,c=5;则以下的表达式中,值为0的表达式是C A?a||b+c&&b-c
B?a<=b
C?!((a
D?a&&b
28. 以下不正确的if语句形式是().D
A?if(x B?if(x>y&&x!=y); C?if(x==y)x+=y; D?if(x!=y) scanf("%d",&x) else scanf("%d",&y); 注:D中第一个scanf函数缺少分号 29. int a=1,b=2,c=3; if(a>b)a=b;if(a>c)a=c;则a的值为().A A?1 B?不一定 C?3 D?2 30. 下列运算符中优先级别最低的运算符是C A?+ B?!= C?|| D?<= 31. 以下程序的输出结果是D main() { int y=10; for(;y>0;y--) if(y%3==0) { printf("%d",--y); continue; } } A?741 B?963 C?875421 D?852 32. C语言中while和do-while循环的主要区别是()B A?while循环控制条件比do-while的循环控制条件更严格 B?do-while循环体至少无条件执行一次 C?do-while的循环体不能是复合语句 D?do-while允许从外部跳转到循环体内 33. 下列程序的输出为().C main() { int y=10; while(y--); printf("y=%d\n",y); } A?while构成无限循环 B?y=0 C?y=-l D?y=l 注:y--后面有个分号 34. 以下描述正确的是().D A?do-while循环中,根据情况可以省略while B?由于 do-while 循环中循环体语句只能是一条可执行语句,所以循环体内不能使用复合语句 C?do-while 循环由do开始,用while结束,在while(表达式)后面不能写分号 D?在do-while 循环体中.一定要有能使 while 后面表达式的值变为零("假")的操作 35. 以下程序段的输出结果是C int i,j,m=0; for(i=1;i<=15;i+=4) for(j=3;j<=19;j+=4) m++; printf("%d\n",m); A?15 B?12 C?20 D?25 36. 以下程序段的输出结果为(A)?for(i=4;i>1;i--)for (j=1;j B?无 c?# D?### 37. 从循环体内某一层跳出继续执行循环外的语句是A A?break语句 B?return语句 C?continue语句 D?空语句 38. 在以下给出的表达式中,与do--while(E)语句中的(E)不等价的表达式是().A 表达式是(). A?(E==0) B?(E>O||E C?(!E==0) D?(E!=0) 39. 下面程序的功能是把316表示为两个加数的和,使两个加数分别能被13和ll整除,请选择填空. C #include main() { int i=0,j,k; do{i++,k=316-13*i;}while(______); j=k/11; printf("316=13*%d+11*%d",i,j); } A?k%11==0 B?k/11 C?k%11 D?k/11==0 40. 以下程序的执行结果是C main() { int x=0,s=0; while(!x!=0)s+=++x; printf("%d",s); } A?无限循环 B?O C?1 D?语法错误 41. 设j和k都是int类型,则for循环语句 for (j=0, k=-1; k=1;j++,k++)printf("****\n");().B A?循环体一次也不执行 B?是无限循环 C?循环结束的条件不合法 D?循环体只执行一次 42. 选择结构中的条件与循环结构中循环成立的条件,在写法上可以是任一表达式,其值只能被判断为“真”或“假”?哪个数作为逻辑“假”值().D A?-1 B?非零的数 C?1 D?0 43. 以下不是无限循环语句为()C A?for(;;x++=i); B?while(1){x++;} C?for(y=O,x=1;x>++y;x=x++) i=x; D?for(i=10;;i--) sum+=i; 44. 在C语言中,为了结束由while语句构成的循环,while后一对圆括号中表达式的值应该为().B A?1 B?0 C?True D?非0 45. 结构化程序设计所规定的三种基本控制结构是().D A?树形?网形?环形 B?输入?处理?输出 C,主程序?子程序,函数 D?顺序?选择?循环 46. 有以下程序段 int n=0,p; do { scanf("%d",&p); n++; }while(p!=12345&&n<3); 此处do-while循环的结束条件是______. D A?p的值等于12345并且n的值大于等于3 B?p的值不等于12345并且n的值小于3 C?p的值不等于12345或者n的值小于3 D?p的值等于12345或者n的值大于等于3 47. 以下for循环的执行次数是for(x=0,y=0;(y=123)&&(x<4);x++);(). A A?4次 B?是无限循环 c?3次 D?循环次数不定 注:4次?y是赋值,每次判断都为真,所以y不起作用 48. 以下语句中,循环次数不为10次的语句是().A A?for(i=1;i<10;i++); B?i=10;while(i>0){--i;} C?i=1;do{i++;}while(i<=10); D?i=1;m:if(i<=10){i++;goto m;} 49. 有以下程序 main() { int i; for (i=0;i<3;i++) switch(i) { case 1:printf("%d",i); case 2:printf("%d",i); default :printf("%d",i); } } 执行后输出结果是A A?011122 B?120 C?012020 D?012 50. 执行语句for(i=1;i++<4;);后变量i的值是().C A?不定 B?3 C?4 D?5 51. 以下程序的输出结果是C #include main() { int i; for(i=1;i<5;i++) { if(i%2) putchar('<'); else continue; putchar('>'); } putchar('#'); } A?<><><># B?><><# C?<><># D?><><><# 52. 以下叙述正确的是: C A?用do-while构成循环时,只有在while后的表达式为非零时结束循环B?do-while语句构成的循环不能用其它语句构成的循环来代替? C?用do-while构成循环时,只有在while后的表达式为零时结束循环D?do-while语句构成的循环只能用break语句退出? 53. 以下程序段的输出结果是B int k,j,s; for(k=2;k<6;k++,k++) { s=1; for(j=k;j<6;j++) s+=j; } printf("%d\n",s); A?15 B?10 C?24 D?9 54. C语言程序的三种基本结构是顺序结构?选择结构和____结构D A?递归 B?转移 C?嵌套 D?循环 55. C语言中用于结构化程序设计的三种基本结构是().B A?for?while?do-while B?顺序结构?选择结构?循环结构 C?if?switch?break D?if?for?continue 56. 以下程序的运行结果是().B main() { int n; for(n=1;n<=10;n++) { if(n%3==0) continue; printf("%d",n); } } A?12 B?12457810 C?1234567890 D?369 57. 以下程序段中,能够正确地执行循环的是().B A?static int a; while(a) B?int s=6;do s-=2;while(s); C?for(i=1;i>1O;i++) D?int s=6; m:if(s<100) exit(0); else s-=2; goto m; 58. 以下程序的运行结果是().B main() { int i=1,sum=0; while (i<10) sum=sum+1;i++; printf("i=%d,sum=%d",i,sum); } A?i=10,sum=9 B?运行出现错误 C?i=2,sum=1 D?i=9,sum=9 注:while只包含了sum=sum+1;这条语句 59. 若i为整型变量,则以下循环执行次数是()A for(i=2;i==0;) printf("%d",i--); A?O次 B?1次 C?无限次 D?2次 60. 语句while(!E);中的表达式!E等价于().B A?E!=1 B?E==O C?E==1 D?E!=O 61. 设j和k都是int类型,则下面的for循环语句().C for (j=0,k=0;j<=9&&k!=876;j++) scanf("%d",&k); A?最多执行9次 B?循环体一次也不执行 C?最多执行10次 D?是无限循环 62. 判新两个字符串是否相等正确的表达方式是 A?while (sl=s2) B?while (sl==s2) C?while(strcmp(sl,s2)=0) D?while(strcmp(s1,s2)==0) 63. 下面有关for循环的正确描述是().D A?for循环是先执行循环循环体语句,后判断表达式 B?在for循环中,不能用break语句跳出循环体 C?for循环只能用干循环次数已经确定的情况 D?for循环的循环体语句中,可以包含多条语句,但必须用花括号括起来 64. 以下程序中,while循环的循环次数是____ A main() { int i=0; while(i<10) { if(i<1) continue; if(i==5) break; i++; } } A?死循环,不能确定次数 B?6 C?4 D?1 65. 以下程序段的输出结果是B int x=3; do { printf("%3d",x-=2); }while(!(--x)); A?死循环 B?1 -2 C?3 0 D?l 注:第一次执行完 printf("%3d",x-=2); 后x=1,然后--x为0,取非后为1,条件为true,继续执行循环,第二次执行完 printf("%3d",x-=2); 后x=-2,--x得到-3,取非后是0,循环结束 66. 若x是int类型变量,以下程序段的输出结果是D for(x=3;x<6;x++) printf((x%2)?("**%d"):("##%d\n"),x); A? ##3 **4 ##5 B? ##3 **4##5 B? **3 ##4 **5 D? **3##4 **5 67. 对for(表达式1;;表达式3)可理解为().A A?for(表达式1;1;表达式3) B?for(表达式1;0;表达式3) C?for(表达式1;表达式1;表达式3) D?for(表达式1;表达式3;表达式3) 68. 以下程序段的输出结果是______. C main() { int n=10; while (n>7) { n--; printf("%d",n); } } A?1098 B?10987 C?987 D?9876 69. 以下程序的功能是按顺序读入10名学生4门课程的成绩,计算出每位学生的平均分并输出,程序如下: main() { int n,k; float score,sum,ave; sum=0.0; for (n=1;n<=10;n++) { for (k=1;k<=4;k++) { scanf("%f",&score); sum+=score; } ave=sum/4.0; printf("NO%d:%f\n",n,ave); } } 上述程序运行后结果不正确,调试中发现有一条语句出现在程序中的位置不正确.这条语句是B A?ave=sum/4.0 B?sum=0.0; C?sum+=score; D?printf("NO%d:%f\n",n,ave); 70. while(fabs(t)<1e-5)if(!s/10)break;循环结束的条件是().D A?fabs(t) B?fabs(t) C?t>=le-5&&t<=-le-5&&s>-10&&s<10 D?s/10==0 71. 以下不是死循环的语句是____. C A?for(i=10;;i++)sum+=i; B?while(1){x++}; C?for(;(c=getchar())!='\n';) printf("%c",c); D?for(;;x+=i); 72. 以下叙述正确的是()?B A?do-while语句构成的循环不能用其它语句构成的循环来代替 B?用do-while语句构成的循环,在while后的表达式为零时结束循环C?用do-while语句构成的循环,在while后的表达式为非零时结束循环D?do-while语句构成的循环.只能用break语句退出 73. 在下述程序中,判断i>j共执行了多少次C #include main() { int i=0,j=10,k=2,s=0; for(;;) { i+=k; if(i>j) { printf("%d\n",s); break; } s+=i; } } A?4 B?8 C?6 D?7 74. C语言中,while和do-while循环的主要区别是B A?while的循环控制条件比do-while的循环控制条件严格 B?do-while的循环体至少无条件执行一次 C?do-while循环体不能是复合语句 D?do-while允许从外部转到循环体内 75. t为int类型,进入下面的循环之前,t的值为0 while(t=1) {……} 则以下叙述中正确的是____. B A?以上说法都不对 B,循环控制表达式的值为l C?循环控制表达式的值为0 D?循环控制表达式不合法 76. 下面程序的运行结果是A #include main() { int y=10; do{y--;}while(--y); printf("%d\n",y--); } A?0 B?1 C?8 D?-l 77. 以下程序的输出结果是C main() { int x,i; for(i=1;i<=100;i++) { x=i; if(x%2==0) if(x%3==0) if(x%7==0) printf("%d ",x); } printf("\n"); } A?28 70 B?39 81 C?42 84 D?26 68 注:本题意图是遍历1~100内能同时被2?3?7整除的数 78. 以下程序的执行结果是____ A main() { int num=0; while(num<=2) { num++; printf("%d,",num); } } A?1,2,3, B?1,2,3,4, C?1,2, D?0,1,2, 79. 以下程序的输出结果是B main() { int i,sum; for(i=1;i<6;i++) sum+=i; printf("%d\n",sum); } A?15 B?不确定 C?l6 D.0 判断题(6道) 1. C语言的switch语句case后可为常量或表达式或有确定值的变量及表达式.× 2. int i=20;switch(i/10){case 2:printf("A"); case 1:printf("B");}的输出结果为A.× 注:输出结果是AB 3. 若有int i=10,j=0;则执行完语句 if (j=0)i++;else i--;i的值为11.× 注:i的值为9,因为j=0是赋值,表达式的值是0 4. 若有说明int c;则while(c=getchar());是正确的C语句,√ 5. while和do…while循环不论什么条件下它们的结果都是相同的?×