1、循环结构程序设计习题答案一、 单选题。1 下面有关for循环的正确描述是( )Afor循环只能用于循环次数已经确定的情况Bfor循环是先执行循环体语句,后判定表达式C在for循环中,不能用break语句跳出循环体Dfor循环体语句中,可以包含多条语句,但要用花括号括起来解答:D。2 对于for(表达式1;表达式3)可理解为()Afor(表达式1;1;表达式3)Bfor(表达式1:1;表达式3)Cfor(表达式1;表达式1;表达式3)Dfor(表达式1;表达式3;表达式3)解答:B。3 以下正确的描述是()。Acontinue语句的作用是结束整个循环的执行B只能在循环体内和switch语句体内使
2、用break语句C在循环体内使用break语句或continue语句的作用相同D从多层循环嵌套中退出时,只能使用goto语句解答:B。4 C语言中( )。A不能使用do-while语句构成的循环Bdo-while语句构成的循环必须用break语句才能退出CdowhiLe语句构成的循环,当while语句中的表达式值为非零时结束循环Ddowhile语句构成的循环,当while语句中的表达式值为零时结束循环解答:D。5 C语言中while和do-while循环的主要区别是( )Adowhile的循环体至少无条件执行一次Bwhile的循环控制条件比dowhile的循环控制条件严格Cdowhile允许从
3、外部转到循环体内Ddo-while的循环体不能是复合语句解答:A。6 下面程序段不是死循环的是()。Aint I=100; Bfor ( ; ; );while(1) I=I%100+1; if(I100) break;Cint k=0; Dint s=36;do+k; while(s);while(k=0); -s; 解答:C。7 以下能正确计算1*2*3*10的程序是()。Adoi=1;s=1; Bdoi=1;s=0;s=s*i; s=s*i;i+; i+;while(i=10); while(i=10);Ci=1;s=1; Di=1;s=0;do s=s*i; do s=s*i;i+;
4、i+;while(i=10); while(i=10);解答:C。8 下面程序的运行结果是( )。#include void main() int y=10;doy-;while(-y);printf(%dn,y-);A-1 B1 C8 D0解答:B。9 下面程序的运行结果是()。#includevoid main()int num=0;while(num=2) num+;printf(%dn,num);A1 B1 2 C1 2 3 D1 2 3 4解答:C。10 若运行以下程序时,从键盘输入3.6 2.4(表示回车),则下面程序的运行结果是( )。#include#includevoid m
5、ain() float x,y,z; scanf(“%f%f”,&x,&y); z=x/y; while(1) if(fabs(z)1.0) x=y;y=z;z=x/y; else break; printf(“%fn”,y); A1.500000 B1.600000 C2.000000 D2.400000解答:B。二、 看程序,写运行结果。1 若运行以下程序时,从键盘输入2473,则下面程序的运行结果是()。#includevoid main()int c;while(c=getchar()!=n)switch(c-2)case 0:case1: putchar(c+4); case2: p
6、utchar(c+4);breakcase3: putchar(c+3);default: putchar(c+2);break;printf(“n”);解答:668977。2 若运行以下程序时,从键盘输入ADescriptor,则下面程序的运行结果是()。#include void main()char c;Int v0=0,v1=0,v2=0;doswitch(c=getchar()casea:caseA:casee:caseEcasei:caseI:caseo:caseO:caseu:caseU:v+=1;default:v0+=1;v2+=1;while(c!=n);printf(“v
7、0=%d,v1d,v2=%dn”,v0,v1,v2);解答:v0=12,v1=4,v2=12。3 下面程序的运行结果是()。#includevoid main() int i,b,k=0;for(i=1;i=0) k+;printf(“%d,%d”,k,b);解答:8,-2。4 下面程序的运行结果是()。#includevoid main() int a,b; for (a=1,b=1;a=20) break; if(b%3=1) b+=3; continue; b-=5; printf(“%dn”,a);解答:8。5 下面程序的运行结果是()。#includevoid main() int
8、i,j,x=0; for (i=0;i2;i+) x+; for(j=0;j=3;j+) if(j%2) continue; x+; x+; printf(“x=%dn”,x); 解答:x=8。6 下面程序的运行结果是()。#includevoid main() int i; for (i=1;i=5;i+) if(i%2) printf(“*”); else continue; printf(“#”); printf(“$n”);解答:*#*#*#$。7 下面程序的运行结果是( )。#includevoid main() int i,j,a=0; for(i=0;i2;i+) for (j=
9、0; j4; j+) if (j%2) break;a+;a+;printf(“%dn”,a);解答:4。8 下列程序运行后的输出结果是( )。#includevoid main()int i,j,k;for(i=1;i=4;i+)for(j=1;j=20-3*i;j+)printf();for(k=1;k0;i-)for(j=1;j=20-3*i;j+)printf();for(K=1;k=2*i-1;k+)printf(%3s,*);printf(n);解答:* * * * * * * * * * * * * * * * * * * * * * * * * 9 下列程序运行后的输出结果是(
10、) #includevoid main()int i,j,k;for(i=1,i=6;i+)for(j=1;j0;k-)printf(%3d,k);printf(n0);解答: 1 1 2 1 1 2 3 2 1 1 2 3 4 3 2 1 1 2 3 4 5 4 3 2 1 1 2 3 4 5 6 5 4 3 2 1)三、 程序填空。1 下面程序的功能是将小写字母变成对应的大写字母后的第二个字母,其中y变成A,z变成B,请在 内填入正确内容。#includevoid main() char c;while(c=getchar()!=n) if(c=a&cZ”&c=”Z”+2) ;printf
11、(“%c”,c);解答:c-=30,c-=26。2 下面程序的功能是将从键盘输入的一组字符中统计出大写字母的个数m和小写字母的个数 n,并输入m,n中的较大数,请在 内填入正确内容。#includevoid main() int m=0,n=0;char c;while(( )!=n) if(c=A&c=a&c=z) n+;printf(“%dn”,mn? ); 解答:c=getchar(),n:m。3 下面程序的功能是把316表示为两个加数分别能被13和11整除。请在 内填入正确内容。#include void main() int i=0,j,k;doi+;k=316-13*i;while
12、( );j=k/11;printf(“316=13*%d+11*%d”,i,j);解答:k%11。4 从键盘上输入若干个学生的成绩,统计并输出最高成绩和最低成绩,当输入负数时结束。请在 内填入正确内容。#include void main() float x, amax, amin;scanf(“%f”,&x);amax=x; amin=x; while( )if(xamax) amax=x; if( ) amin=x; scanf(“%f”,&x); printf(amax=%fnamin=%fn,amax, amin);解答:x=0,xamin。5 求算式xyz+yzz=532中x, y,
13、 z的值(其中xyz和yzz分别表示一个三位数)。请在 内填入正确内容。#includevoid main()int x,y,z,i,result=532;for(x=1; ;x+)for(y=1; ;y+) for(z=0; ;z+) i=100*x+10*y+z+100*y+10*z+z; if( ) printf(x=%d,y=%d,z=%dn,x,y,z); 解答:x10,y10,z10,i=result。6 根据公式e=1+1/1!+1/2!+1/3!+求e的近似值,精度要求为10-6。请在 内填入正确内容。#includevoid main() int i;double e,new
14、;e=1.0;new=1.0;for(i=1; ;i+) ; ;printf(e=%fn,e)解答:new=1e-6,new/=(double)i,e+=new。7 完成用一元人民币换成一分、两分、五分的所有兑换方案。请在 内填入正确内容。#includevoid main() int i,j,k,l=1;for(i=0;i=0) printf( %2d, %2d, %2d ,i,j,k); ;if(l%5=0) printf(n);解答:j=50,k=100-i*5-j*2,l=l+1。8 统计正整数的各位数字中零的个数,并求各位数字中的最大者。请在 内填入正确内容。#includevoid
15、 main() int n,count,max,t; count=max=0; scanf(“%d”,&n); do ; if( ) +count; else if( ) max=t; ; while(n); printf(“count=%d,max=%d”,count,max); 解答:t=n%10,t=0,maxt,n/=10。四、 编程题。1 根据公式/61/1+1/2+1/3+1/n,求的近似值,直到最后一项的值小于10的负六次方为止。解答:#includestdio.h#includemain( ) long i=1; doublepi=0; while(I*I=10e+6) pi=
16、pi+1.0/(i*i); i+;pi-sqrt(6.0*pi);printf(“pi=%10.6fn”,pi);2 有1020个西瓜,第一天卖一半多两个,以后每天卖剩下的一半多两个,问几天后可以卖完,请编程计算。解答:#includemain( )int day,x1,x2; day=0; x1=1020; while(x1) x2=(x1/2-2); x1=x2; day+; printf(“day=%dn”,day); 3 编程实现用“辗转相除法”求两个正整数的最大公约数。解答:#includemain( )int r,m,n; scanf(“%d%d”,&m,&n); if (mn)
17、r=m,m=n,n=r; r=m%n; while(r) m=n; n=r; r=m%n; printf(“%dn”,n); 4 等差数列的第一项a=2,公差d=3,编程实现在前n项和中,输出能被4 整除的所有的和。 解答: #include main() int a,d,sum; a=2;d=3;sum=0; do sum+=a; a+=d; if(sum%4=0) printf(“%dn”,sum); while(sum200); 5 求出用数字0至9可以组成多少个没有重复的三位偶数。 解答: #include main() int n,i,j,k; n=0; for(i=1;i9;i+)
18、if( k=0;k=8; k+=2) if(k!=i) for(j=1;j9;j+) if(j!=i&j!=k) n+;printf(“n=%dn”,n);6 输出1至100之间每位数的乘积大于每位数的和的数。 解答:#includemain() int n,k=1,s=0,m; for(n=1;ns) printf(“%d”,n); 7 下面程序的功能是求1000以内的所有完全数。(说明:一个数如果恰好等于它的因子之和(除自身外),则称该数为完全数,例如:6=1+2+3,6为完全数)解答:#includemain() int a,i,m; for(a=1;a=100;a+) for(m=0,i=1;i=a/2;i+) if(!(a%i) m+=i; if(m=a) printf(“%4d”,a); 8 有一堆零件(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(i-5)%9!=0) printf(“%d”,i);