1、第六章循环结构练习题参考答案第六章循环控制【题6.1】设有程序段int k=10;while(k=10) k=k-1;则下面描述中正确的是。A)while循环执行10次 B)循环是无限循环C)循环体语句一次也不执行 D)循环体语句执行一次【题6.2】设有以下程序段int x=0,s=0;while(!x!=0) s+=+x;printf(“%d”,s);则。A)运行程序段后输出0 B)运行程序段后输出1C)程序段中的控制表达式是非法的 D)程序段执行无限次【题6.3】下面程序段的运行结果是。x=y=0;while(x15) y+,x+=+y;printf(“%d,%d”,y,x);A)20,7
2、 B)6,12 C)20,8 D)8,20【题6.4】下面程序段的运行结果是。int n=0;while(n+=2); printf(“%d”,n);A)2 B)3 C)4 D)有语法错【题6.5】下面程序的功能是将从键盘输入的一对数,由小到大排序输出。当输入一对相等数时结束循环,请选择填空。#include main()int a,b,t;scanf(“%d %d”,&a,&b);while( 【1】)if(ab)t=a; a=b; b=t; printf(“%d,%d”n”,a,b);scanf(“%d %d”,&a,&b);【1】 A)!a=b B)a!=b C)a=b D)a=b【题6
3、.6】下面程序的功能是将从键盘输入的一组字符中统计出大写字母的个数m和小写字母的个数n,并输出m、n中的较大者,请选择填空。#include main()int m=0,n=0;char c;while(【1】)!=n) if(c=A&c=a&c=z) n+; printf(“%dn”,mn? 【2】);【1】 A)c=getchar() B)getchar() C)scanf(“%c”,c)【2】 A)n:m B)m:n C)m:m D)n:n【题6.7】下面程序的功能是将小写字母变成对应大写字母后的第二个字母。其中y变成A,z变成B。请选择填空。#include main()char c;
4、while(c=getchar()!=n)if(c=a&cZ)【2】;printf(“%c”,c);【1】 A)c+=2 B)c-=32 C)c=c+32+2 D)c-=30【2】 A)c=BB)c=A C)c-=26 D)c=c+26【题6.8】下面程序的功能是在输入的一批正整数中求出最大者,输入0结束循环,请选择填空。#include main()int a,max=0;scanf(“%d”,&a);while(【1-B】)if(maxa) max=a;scanf(“%d”,&a);printf(“%d”,max);【1】 A)a=0 B)a C)!a=1 D)!a【题6.9】下面程序的运
5、行结果是。#include main()int num=0;while(num=2)num+;printf(“%dn”,num);A)1 B)1 C)1 D)1 2 2 2 3 3 4【题6.10】若运行以下程序时,从键盘输入2473,则下面程序的运行结果是。#include main()int c;while(c=getchar()!=n)switch(c-2)case 0:case 1: putchar(c+4);case 2: putchar(c+4); break;case 3: putchar(c+3);default: putchar(c+2); break;printf(“n”)
6、;A)668977 B)668966 C)66778777 D)6688766【题6.11】C语言中while和do-while循环的主要区别是。A) do-while的循环体至少无条件执行一次B) while的循环控制条件比do-while的循环控制条件严格C) do-while允许从外部转到循环体内D) do-while的循环体不能是复合语句【题6.12】以下能正确计算12310的程序段是。A)doi=1; s=1; B)doi=1; s=0; s=s*i; s=s*i; i+; i+; while(i=10); while(i=10);C)i=1; s=1; D)i=1; s=0; do
7、s=s*i; dos=s*i; i+; i+; while(i=10); while(i=10);【题6.13】以下程序段。x=-1;dox=x*x;while(!x);A)是死循环 B)循环执行二次C)循环执行一次 D)有语法错误【题6.14】以下描述中正确的是。A) 由于do-while循环中循环体语句只能是一条可执行语句,所以循环体内不能使用复合语句B) do-while循环由do开始,用while结束,在while(表达式)后面不能写分号C) 在do-while循环体中,一定要有能使while后面表达式的值变为零(“假”)的操作D) do-while循环中,根据情况可以省略while【
8、题6.15】下面程序的功能是计算正整数2345的各位数字平方和,请选择填空。#include main() int n,sum=0; n=2345; do sum=sum+【1】; n=【2】; while(n); printf(“sum=%d”,sum); 【1】 A)n%10 B)(n%10)*(n%10) C)n/10 D)(n/10)*(n/10)【2】 A)n/1000 B)n/100 C)n/10 D)n%10【题6.16】等比数列的第一项a=1,公比q=2,下面程序的功能是求满足前n项和小于100的最大n,请选择填空。#include main() int a,q,n,sum;
9、a=1; q=2; n=sum=0; do【1】; +n; a*=q; while(sum100);【2】; printf(“%dn”,n); 【1】 A)sum+ B)sum+=a C)sum=a+a D)a+=sum 【2】 A)n=n-2 B)n=n C)n+ D)n-=1【题6.17】下面程序的功能是把316表示为两个加数的和,使两个加数分别能被13和11整除。请选择填空。#include main() int i=0,j,k; do i+; k=316-13*i; while(【1】); j=k/11; printf(“316=13*%d+11*%d”,i,j); 【1】 A)k/1
10、1 B)k%11 C)k/11=0 D)k%11=0【题6.18】下面程序的运行结果是。#include main() int y=10; do y-; while(-y); printf(“%dn”,y-); A)-1 B)1 C)8 D)0【题6.19】若运行以下程序时,从键盘输入ADescriptor(表示回车),则下面程序的运行结果是。#include main() char c; int v0=0,v1=0,v2=0; do switch(c=getchar() case a: case A: case e: case E: case i: case I: case o: case
11、O: case u: case U: v1+=1; default: v0+=1; v2+=1; while(c!=n); printf(“v0=%d,v1=%d,v2=%dn”,v0,v1,v2); A)v0=7,v1=4,v2=7 B)v0=8,v1=4,v2=8 C)v0=11,v1=4,v2=11 D)v0=12,v1=4,v2=12【题6.20】下面程序的运行结果是。#include main() int a=1,b=10; do b-=a; a+; while(b-0); printf(“a=%d,b=%dn”,a,b); A)a=3,b=11 B)a=2,b=8 C)a=1,b=
12、-1 D)a=4,b=9【题6.21】下面有关for循环的正确描述是。A) for循环只能用于循环次数已经确定的情况B) for循环是先执行循环体语句,后判断表达式C) 在for循环中,不能用break语句跳出循环体D) for循环的循环体语句中,可以包含多条语句,但必须用花括号括起来【题6.22】对for(表达式1;表达式3)可理解为。 A)for(表达式1;0;表达式3) B)for(表达式1;1;表达式3) C)for(表达式1; 表达式1;表达式3)D)for(表达式1; 表达式3;表达式3)【题6.23】若i为整型变量,则以下循环执行次数是。for(i=2;i=0;) printf(
13、“%d”,i-); A)无限次 B)0次 C)1次 D)2次【题6.24】以下for循环的执行次数是。for(x=0,y=0;(y=123)&(x+y;x=i+) i=xB) for(;x+=i);C) while(1) x+; D) for(i=10;i-) sum+=i;【题6.26】下面程序段的运行结果是。for(y=1;y10;) y=(x=3*y,x+1),x-1);printf(“x=%d,y=%d”,x,y); A)x=27,y=27 B)x=12,y=13 C)x=15,y=14 D)x=y=27【题6.27】下面程序段的运行结果是。for(x=3;x100) break;B)
14、 for(;);C) int k=0;do +k; while(k=0);D) int s=36;while(s) -s;【题6.29】执行语句for(i=1;i+4;);后变量i的值是。 A)3 B)4 C)5 D)不定【题6.30】有一堆零件(100到200之间),如果分成4个零件一组的若干组,则多2个零件;若分成7个零件一组,则多3个零件;若分成9个零件一组,则多5个零件。下面程序是求这堆零件总数,请选择填空。#include main() int i; for(i=100;i200;i+) if(i-2)%4=0) if(!(i-3)%7) if(【1】)printf(“%d”,i);
15、 A)i%9=5 B)i%9!=5 C)(i-5)%9!=0 D)i%9=5【题6.31】下面程序的功能是计算1至50中是7的倍数的数值之和,请选择填空。#include main() int i,sum=0; for(i=1;i=50;i+) if(【1】) sum+=I; printf(“%d”,sum); A)(int)(i/7)=i/7 B)(int)i/7=i/7 C)i%7=0 D)i%7=0【题6.32】下面程序的功能是计算1至10之间的奇数之和及偶数之和。请选择填空。#include main() int a,b,c,i; a=c=0; for(i=0;i=10;i+=2) a
16、+=i;【1】; c+=b; printf(“偶数之和=%dn”,a); printf(“奇数之和=%dn”, 【2】); 【1】A)b=i- B)b=i+1 C)b=i+ D)b=i-1 【2】A)c-10 B)c C)c-11 D)c-b【题6.33】下面程序的运行结果是。 #include main() int i; for(i=1;i=5;i+) switch(i%5) case 0: printf(“*”); break; case 1: printf(“#”); break; default: printf(“n”); case 2: printf(“&”); A)#&* B)#&
17、 C)# D)#& & &* & * & *【题6.34】下面程序段的功能是计算1000!的末尾含有多少个零。请选择填空。 (提示:只要算出1000!中含有因数5的个数即可)for(k=0,i=5;i=1000;i+=5) m=i; while(【1】) k+; m=m/5; 【1】A)m%5=0 B)m=m%5=0 C)m%5=0D)m%5!=0【题6.35】下面程序的功能是求算式xyz+yzz=532中x,y,z值(其中xyz和yzz分别表示一个三位数),请选择填空。#include main()int x,y,z,i,result=532;for(x=1;x10;x+)for(y=1;y
18、10;y+)for(【1】;z10;z+)i=100*x+10*y+z+100*y+10*z+z;if(【2】)printf(“x=%d,y=%d,z=%dn”,x,y,z);【1】A)z=x B)z=1 C)z=0 D)z=y【2】A)i/result=1 B)i=result C)i!=result D)i=result【题6.36】下面程序是输出一个正整数等差数列的前十项,此数列前四项之和及之积分别是26和880,请选择填空。 #include main() int a,d,i,s,f,x; for(a=1;a30;a+)/* a是第一项, 预估a的可能取值范围 */ for(d=1;
19、【1】;d+)/* d是公差,预估d的可能取值范围*/ s=0; f=1; x=a; for(i=1;i=4;i+) s=s+x; f=f*x; x=x+d; if(s=26&f=880) for(i=0;i10;i+) printf(“%3d”, 【2】); printf(“n”); 【1】A)d=a B)空C)d=5 D)da 【2】A)a+i*d B)i*d C)a+(i+1)*d D)a+d【题6.37】下面程序的运行结果是。#include main()int i,b,k=0;for(i=1;i=0) k+;printf(“%d,%d”,k,b);A)3,-1 B)8,-1 C)3,
20、0 D)8,-2【题6.38】以下正确的描述是。A) continue语句的作用是结束整个循环的执行B) 只能在循环体内和switch语句体内使用break语句C) 在循环体内使用break语句或continue语句的作用相同D) 从多层循环嵌套中退出时,只能使用goto语句【题6.39】下面程序段。for(t=1;t=100;t+) scanf(“%d”,&x); if(x0) continue; printf(“%3d”,t); A)当x=0时什么也不输出 C)printf函数永远也不执行 D)最多允许输出100个非负整数【题6.40】下面程序段。x=3; do y=x-; if(!y)
21、printf(“x”); continue; printf(“#”); while(1=x=2); A)将输出# B)将输出#* C)是死循环 D)含有不合法的控制表达式【题6.41】以下是死循环的程序段是。A) for(i=1;) if(+i%2=0) continue; if(+i%3=0) break;B) i=32767;do if(i0) break; while(+i);C) for(i=1;) if(+i10) continue;D) i=1;while(i-);【题6.42】以下描述正确的是。A) goto语句只能用于退出多层循环B) switch语句中不能出现continue
22、语句C) 只能用continue语句来终止本次循环D) 在循环中break语句不能独立出现【题6.43】与下面程序段等价的是。for(n=100;n=200;n+)if(n%3=0) continue;printf(“%4d”,n);A) for(n=100;(n%3)&n=200;n+) printf(“%4d”,n);B) for(n=100;(n%3)|n=200;n+) printf(“%4d”,n);C) for(n=100;n=200;n+) if(n%3!=0) printf(“%4d”,n);D) for(n=100;n=200;n+)if(n%3) printf(“%4d”,
23、n);else continue;break;【题6.44】下面程序的功能是将从键盘输入的偶数写成两个素数之和。请选择填空。#include #include main()int a,b,c,d;scanf(“%d”,&a);for(b=3;b=a/2;b+=2)for(c=2;csqrt(b) d=【1】; else break;for(c=2;csqrt(d) printf(“%d=%d+%dn”,a,b,d);【1】A)a+b B)a-b C)a*b D)a/b【题6.45】下面程序的运行结果是。#include main()int k=0; char c=A;doswitch(c+)case A: k+; break;case B: k-;case C: k+=2; break;case D: k=k%2; continue;case E: k=k*10; break;default: k=k/3;k+;while(cG);printf(“k=%dn”,k);A)k=3 B)k=4 C)k=2 D)k=0参考解答:1B 2B 3D 4C 5B 6A,A 7D,C 8 9 10.11 12 13 14 15 16 17 18 19 20.21222324252627282930.31323334353637383940.41C42C43C44B45B
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1