第五章循环结构程序设计
一、选择题
1.以下程序的输出结果是( )。
main()
{ int n=4;
while (n--)
printf(〞%d〞,--n); }
A.20
B.31
C.321
D.210
2.以下程序的输出结果是( )。
main()
{int x=10,y=10,i;
for(i=0;x>8;y=++i)
printf("%d%d",x--,y);}
A.10192
B.9876
C.10990
D.101091
3.当执行以下程序段时。
x=-1;
do {x=x*x;}while (!x);
A.循环体将执行一次
B.循环体将执行两次
C.循环体将执行无数多次
D.系统将提示有语法错误4.执行以下程序后输出的结果是()。
main()
{ int y=10;
do{y--;}while(--y);
printf("%d\n",y--);}
A.-1
B.1
C.8
D.0
5.下面程序的输出结果是()。
main()
{ int x=3,y=6,a=0;
while (x++!=(y-=1))
{a+=1;
if (y printf("x=%d,y=%d,a=%d\n",x,y,a);} A.x=4,y=4,a=1 B.x=5,y=5,a=1 C.x=5,y=4,a=3 D.x=5,y=4,a=1 6.若i,j已定义为int类型,则以下程序段中内循环的总的执行次数是()。 for (i=5;i;i--) for (j=0;j<4;j++){…} A.20 B.24 C.25 D.30 8.在下列选项中,没有构成死循环的程序段是()。 A.int i=100; while (1) {i=i%100+1; if(i>100) break;} B. for ( ;;); C.int k=1000;do {++k;}while (k>=10000); D.int s=36;while (s) ;--s; 9.列程序运行的情况是()。 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.i=9,sum=9 C.i=2,sum=1 D.运行出现错误 10.有以下语句:i=1; for(;i<=100;i++) sum+=i; 与以上语句序列不等价的有( )。 A. for(i=1; ;i++) {sum+=i;if(i==100)break;} B. for(i=1;i<=100;){sum+=i;i++;} C. i=1;for(;i<=100;)sum+=i; D. i=1;for(; ;){sum+=i;if(i==100)break;i++;} 11.下面程序的运行结果为()。 main() { int n; for(n=1;n<=10;n++) { if(n%3==0)continue; printf("%d",n);}} A.12457810 B.369 C.12 D.12345678910 12.下面程序的运行结果是()。 main() {int x,y,z; x=0;y=z=-1; x+=-z---y; printf("x=%d\n",x);} A.x=4 B.x=0 C.x=2 D.x=3 13.标有/**/的语句的执行次数是()。 int y,i; for(i=0;i<20;i++) {if(i%2==0)continue; y+=i;/**/ } A.20 B.19 C.10 D.9 14.在C语言中,if语句后的一对圆括号中,用以决定分支的流程的表达式。 A.只能用逻辑表达式 B.只能用关系表达式 C.只能用逻辑表达式或关系表达式 D.可用任意表达式15.在以下给出的表达式中,与do-while(E)语句中的(E)不等价的表达式是()。 A.(!E==0) B.(E>0||E<0) C.(E==0) D.(E!=0) 16.假定所有变量均已正确定义,下列程序段运行后x的值为()。 k1=1;k2=2;k3=3;x=15; if(!k1)x--;else if(k2) if(k3)x=4;else x=3; A.14 B.4 C.15 D.3 17.执行下面语句的输出为()。 int i=-1; if(i<=0)pri ntf(“* * * *\n”); else pri ntf(“% % % % \n”); A.* * * * B.% % % % C.% % % % c D.有错,执行不正确 18.在C语言中,为了结束while语句构成的循环,while 后一对圆括号中表达式的值应该为()。 A.0 B.1 C.true D.非0 19.在C语言中,为了结束由do-while语句构成的循环,while后一对圆括号中表达式的值应为()。 A.0 B.1 C.true D.非0 20.C语言的if语句嵌套时,if与else的配对关系是()。 A. 每个else总是与它上面的最近的if配对 B. 每个else总是与最外的if配对 C. 每个else与if的配对是任意的 D. 每个else总是与它上面的if配对 21.下列程序的输出为()。 #include main() {int i=0,j=0,a=6; if((++i>0)||(++j>0))a++; printf("i=%d,j=%d,a=%d\n",i,j,a);} A.i=0,j=0,a=6 B.i=1,j=1,a=7 C.i=1,j=0,a=7 D.i=0,j=1,a=7 二、填空题 1.当输入19,2,21时下列程序运行的结果是_________。 main() {int a,b,c,max; printf("please scan three number a,b,c:\n"); scanf("%d,%d,%d",&a,&b,&c); max=a; if(max if(max printf("max is:%d",max);} 2.以下程序运行的结果为________。 main(){ int a,b,c,x,y,z; a=10;b=2; c=!(a%b);x=!(a/b); y=(a=0); z=(a=0); printf("%d,%d,%d,%d\n",c,x,y,z);} 3.若输入4,程序运行结果为【 1 】,若输入-4,运行结果为【 2 】,若输入10,运行结果为【 3 】. main(){ int x,y; scanf("%d",&x); if(x<1){ y=x;printf("x=%d,y=x=%d\n",x,y);} else if(x<10) { y=2*x-1; printf("x=%d,y=2*x-1=%d\n",x,y);} else { y=3*x-11;printf("x=%d,y=3*x-11=%d\n",x,y);}} 4.以下程序运行的结果________。 main(){ int x=2,y,z; x*=3+1; printf("%d,",x++); x+=y=z=5; printf("%d,",x); x=y==z; printf("%d\n",x);} 5.程序运行结果是_________。 #include main() {int i; for(i=1;i+1;i++) { if(i>4){printf("%d\t",i++);break;} printf("%d\t",i++);}} 6.以下程序运行的结果是_________。 #include main() { int a,b; for(a=1,b=1;a<=100;a++) { if(b>=20)break; if(b%3==1) { b+=3; continue;} b-=5;} printf("%d\n",a);} 7.以下程序运行的结果是________。 main() {int i=1; while(i<10) if(++i%3!=1)continue; else printf("%d",i);} 8.程序运行的结果是________。 main() {int n=0; while(n++<=1) printf("%d\t",n); printf("%d\n",n);} 9.对以下程序: 当输入65 14时,其运行结果是【 1 】。 当输入14 63时,其运行结果是【 2 】。 当输入25 125时,其运行结果时【 3 】。 #include main() {int m,n; scanf("%d%d",&m,&n); while(m!=n) { while(m>n)m-=n; while(n>m)n-=m; } printf("m=%d\n",m); } 10.在执行以下程序时,为了使输出结果为t=4,则给a 和b输入的值应满足的条件是_______。 main() {int s,t,a,b; scanf(〞%d,%d〞,&a,&b); s=1;t=1; if(a>0) s=s+1; if(a>b) t=s+t; else if (a==b) t=5; else t=2*s; printf(〞t=%d\n〞,t);} 三、写出程序的运行结果 1、下列程序的输出为()。 #include main() { int k=0;char c='A'; do{switch(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(c<'G'); printf("%d\n",k);} 2、请读程序: #include 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;} printf("a=%d,b=%d\n",a,b);} 上面程序的输出结果是()。 3、下列程序的输出为()。 #include"stdio.h" main() { int i,j,x=0; for(i=0;i<2;i++) {x++; for(j=0;j<=3;j++) {if(j%2)continue;x++; } x++; } printf("x=%d\n",x);} 4、下列程序的输出为()。 #include main() {int i,j,k=0,m=0; for(i=0;i<2;i++) { for(j=0;j<3;j++)k++;k-=j;} m=i+j; printf("k=%d,m=%d\n",k,m);} 5、下列程序段的输出结果为()。 main() {int x=3; do{ printf("%3d",x-=2);}while(!(--x));} 四、请补充下列程序 1.求出1000以内的“完全数”。(提示:如果一个数恰好等于它的因子之和(因子包括1,不包括数本身), 则称该数为“完全数”。如:6的因子是1,2,3而 6=1+2+3,则6是个“完数”)。 main() {int i,a,m; for(i=1;i<1000;i++) {for(m=0,a=1;a<=i/2;a++) if(!(i%a)) 【1 】; if【2】)printf("%4d",i);}} 2.鸡问题:100元钱买100只鸡,公鸡一只5元钱,母鸡一只3元钱,小鸡一元钱三只,求100元钱能买公鸡、母鸡、小鸡各多少只? #include main() {int cocks,hens,chicks; cocks=0; while(cocks<=19) { hens=0; while(hens<=33) { chicks=100.0-cocks-hens; if(5.0*cocks+3.0*hens+chicks/3.0==100.0) printf("%d,%d,%d\n",cocks,hens,chicks); 【1】;} 【2】;}} 3.爱因斯坦的阶梯问题:设有一阶梯,每步跨2阶,最后余1阶;每步跨3阶,最后余2阶; 每步跨5阶,最后余4阶;每步跨6阶,最后余5阶;只有每步跨7阶时,正好到阶梯顶。问共有多少阶梯。 main() {int ladders=7; while(【 1 】)ladders+=14; printf("%d\n",ladders);} 4.下列程序计算平均成绩并统计90分及以上人数。 main() {int n,m; float grade,average; average=n=m=【1】; while(【2】) { scanf("%f",&grade); if(grade<0)break; n++; average+=grade; if(grade<90)【3】; m++;} if(n)printf("%.2f%d\n",average/n,m);} 5.下列程序计算Fibonacci数列:1,1,2,3,5,8,13……的前40项。 main() {int i;long f1,f2; 【1】; for(i=0;i<20;i++) { printf("%12ld%12ld",f1,f2); if(I%2)printf("\n"); f1+=f2; 【2】;}} 6.下列程序判断一个数是否为素数。 #include #include main() {int i,k,m; scanf("%d",&m); k=sqrt(【1】); for(i=2;i<=k;I++) if(m%i==0)【2】; if(【3】)printf("%dyes\n",m); else printf("%dno\n",m);} 7.求100~499之间的所有水仙花数,即各位数字的立方和恰好等于该数本身的数。 main() {int i,j,k,m,n; for(i=1;【1】;i++) for(j=0;j<=9;j++) for(k=0;k<=9;k++) {【2】; n=i*i*i+j*j*j+k*k*k; if(【3】) printf("%d",m); }} 8.从键盘上输入两个整数m和n,求其最大公约数。 main() {int a,b,num1,num2,temp; scanf("%d,%d",&num1,&num2); if(【1】) { temp=num1; num1=num2; num2=temp;} a=num1;b=num2; while(b!=0) { temp=【2】; a=b; b=temp;} printf("%d,%d",a,num1*num2/a);} 循环(第二部分) 一、选择题 1.下列符号中,不属于转义字符的是()。 A.\\ B.\0xAA C.\t D.\0 2.已知大写字母A的ASCII码值是65,小写字母a的ASCII码是97,则用八进制表示的字符常量’\101’是()。 A.字符A B.字符a C.字符c D.非法的常量 3.以下选项中,合法转义字符的选项是()。 A.’\\’ B.’\018’ C.’xab’ D.’\abc’ 4.以下选项中,正确的字符常量是()。 A.”F” B.’\\’’ C.’W’ D.’’ 5.已知字母A的ASCII码为十进制数65,且S为字符 型,则执行语句S=’A’+’6’-’3’;后,S中的值为 ()。 A.’D’ B.68 C.不确定的值 D.’C’ 6.若有说明语句:char s=’\72’;则变量s()。 A.包含一个字符 B.包含两个字符 C.包含三个字符 D.说明不合法,s的值不确定 7.已知s是字符型变量,下面不正确的赋值语句是()。 A.s=’\012’; B.s= ’u+v’;C.s=’1’+’2’; D.s=1+2; 8.已知s是字符型变量,下面正确的赋值语句是()。 A.s=’abc’; B.s=’\08’;C.s=’\xde’; D.s=”\”; 9.putchar函数可以向终端输出一个()。 A.整型变量表达式值B.字符串 C.实型变量值。 D.字符或字符型变量值。 10.有如下程序段: int x1,x2; char y1,y2; scanf(”%d%c%d%c”,&x1,&y1,&x2,&y2); 若要求x1、x2、y1、y2的值分别为10、20、A、B, 正确的数据输入是()。(注: └┘ 代表空格) A.10A └┘ 20B B.10 └┘ A20B C.10 └┘A └┘ 20 └┘ B D.10A20 └┘ B 11.有如下程序,若要求x1、x2、y1、y2的值分别为10、 20、A、B,正确的数据输入是()。(注: └┘ 代表空 格) int x1,x2; char y1,y2; scanf(”%d%d”,&x1,&x2); scanf(”%c%c”, &y1,&y2); A.1020AB B.10 └┘20 └┘ ABC C.10 └┘ 20 D.10 └┘ 20AB AB 12.根据下面的程序及数据的输入和输出形式,程序中输 入语句的正确形式应该为()。 #include ”stdio.h” main() {char s1,s2,s3; 输入语句; printf(”%c%c%c”,s1,s2,s3); } 输入形式:A └┘B └┘ C<回车> (注: └┘ 代表空格) 输出形式:A └┘ B A.scanf(”%c%c%c”,&s1,&s2,&s3); B.scanf(”%c └┘% └┘ c%c”,&s1, &s2,&s3); C.scanf(”%c,%c,%c”,&s1,&s2,&s3); D.scanf(”%c%c”, &s1, &s2,&s3); 13.判断char型变量s是否为小写字母的正确表达式是()。 A.’a’<= s<=’z’B.(s>=’a’) & (s<=’z’) C.(s>=’a’) && (s<=’z’) D.(’a’<=s) and (’z’>=s) 14.运行以下程序后,如从键盘上输入china#,则输出为()。 #include ”stdio.h” main() { int v1=0,v2=0; char ch; while ( (ch=getchar()) != ’# ’) switch (ch) { case ’a’: case ’h’: default: v1++; case ’o’: v2++; } printf(”%d,%d\n”, v1,v2);} A.2,0 B.5,0 C.5,5 D.2,5 15.有以下程序,若输入为字符s,则程序运行结果为()。 #include ”stdio.h” main() { char ch; ch=getchar(); switch (ch) { case ’a’: printf(”a=%c\n”,ch); default: printf(”end!\n”); case ’b’: printf(”b=%c\n”,ch); case ’c’: printf(”c=%c\n”,ch);}} A.end! B.end! C.有语法错误 D.a=s b=s end! c=s 16.若输入B,以下程序的运行结果为()。 main() {char grade;scanf("%c",&grade); switch(grade) {case'A':printf(">=85."); case'B': case'C':printf(">=60."); case'D':printf("<60."); default:printf("error.");}} A.>=85. B.>=60. C.>=60.<60.error. D.error. 17.下列程序的输出是()。 #include main() { int i;char c; for(i=0;i<=5;i++) {c=getchar();putchar(c);}} 程序执行时从第一列开始输入以下数据, u w xsta A.uwxsta B.u C.u D.u w w w x xs xsta 二、填空题 1.以下程序的执行结果是________。 #include ”stdio.h” main() { char s=’b’; printf(”dec:%d,oct:%o,hex:%x,ASCII:%c\n”, s,s,s,s);} 2.以下程序的执行结果是:________。 #include ”stdio.h” main() { char c=’c’+5; printf(”c=%c\n”,c);} 3.以下程序输入1 └┘2 └┘ 3后的执行结果是________。 (注: └┘ 代表空格) #include ”stdio.h” main() { int i,j; char k; scanf(”%d%c%d”,&i,&k,&j); printf(”i=%d,k=%c,j=%d\n”,i,k,j);} 4.有以下程序,若输入9876543210后的执行结果是 ________;若输入为:98 └┘76 └┘ 543210后的 执行结果是________;若输入为:987654 └┘ 3210后的执行 结果为:________。(注: └┘ 代表空格) #include ”stdio.h” main() { int x1,x2; char y1,y2; scanf(”%2d%3d%3c%c”,&x1,&x2,&y1,&y2); printf(”x1=%d,x2=%d,y1=%c,y2=%c\n”,x,y);} 5.若输入字母C,程序输出结果为【1】;若输入字符*,程序将【2】。 #include main() {char c1,c2; c1=getchar(); while(c1<97||c1>122)c1=getchar(); c2=c1-32; printf("%c,%c\n",c1,c2);} 6.此程序运行时,输入qwert?程序的运行结果是_________。 #include main(){char c; while((c=getchar())!='?')putchar(++c);} 三、写出程序的运行结果 1.以下程序段的运行结果是________。 #include ”stdio.h” main() {char ch1=’a’,ch2=’A’; switch (ch1) { case ’a’: switch (ch2) {case ’A’: printf(”good!\n”); break; case ’B’: printf(”bad!\n”); break; } case ’b’: printf(”joke\n”);}} 2.以下程序运行的结果________。 #include #include main() {int i,k,m,n=0; for(m=1;m<=10;m+=2) { if(n%10==0)printf("\n"); k=sqrt(m); for(i=2;i<=k;i++) if(m%i==0)break; if(i>k) {printf("%2d",m); n++;}}} 3.如果输入‘1’,‘2’,‘3’,‘4’,程序运行输出的 是________。 #include main() {char c; int i,k; k=0; for(i=0;i<4;i++) {while(1) { c=getchar();if(c>='0'&&c<='9')break;} k=k*10+c-'0';} printf("k=%d\n",k);} 4.运行以下程序后,如果从键盘上输入china#<回车>,则输出结果为________。 #include main() {int v1=0,v2=0; char ch; while ((ch=getchar())!='#') switch(ch) {case 'a': case 'h': default: v1++; case '0':v2++; } printf("%d,%d\n",v1,v2);} 四、程序填空 1.以下程序是对用户输入的字母进行大小写转换。请在【】内填入正确内容。 #include ”s tdio.h” main() { char ch; printf(”please input a letter:”); scanf(”%c”,&ch); if (【1】) ch=ch+32; else if (ch>=’a’ && ch<=’z’) 【2】; printf(” the converted letter is: %c\n”,ch);} 循环结构程序设计习题及答案 1、循环语句的三要素分别是、、。 2、for语句括号内的3个表达式的作用分别 是、、。 3、在2层循环嵌套中,外层循环语句的每个执行周期中,内层循环语句都要完整 地,只有当时,才结束整个循环。 4、在循环结构中,break语句的作用是;continue语句的作用是。 5、当循环条件一开始就为假时,对于while语句、do…while语句、for语句,分别执行循环体次、次、次。 6、下面程序段的执行次数: int a=0; while(a=0) { printf("good\n"); a--; } 7、下面程序段的执行次数: int a=0; while(a==0) { printf("good\n"); a--; } 8、下面程序段的执行次数: int a=1; while(a=1) { printf("good\n"); a++; } 9、下面程序段的执行次数: int a=1; while(a==1) { printf("good\n"); a++; } 10、下列程序段的运行结果是。 for(i=5;i>=0;i--) printf(“%d “,i); 11、下列程序段的运行结果是。 for(n=1;n<20;n=n+3) printf(“%d “,n); 12、下列程序段的运行结果是。 for( ch='a' ;ch<='e' ;ch++) printf(“%d“,ch-97); 13、下列程序段的运行结果是。 for(i=1,j=5 ; i 第三单元循环结构练习题 选择题: 1、有以下程序执行后的输出结果是( D )。 main( ) { int i,s=0; for(i=1;i<10;i+=2) s+=i+1; printf("%d\n",s);} A.自然数1~9的累加和 B.自然数1~10的累加和 C.自然数1~9中的奇数之和 D.自然数1~10中的偶数之和 2、以下关于for语句的说法不正确的是( A )。 A. for循环只能用于循环次数已经确定的情况 B. for循环是先判断表达式,后执行循环体语句 C. for循环中,可以用break跳出循环体 D. for循环体语句中,可以保含多条语句,但要用花括号括起来 3、若i和k都是int类型变量,有以下for语句 for(i=0,k=-1;k=1;k++) printf("*****\n"); 下面关于语句执行情况的叙述中正确的是( d )。 A.循环体执行两次 B.循环体执行一次 C.循环体一次也不执行 D.构成无限循环 4、以下程序程序的执行后的输出结果是( c )。 main() {int i,t[][3]={9,8,7,6,5,4,3,2,1}; for(i=0;i<3;i++) printf(“%d”,t[2-i][i]);} A.7 5 3 B. 3 5 7 C.3 6 9 D.7 5 1 5、以下程序运行后的输出结果是( A )。 void fun(char*s) { while(*s) { if(*s%2==0) printf(“%c”,*s); s++;} } main() { char a[]={“good”};fun(a);printf(“\n”);} 注意:字母a的ASCⅡ码值为97 A.d B.go C.god D.good 6、已知 int t=0; while(t=1){...} 则以下叙述正确的是( B )。 A)循环控制表达式的值为0 B)循环控制表达式的值为1 C)循环控制表达式不合法 D)以上说法都不对 7、设有以下程序段 B int x=0,s=0; while(!x!=0)s+=++x; printf("%d",s); 则 A)运行程序段后输出0 实验五代码: 基础能力落实: 1)编写一个程序,将用分钟表示的时间转化成以小时和分钟表示的时间。使用#define 或者const来创建一个代表60的字符常量。使用while循环来允许用户重复键入值,并且当键入一个小于等于0的时间时终止循环。要求用while语句 #include 循环结构程序设计习题及答案1、循环语句的三要素分别 是、、。 2、for语句括号内的3个表达式的作用分别 是、、。 3、在2层循环嵌套中,外层循环语句的每个执行周期中,内层循环语句都要完整地,只有当时,才结束整个循环。 4、在循环结构中,break语句的作用是;continue语句的作用是。 5、当循环条件一开始就为假时,对于while语句、do…while语句、for 语句,分别执行循环体次、次、 次。 6、下面程序段的执行次数: int a=0; while(a=0) { printf("good\n"); a--; } 7、下面程序段的执行次数: int a=0; while(a==0) { printf("good\n"); a--; } 8、下面程序段的执行次数: int a=1; while(a=1) { printf("good\n"); a++; } 9、下面程序段的执行次数: int a=1; while(a==1) { printf("good\n"); a++; } 10、下列程序段的运行结果是。 for(i=5;i>=0;i--) printf(“%d “,i); 11、下列程序段的运行结果是。 for(n=1;n<20;n=n+3) printf(“%d “,n); 12、下列程序段的运行结果是。 for( ch='a' ;ch<='e' ;ch++) printf(“%d“,ch-97); 13、下列程序段的运行结果是。 for(i=1,j=5 ; i 第五章循环结构程序设计 1.用for循环语句编程输出1~20之间的所有整数,两数之间以空格分隔。 #include printf(" "); } } 4.输出100~200之间所有能被3和7整除的数(每行输出4个数)。#include int i,j=0; for(i=1;i<=1000;i++) { if((i%3==2)&&(i%5==3)&&(i%7==2)) { j++; printf("%12d",i); if(j%5==0) printf("\n"); } } } 6.先读入一个正整数n,然后计算并显示前n个偶数的和。例如n为5,则求2+4+6+8+10的值,即sum=30。 #include 顺序结构、选择结构和循环结构的程序设计典型例题分析与解答 1 在三种选择结构中,能用2个条件,控制从3个操作中选择一个操作执行的选择结构是______选择结构 【分析】能用1个条件,控制某个操作做或不做的选择结构是单分支结构;能用1个条件,控制从2个操作中选择一个操作执行的选择结构是双分支结构;能用n(n>l)个条件,控制从n+ l个操作中选择一个操作执行的选择结构是多分支结构。【答案】多分支 2 在三种循环结构中,先执行循环操作内容(即循环体),后判断控制循环条件的循环结构是______循环结构。 【分析】当型循环结构是先判断控制循环的条件,条件成立,执行循环体;条件不成立,则退出循环体。次数型循环结构也是先判断是否达到循环次数,没有达到循环次数,执行循环体;达到循环次数的,退出循环。只有直到型循环结构才是先执行循环体,然后再判断控制循环的条件,如果条件成立,进行循环;条件不成立,退出循环。 【答案】直到型 3 使用“getchar( )”函数时,程序的开头必须写一条包含命令为____________。 【分析】凡是使用系统函数的程序,都要在程序的开头写一条包含命令,包含命令中的“头函数.h”是一个文件,其中有关于该系统函数的定义。系统函数“getchar( )”是在名为“stdio.h(标准输入输出函数)”的头函数文件中定义的。【答案】#include"stdio.h"或#include<stdio.h> 4 执行输入语句“scanf("x=%c,y=%d",&x,&y);”,要使字符型变量X的值为'A'、整型变量y的值为12,则从键盘上正确的输入是( ) ①'A'/②A/③x=A/ ④x=A,y=12/ 12/ 12/ y=12/ 说明:备选答案中的"/"表示回车换行键 【分析】输入语句的格式控制符串中的“x=”、“,”、“y=”都是非格式控制符, 在输入时必须原样位置输人,所以只有备选答案④才符合这个要求。【答案】④ 5 设有下列程序段,则执行该程序段后的输出是( ) int i=012; float f=1.234E-2; printf("i=%-5df=%5.3f",i,f); ... ①i=__012f=1.234 ②i=10___f=0.012 ③10___O.012 ④___100.012 注:答案中的_代表一个空格。 【分析】输出语句的格式控制符串中的“i=”、“f=”都是非格式控制符,在输出时必须原样,原位置输出,所以只有备选答案①和②才符合这个要求;格式控制符“%-5d”的格式控制是数据左对齐、宽度为5的整型数据,备选答案①中的数据是右对齐的;此外,该答案中的实数“1.234E-2”应该代表“0.01234”,而不是“1.234”。只有备选答案②符合题意。【答案】② 6 在Turbo C的主屏幕中,将当前编辑的源程序以原名存盘,可以选用___________菜单项,也可以直热键________。 【分析】如果选用“File/Save”菜单项,或者使用热键(f12),当前编辑的源程序将以原来的文件名存盘;如果选用“File /Write to”,当前编辑的源程序将以新的文件名存盘。 【答案】File/Save F2 7 下列各种选择结构的问题中,最适合用if-else语句来解决的是( ) ①控制单个操作做或不做的问题 ②控制两个操作中选取一个操作执行的问题 ③控制三个操作中选取一个操作执行的问题 ④控制10个操作中选取一个操作执行的问题 【分析】if-else语句是专门解决“双分支结构”的,而“双分支结构”的问题就是用单个条件控制从两个操作中选取一个操作来执行的问题。 【答案】② 8 下列程序是输入一个小写字母,转换成对应大写字母的后一个字母输出。例如:'a'将转换成’B’、…、‘y’将转换成’Z’,其中的’Z’将转换成’A’。请填写程序中所缺少的语句。 main() {char ch ; scanf(”%c”,&ch〕; ch=ch- 32+1; ___________________; printf("%c\n",ch); } 【分析】分析程序库中的“ch=ch- 32+ 1;”语句,可知是将字符型变量 ch中的小写字母转换成对应的大写字母(- 32)的后一个字母(+ l)。如果ch中的字母是' a'、' b'、··,'y',转换结果都不会出错,但是,如果 ch中的字母是'Z',则-32后是大写字母'Z',再+l后将不是大写字母了。为了使其转换成'A',需要用一个单分支结构来实现:如果ch的值等于'Z'+ l,则硬性将 ch的值改成'A'。完成这个任务的语句是一条单分支语句,正是所缺少的语句。 【答案】 if (ch=='Z'+l) h='A'; 9不能正确计算下列分段函数的程序段是_________ |-1 x<0 y=|0 x=0 x>0 ① switch(x< 0)② if(x> 0) {case1:y=-1;break; y=1; case 0:switch(x==0)else {casel:y=0;break;if(x==0) case 0: y= l;y=0 } else } &ny=-l ③ y= l;④ y= l; if(x==0)if(x<0) y=0; y =-l; else else y=- l; if(x== 0) y=0; 【分析】先来分析备选答案①:表达式“x<0”的值只有两种可能性,成立值为1、不成立值为on如果“x<0”的值为 1(即 x< 0),则执行“easel:”后的语句“y=-l”后,退出 switch语句,符合分段函数要求。如果“x<0”的值为0(即x>=0),则执行“case 0:”后的switch语句。该switch语句的表达式是“x==0”,结果也有两种:成立为1、不成立为0.如果“x==0”的值为1(即x=0),则执行“case l:”后的语句“y=0”后,退出 switch语句,符合分段函数要求。如果“x==0”的值为0(即x>0),则执行“case 0:”后的语句“y=1”,也符合分段函数要求。再分析备选答案②:这是标准的用嵌套双分支结构来实现三分支的分段函数,结果显然是能求解分段函数的。分析备选答案③:双分支语句的条件是“x==0”,条件成立时,y值为0,符合分段函数的要求,条件不成立时(包含x>0和x<0两种情况),结果y值为-l,显然不符合分段函数的要求,所以本题要选该答案。至于备选答案④,是能正确计算分段函数的,首先置y为1;接着用双分支结构处理“x<0”和“x>=0”的两种情况:前者使得y值为一l;后者再执行一个单分支结构,如果“x==0”则使y值为0,否则不改变y值,保持y的原值1,符合分段函数的要求。 【答案】③ 10 三种循环语句都能解决循环次数已经确定的次数型循环,其中__________循环语句最适合。 【分析】当“for(表达式 1;表达式 2;表达式 3)语句;”中的表达式1为:整型变量 k=l;表达式 2为:整型变量 k<= n;表达式 3为:整型变量 k++;则这个 for循环就是次数为n次的标准次数型循环结构。 【答案】for 11执行下列程序段后的输出是() x=l; while(x<=3) x++,y=x+++x; printf("%d,%d",x,y); ① 6,10 ②5,8 ③4,6 ④3,4 【分析】我们可以使用逐步记录运行结果的方法来获得输出结果,记录如下: x=1; 进入循环,条件满足执行循环体:计算x+十得x为2,计算y=x+++x,得y为4、x为3; 继续循环,条件满足执行循环体:计算x+十得x为4,计算y=x+++x,得y为8、x为5; 继续循环,条件不满足退出循环; 输出x和y的值为5,8。 【答案】② 12 执行下列程序段,其中的do-while循环一共执行_次。 static int x; do x+=x*x; while (x); 【分析】对静态型变量,不赋初值也有值,对整型变量,其值为 0。执行循环语句 do-while 的循环体,x+=x* x是x=x+(x* 循环结构程序设计典型例题 例1有数列2/3、4/5、6/9、10/15……求此数列前30项的和。 算法分析: 对于数列的题,首先要找出通项公式,或前后项的计算关系公式,根据公式求所需。由于数列的题一般执行次数能确定,用for语句来编写比较方便。 此题,前后项的关系是:后一项的分子是前一项的分母加1,后一项的分母是前一 项的分子加分母。解题思路是用循环语句求各项,并把值累加,因为是求前30项的和,循环执行30次。 1.初值i=2,j=3,s=0; 2.用n从1到30循环 3.s=s+ i/j; 4.c=i; i=j+1; j=c+j; 5输出s; 程序: #in clude 循环结构程序设计复习题 一.选择题 1.以下while循环中,循环体执行的次数是:() k=1; while (--k) k=10; a) 10次b) 无限次c) 一次也不执行d) 1次2.有以下程序段,其中x为整型变量,以下选项中叙述正确的是:() x=0; while (!x!=0) x++; a) 退出while循环后,x的值为0 b) 退出while循环后,x的值为1 c) while的控制表达式是非法的 d) while循环执行无限次 3. 有以下程序段,其中n为整型变量,执行后输出结果是:() n=20 ; while(n--) ; printf(“%d”,n) ; a) 2 b) 10 c) -1 d) 0 4. 有以下程序段,其中t为整型变量,以下选项中叙述正确的是:() t=1; while (-1) { t--; if(t) break;} a) 循环一次也不执行 b) 循环执行一次 c) 循环控制表达式(-1)不合法 d) 循环执行2次 5. 有以下程序段,其中x为整型变量,以下选项中叙述正确的是:() x=-1; do {;} while (x++); printf(“x=%d”,x); a) 该循环没有循环体,程序错误 b) 输出x=1 c) 输出x=0 d) 输出x=-1 6. 有以下程序段,其中x,y为整型变量,程序输出结果是:() for(x=0,y=0;(x<=1)&&(y=1);x++,y--) ; printf(“x=%d,y=%d”,x,y); a) x=2,y=0 b) x=1,y=0 x=0,y=0 d) x=1,y=1 c) 解析:在开始时 x=0,y=0; 进入循环判断(x<=1)&&(y= 1) 条件成立,同时把1赋给y,此时x=0,y=1; 然后执行 x++,y--,执行之后x=1,y=0; 再进入循环判断(x<=1)&&(y= 1),条件成立,同时同时把1赋给y,此时x=1,y=1; 然后执行 x++,y--,执行之后x=2,y=0; 再进入循环判断(x<=1)&&(y= 1),条件不成立,跳出循环 输出x=2,y=0 。 7. 有以下程序: main() { int x=0,y=0; while(x<5&&++y) y--,x++; printf(“%d,%d”,y,x); } 程序的输出结果是:() a) 0,5 b) 1,5 c) 0,4 d) 1,4 8. 有以下程序:main() int num=0; { do ,num); } { num++ ;printf(“%d\n” while(num<=2); } 程序的输出结果是:() 1 1c) 1 d) 第5章循环结构程序设计作业参考答案 班级学号姓名 【第140页】 5-1、请画出课本里5.6中给出的3个程序段的传统流程图。 (1)程序1: #include for (j=1;j<=5;j++,n++) { if(n%5==0)printf("\n"); //控制在输出5个数据后换行 if (i==3 && j==1) continue; //遇到第3行第1列,提前结束执行本次内循环体 printf("%d\t",i*j); } printf("\n"); return 0; } (1)程序1流程图(2)程序2流程图(3)程序3流程图 5-3、输入两个正整数m和n,求其最大公约数和最小公倍数。 #include 循环结构程序设计典型例题 例1:有数列2/3、4/5、6/9、10/15……求此数列前30项的和。 算法分析: 对于数列的题,首先要找出通项公式,或前后项的计算关系公式,根据公式求所需。由于数列的题一般执行次数能确定,用for语句来编写比较方便。 此题,前后项的关系是:后一项的分子是前一项的分母加1,后一项的分母是前一项的分子加分母。解题思路是用循环语句求各项,并把值累加,因为是求前30项的和,循环执行30次。 1. 初值i=2,j=3,s=0; 2. 用n从1到30循环 3. s=s+ i/j; 4. c=i; i=j+1; j=c+j; 5.输出s; 程序: #include<> main( ) { int i=2,j=3,n,c; float s=0; for(n=1;n<=30;n++) { s=s+(float)i/j; c=i; i=j+1; j=c+j; } printf(“\n%f”,s); } 此题中的n与循环体中的执行语句没有数值上的联系,仅仅用做决定循环执行的次数。 例2:下面这个程序,想想它实现的是什么功能? #include<> main( ) { int i,s=0; for(i=1;i<=100;i++) {if(i%5==0) continue; s=s+i; } printf(“\n%d”,s); } 在左边的程序中,i从1到100循环,当i是5的倍数时,直接进入下一个i,当i不是5的倍数时,把i累加到s,最后输出s。所以,这个程序实现的是求1~100中间所有非5的倍数的数之和。 例3:输出n~m中(0 第5章循环结构程序设计 练习题 1. 单项选择题 (1)语句while (!e);中的条件!e等价于 A 。 A. e==0 B. e!=1 C. e!=0 D. ~e (2)下面有关for循环的正确描述是 D 。 A. for循环只能用于循环次数已经确定的情况 B. for循环是先执行循环体语句,后判定表达式 C. 在for循环中,不能用break语句跳出循环体 D. for循环体语句中,可以包含多条语句,但要用花括号括起来 (3)C语言中 D 。 A. 不能使用do-while语句构成的循环 B. do-while语句构成的循环必须用break语句才能退出 C. do-while语句构成的循环,当while语句中的表达式值为非零时结束循环 D. do-while语句构成的循环,当while语句中的表达式值为零时结束循环 (4)C语言中while和do-while循环的主要区别是 A 。 A. do-while的循环体至少无条件执行一次 B. while的循环控制条件比do-while的循环控制条件严格 C. do-while允许从外部转到循环体内 D. do-while的循环体不能是复合语句 (5)以下程序段 C 。 int x=-1; do { x=x*x; } while (!x); A. 是死循环 B. 循环执行二次 C. 循环执行一次 D. 有语法错误 (6)下列语句段中不是死循环的是__C__。 第5章循环结构程序设计35 A. i=100; while (1) { i=i%100+1; if (i==20) break; } B.for (i=1;;i++) sum=sum+1; C.k=0; do { ++k; } while (k<=0); D.s=3379; while (s++%2+3%2) s++; (7)与以下程序段等价的是__A__。 while (a) { if (b) continue; c; } A. while (a) B. while (c) { if (!b) c; } { if (!b) break; c; } C. while (c) D. while (a) { if (b) c; } { if (b) break; c; } (8)以下程序的输出结果是_B___。 #include 模块三循环程序设计习题及答案 一、填空题 1、当在数据处理中要重复执行相同的操作时,宜采用程序结构来实现。 2、循环的3要素是、、。 3、在循环语句体中包含另一个循环语句的用法称为。 4、执行循环语句体中的break语句后将使用包含它的循环语句。 5、要结束当前正在执行循环体语句而直接进入下一循环周期,需要执行语句。 6、在for语句中表达式允许省略,但不能少,语句for( ; ;) ;构成的是循环。 7、在for语句中,省略表达式2时,则循环为循环。 8、执行语句for(i=1;i++<4; );后变量i的值是。 9、要使用循环程序提前结束本次循环周期并开始下一个循环周期,应在循环体内有条件使用语句。 10、在每次循环周期均要执行一次的语句,称为。 11、for语句括号内的3个表达式的作用分别是、和循环控制变量的更新。 二、选择题 1、若k为整形变量,则while循环共循环()。 k=5; while(k>=0) k-1; A、无限循环 B、6次 C、5次 D、4次 2、与while( ! n) ; 中表达式!dn等价的是()。 A、dn>=0 B 、dn!=0 C、dn == 0 D、dn != 1 3、以下程序段,while循环执行的次数是() int k=0; while( k == 1) k++; A、无限次 B、有语法错,不能执行 C、一次也不执行 D、执行1次 4、在C语言中,当do while语句中的条件为()时,结束该循环。 A、0 B、1 C、TRUE D、非0 5、下面程序段的输出结果是() do { b-=a; a++; }while(b--<0); A、10,-1 B、2,8 C、9,0 D、4,-3 6、以下描述正确的是() A、由于do while循环中循环体语句只能是一条可执行语句,所以循环体内不能使用复合语句。 B、do while循环由do开始,用while结束,在while(表达式)后面不能写分号 C、在do while循环体中,一定要有能使while后面匠值变为零的操作 D、do while循环中,根据情况可以省略while 7、若有如下程序段,其中s、a、b、c均已定义为整型变量,且a、c均已赋值(c大于0)。 s=c; for(b=1;b<=c;b++) s=s+1; 则与上述程序段功能等价的赋值语句是() A、s=a+b; B、s=a+c; C、s=s+c; D、s=b+c; 8、假定a,b,c,d均已定义为整型变量,且a、c均已赋值,a大于0,c大于0,则与程序段for(d=a,b=1;b<=c;b++) d--;功能等价的语句是() A、d=a+b; B、d=a+c; C、d=a-b; D、d=a-c 9、下列关于for循环的说法正确的是() A、for循环只能用于循环次数已经确定的情况 一、循环结构(Iteration Structure)的概述 1.目的 为了解决含有重复处理内容的问题,必须采用循环语句(Loop Statement)来编程实现。 2.类型 (1)当型循环结构 (2)直到型循环结构 二、循环语句 1.while语句 ①功能:实现当型循环结构。 ②形式 while(表达式){ 循环体 } ③特点:先判断后执行。 ④举例:(累加和问题)编程计算整数1~100的和。 int i ; //循环变量 int sum = 0 ; //累加和清0 i = 1 ; //循环变量i赋初值 while( i <= 100){ sum = sum + i ; //循环变量累加到sum中 i = i + 1; //改变循环变量i的值 } 2.do-while语句 ①功能:实现直到型循环结构。 ②形式 do{ 循环体 }while(表达式); //注意最后的分号 ③特点:先执行后判断。 ④举例:修改上例。 /*利用do-while语句编程实现整数1~100的和。*/ int i ; //循环变量 int sum = 0 ; //累加和清0 i = 1 ; //循环变量i赋初值 do{ sum = sum + i ; //循环变量累加到sum中 i = i + 1; //改变循环变量i的值 }while(i<=100);//注意最后的分号 3.for语句 ①功能:实现当型循环结构。 ②形式 for(表达式1;表达式2;表达式3){ 循环体 } ③特点:先判断后执行;使用频率最高。 ④举例:修改上例。 /*使用for语句编程计算整数1~100的和。*/ int i ; //循环变量 int sum = 0 ; //累加和清0 for( i = 1 ; i <=100 ; i++ ){//第一个表达式完成循环变量i赋初值;第三个表达式实现改变循环变量i的值 sum = sum + i ; //循环变量累加到sum中 } 4.几种循环语句的比较 ①由于while语句和for语句均实现当型循环结构,两者是完全等价的。 for(表达式1;表达式2;表达式3){ 难度(*)--考点:基本概念、判断循环次数 1、C语言中下列叙述正确的是(D) A)不能使用do…while语句构成的循环 B)do…while语句构成的循环,必须用break语句才能退出 C)do…while语句构成的循环,当while语句中的表达式值为非零时结束循环 D)do…while语句构成的循环,当while语句中的表达式值为零时结束循环 2、对于下列程序片断,(A) int k=0; while(k=1) k++; 则while循环的执行次数是 A. 无限次 B. 有语法错误,不能执行 C. 一次也不执行 D. 执行一次 3、下面程序段(C) int k=2; while (k=0) {printf(“%d”,k);k--;} 则下面描述中正确的是。 A )while 循环执行10 次 B )循环是无限循环 C )循环题语句一次也不执行 D )循环体语句执行一次 4、当执行以下程序段时(A) x=-1; do { x=x*x;} while(!x); A)循环体将执行一次 B)循环体将执行两次 C)循环体将执行无限次 D)系统将提示有语法错误 5、若i为整型变量,则以下循环执行次数是(B): for( i = 2; i ==0;) printf(“%d”, i); A) 无限次B) 0次c) 1次D) 2次 6、对for(表达式1; ; 表达式3)可理解为(B) A) for(表达式1; 0 ; 表达式3) B) for(表达式1; 1 ; 表达式3) C) for(表达式1;表达式1; 表达式3) D) for(表达式1;表达式3; 表达式3) 7、下面程序的功能是从键盘输入一组字符,从中统计大写字母和小写字母的个数,选择填空。(A) main ( ) { int m=0,n=0; char c; while (( ) ! '\n') { if (c>='A' && c<='Z') m++; if (c>='a' && c<='z') n++; } } A)c=getchar( ) B)getchar( ) C)c==getchar( ) D)scanf(“%c”,&c) 8、下面for 循环语句。(B) 第五章循环结构 一、选择题 1.C语言中while和do_while循环的主要区别是( )。 A.do_while的循环体至少无条件执行一次 B.while的循环控制条件比do_while的循环控制条件严格 C.do_while允许从外部转到循环体内 D.do_while的循环体不能是复合语句 2.以下描述中正确的是( )。 A.由于do-while循环中循环体语句只能是一条可执行语句,所以循环体内不能使用复合语句 B.do-while循环由do开始,用while结束,在while(表达式)后面不能写分号 C.在do-while循环体中,是先执行一次循环,再进行判断 D.do-while循环中,根据情况可以省略while 3.语句while (!E); 括号中的表达式!E等价于( ) 。 A.E==0 B.E!=1 C.E!=0 D.E==1 4.以下程序的功能是计算:s= 1+1/2+1/3+……+1/10 main() { int n; float s s=1.0; for(n=10;n>1;n--) s=s+1/n; printf("%6.4f\n",s); } 程序运行后输出结果错误,导致错误结果的程序行是( )。 A.s=1.0; B.for(n=10;n>1;n--) C.s=s+1/n; D.printf("%6.4f\n",s); 5.下面程序段的运行结果是( )。 a=1;b=2;c=2; while(a 第 5 章循环结构程序 设计 练习题 1.单项选择题 ( 1)语句 while (!e);中的条件!e等价于A。 A. e==0 B. e!=1 C. e!=0 D. ~e ( 2)下面有关for循环的正确描述是D。 A. for循环只能用于循环次数已经确定的情况 B. for循环是先执行循环体语句,后判定表达式 C. 在 for循环中,不能用break 语句跳出循环体 D. for循环体语句中,可以包含多条语句,但要用花括号括起来 (3)C语言中D。 A.不能使用do-while语句构成的循环 B. do-while 语句构成的循环必须用break 语句才能退出 C. do-while 语句构成的循环,当while 语句中的表达式值为非零时结束循环 D. do-while 语句构成的循环,当while 语句中的表达式值为零时结束循环 ( 4) C 语言中 while 和 do-while 循环的主要区别是A 。 A. do-while的循环体至少无条件执行一次 B. while的循环控制条件比do-while的循环控制条件严格 C. do-while允许从外部转到循环体内 D. do-while的循环体不能是复合语句 ( 5)以下程序段C。 int x=-1; do { x=x*x; } while (!x); A.是死循环 B. 循环执行二次 C. 循环执行一次 D. 有语法错误( 6)下列语句段中不是死循环的是__C__。 A.i=100; while (1) { i=i%100+1; if (i==20) break; } B.for (i=1;;i++) sum=sum+1; C.k=0; do { ++k; } while (k<=0); D.s=3379; while (s++%2+3%2) s++; 第5章循环结构程序设计 通过本章实验作业应达目标 1.熟悉while、for、do_while、break、continue语句的作用与使用规范,能使用while语句、for 语句、do_while语句实现循环结构; 2.掌握循环结构和选择结构之间嵌套、多重循环间嵌套的设计方法。 3.进行算法设计训练,能综合所学控制结构语句解决一般问题。 本章必须上交作业 程序5_1.c、5_2.c、5_3.c、5_5.c、5_6.c、5_7.c、5_8.c、5_11.c上传至http://121.251.227.27:8080/c 1.循环设计 循环是在循环条件为真时重复执行一组循环体语句的控制结构,是计算机解题的一个基本结构。循环控制有两种基本方法:计数法和标志法。 (1)计数器控制的循环 事先准确地知道循环次数,因此设计一个循环控制变量,由变量值来控制循环次数。每循环一次,循环变量的值会递增(增值通常为1或-1),当其值达到终值时结束循环。 (2)标志控制的循环 事先不知道准确的循环次数,由某一目标值标记循环的结束。如,例3-23中以变量sum的值达到标记值1000作为循环的结束,例3-24中就是以键盘输入一个负数为标记结束循环。 2.基本算法 程序设计的首要工作是算法设计,离开了算法也就没有了程序。算法,是指完成某一项工作而采取的方法和步骤,具体到程序设计,是对解题过程的准确而完整的描述,并用一种程序设计语言的来实现。 循环主要用来解决程序设计中两类基本的算法:穷举和迭代。 1. 穷举算法 穷举的基本思想是对问题的所有可能状态一一测试,直到找到解或将全部可能状态都测试过为止。穷举是一种重复型算法,其核心是设计循环,在循环体中依次测试。 例1 输入两个正整数x和y,求其最大公约数。 #include循环结构程序设计课后习题及答案
循环结构程序设计练习题 内含答案
循环结构程序设计代码
循环结构程序设计课后习题及答案
第五章 循环结构程序设计编程题(参考答案)
顺序结构选择结构和循环结构的程序设计典型例题分析与解答
循环结构程序设计典型例题
C语言循环结构复习题
第5章 循环结构程序设计作业参考答案
循环结构程序设计典型例题
C语言循环结构练习题带答案
循环程序设计习题及答案
循环结构程序设计:三种循环语句
c语言第5章练习题--循环结构程序设计
第五章循环结构
C语言循环结构练习题带答案.doc
第5章循环结构程序设计