C语言第五章循环习题

更新时间:2024-02-01 08:07:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

第五章 循环控制

5.1选择题

【题5.1】设程序段 int k=10; while(k=0)k=k-1; 则下面描述中正确的是____.

A)while循环执行10次 B)循环是无限循环 C)循环体语句一次也不执行 D)循环体语句执行一次

【题5.2】设有以下程序段 int x=0,s=0; while(!x!=0) s+=++x; printf(”%d”,s); 则____.

A)运行程序段后输出0 B)运行程序段后输出l C)程序段中的控制表达式是非法的 D)程序段执行无限次

【题5.4】下面程序段的运行结果是___. a=1;b=2;c=2;

while(a

A)1,2,2 B)2,1,0 C)1,2,1 D)2,1,1

【题5.5】下面程序段的运行结果是___. x=y=0;

while(x<15) y++,x+=++y; printf(”%d,%d”,y,x); A)20,7 B)6,12 C)20,8 D)8,20

【题5.6】下面程序段的运行结果是___. int n=0;

while(n++<=2); printf(”%d”,n); A)2 B)3 C)4 D)有语法错

【题5.8】下面程序的功能是将从键盘输入的一对数,由小到大排序输出。当输入一对相等数时结束循环,请选择填空。 #include main()

{ int a,b,t;

scanf(“%d%d”,&a,&b); while([1]) { if(a>b)

{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

【题5.9】下面程序的功能是从键盘输入的一组字符中统计出大写字母的个数m和小写字母的个数n,并输出m、n中的较大者,请选择填空。

#include main()

{ int m=0,n=0; char c;

while(([1])!=‘\n‘)

{ if(c>=’A’&&c<=’Z’ )m++; if(c>=’a’&& c<=’z’) n++; }

printf(”%d\\n”,m

[1] A)getchar(c) B)getchar( ) C)c=getchar( ) D)scanf(“%c”,c) [2]A)n:m B)m:n C)m:m D)n:n

[题5.11] 下面程序的功能是在输入的一批正整数中求出最大者,输入0结束循环,请选择填空。 #include main()

{int a,max=0; scanf(“%d”,&a); while([1])

{if(max

printf(“%d”,max); }

[1] A)a==0 B)a C)!a==1 D) !a

[题5.12] 下面程序的运行结果是____. #include main()

{int num=0; while(num<=2) {num++;

printf(”%d\n”,num);

} }

A)1 B)1 C) 1 D) 1 2 2 2 3 3 4

[题5.13]若运行以下程序时,从键盘输入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; }

}

A)668977 B)668966 C)66778777 D)6688766

表示回

[题5.14]C语言中while和do—while循环的主要区别是___。 A)do—while的循环体至少无条件执行一次

B)while的循环控制条件比do—while的循环控制条件严格 C)do—while允许从外部转到循环体内 D)do—while的循环体不能是复合语句

[题5.15] 以下能正确计算1×2×3×?×10的程序段是____. A)do {i=1;s=1; s=s*i; i++; }while (i<=10); B) do{i=1;s=0; s=s*i; i++; }while (i<=10); C) i=1;s=1; do{ s=s*i; i++; }while (i<=10); D) i=1;s=0; do{ s=s*i; i++; }while (i<=10);

[题5.16]以下程宇段____. x=-1;

do{x=x*x;}while(!x);

A)是死循环 B)循环执行二次 C)循环执行一次 D)有语法错误

[题5.17]以下描述中正确的是____。

A)由于do—while循环中循环体语句只能是一条可执行语句,所以循环体内 不能使用复合语句

B) do—while循环由do开始,用while结束,在while(表达式)后面不能写分号

C)在do—while循环体中,一定要有能使while后面表达式的值变为零(”假”)的操作

D)do—while循环中,根据情况可以省略while

[题5.18]若有如下语句 int x=3;

do{printf(”%d\n”,x-=2);}while(!(- -x)); 则上面程序段___。

A)输出的是1 B)输出的是1和-2 C)输出的是3和0 D)是死循环

[题5.19]下面程序的功能是计算正整数2345的各位数字平方和,请选择填空. #include main()

{int n,sum=0; n=2345; do{sum=sum+[1]; n=[2]; }while(n); printf(“sum=%d”,sum); }

[1] A)n B)( n)*( n) C)n/10 D)( n/10)*( n/10)

[2] A)n/1000 B)n/100 C) n/10 D)n0

[题5.21]等比数列的第一项a=1,公比q=2, 下面程序的功能是求满足前n项和小于100的最大n,请选择填空。 #include main()

{int a,q,n,sum; a=1;q=2;n=sum=0; do{[1];

++n;a*=q; }while(sum<100); [2];

printf(“%d\\n”,n); }

[1]A)sum++ B)sum+=n C)sum*=n D)a+=sum [2]A)n=n-2 B)n=n C)n++ D)n-=1

[题5.25] 下面程序的运行结果是___. #include main()

{int a=1,b=10; do

{b-=a; a++; }while(b- - <0); printf(“a=%d,b=%d\\n”,a,b); }

A)a=3,b=11 B)a=2,b=8 C)a=1,b=-1 D)a=4,b=9

[题5.26] 下面有关for循环的正确描述是___. A)for循环只能用于循环次数已经确定的情况 B)for循环是先执行循环体语句,后判断表达式 C)在for循环中,不能用break语句跳出循环体

D)for循环的循环体语句中,可以包含多条语句,但必须用花括号括起来.

[题5.27]对for(表达式1; ;表达式3)可理解为___。 A)for(表达式1;0;表达式3) B)for(表达式1;1;表达式3) C)for(表达式1;表达式1;表达式3) D)for(表达式1;表达式3;表达式3)

[题5,28] 若i为整型变量,则以下循环执行次数是___. for(i=2;i==0;) printf(”%d”,i- -); A)无限次 B)0次 C)1次 D)2次

[题5.29] 以下for循环的执行次数是___。 for(x=0,y=0;(y=123)&&(x<4);x++);

A)是无限循环 B)循环次数不定 C)执行4次 D)执行3次

[题5.31]下面程序段的运行结果是___。 for(y=l;y<10;) 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

[题5.34] 执行语句for(i=1;i++<4; );后变量i的值

是___。

A)3 B)4 C)5 D)不定

[题5.35] 有一堆零件(100到200之间),如果分成4个零件一组的若干组,则多2个零件;若分成7个零件一组,则多3个零件;若分成9个零件一组,则多5个零件。下面程序是求这堆零件总数,请选择填空。

#include main() {int i;

for(i=100;i<200;i++) if((i-2)%4==0) if(! ((i-3)%7)) if([1])

printf(”%d”,i); }

A)i%9=5 B)i%9!=5 C)(i-5)%9!=0 D)i%9= =5

[题5.36] 下面程序的功能是计算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

[题5.37] 下面程序的功能是计算1至10之间的奇数之和及偶数之和。请选择填空。 #include main() {int a,b,c,i; a=c=0;

for(i=0;i<=10;i+=2) {a+=i; [1]; c+=b; }

printf(“偶数之和=%d\\n”,a); printf(“奇数之和=%d\\n”,[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

[题5.38] 下面程序的运行结果是___。 #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)#& C)# D) #& & & &* & * & *

[题5.43]下面程序的运行结果是___. #include main()

{int i,b,k=0; for(i=1;i<=5;i++) {b=i%2;

while(b-->=0) k++; }

printf(”%d,%d”,k,b) }

A)3,-1 B) 8,-1 C)3,0 D)8,-2

[题5.44] 以下正确的描述是___.

A)continue语句的作用是结束整个循环的执行 B)只能在循环体内和switch语句体内使用break语句 C)在循环体内使用break语句或continue语句的作用相同 D)从多层循环嵌套中退出时,只能使用goto语句

[题5.45]下面程序段___. for(t=1;t<=100;t++) {scanf(”%d”,&x); if(x<0) continue; printf(”%3d\,t); }

A)当x=0时什么也不输出

C)printf函数永远也不执行 D)最多允许输出100个非负整数

[题5.48]以下描述正确的是___。 A)goto语句只能用于退出多层循环 B)switch语句中不能出现continue语句 C)只能用continue语句来终止本次循环 D)在循环中break语句不能独立出现

[题5.49]与下面程序段等价的是___。 for(n=100;n<=200;n++) {if(n%3= =0) continue; printf(“M”,n); }

A)for(n=100;(n%3)&&n<=200;n++) printf(“M”,n); B) for(n=100;(n%3)||n<=200;n++) printf(“M”,n); C)for(n=100;n<=200;n++)if(n%3!=0) printf(“M”,n); D) for(n=100; n<=200 ;n++) {if(n%3) printf(“M”,n); else continue; break; }

[题5.51]下面程序的运行结果是___. #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(“k=%d\n”,k); }

A) k=3 B)k=4 C)k=2 D)k=0

[题5.54]下面程序的运行结果是 #include

main() {int i,j,x=0; for(i=0;i<2;i++) {x++;

for(j=0;j<=3;j++) {if(j%2)contine; x++; } x++; }

printf (“x=%d\\n”,x); }

A)x=4 B) x=8 C) x=6 D) x=12

[题5.56]下面程序的运行结果是 main() { int i,j,a=0; for(i=0;i<2;i++) { for(j=0;j<4;j++) {if (j%2) break; a++; }

a++; }

printf(“%d\\n”,a); }

A)4 B) 5 C) 6 D)7

5.2 填 空 题

[题5.57]下面程序段是从键盘输入的字符中统计数字字符的个数,用换行符结束循环。请填空。 int n=0,c; c=getchar(); while([1]) {if([2]) n++; c=getchar(); }

[1] c!=’\\n’ [2] c>=’1’ && c<=’9’

[题5.59]有1020个西瓜,第一天卖一半多两个,以后每天卖剩下的一半多两个,问几天以后能卖完?请填空。 #include main( ) {int day,x1,x2;

day=0;x1=1020;

while([1]) {x2=[[2];x1=x2;day++;} printf(“day=%d\\n”,day); }

[1] x1 [2]x1/2-2

[题5.60]下面程序的功能是用“辗转相除法”求两个正整数的最大公约数。请填空。 #include main() { int r,m,n;

scanf(”%d%d”,&m,&n); if(m

while(r) {m=n,n=r,r=[2];} printf(“%d\n”,n); [1]r=m,m=n,n=r [2]m%n

[题5.62] 下面程序的运行结果是____. #include main()

{ int a,s,n,count; a=2;s=0;n=1;count=1;

while(count<=7) {n=n*a;s=s+n;++count;} printf(“s=%d”,s); } S=254

[题5.63]当运行以下程序时,从键盘键入China?(代表回车),则下面程序的运行结果是____. #include 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); } 5,5

[题5.64] 执行下面程序段后,k值是____.

k=1;n=263;

do{k*=n;n/=10;}while(n); 36

[题5.68] 下面程序的功能是用do—while语句求1至1000之间满足“用3除余2;用5除余3,用7除余2”的数,且一行只打印五个数。请填空。 #include main()

{ int i=1;j=0; do{if([1])

{printf(“M”,i); j=j+1;

if([2]) printf(“\\n”); } i=i+1;

}while(i<1000); }

[1]i%3= =2&&i%5= =3&&i%7= =2 [2]j%5==0

[题5.72]当运行以下程序时,从键盘输入1 2 3 4 5 -1(表示回车),

则下面程序的运行结果是___. #include main()

{int k=0,n;

do {scanf(”%d”,&n);k+=n;}while(n!=-1); printf(“k=%d n=%d\\n”,k,n); } k=14 n=-1

[题5.77] 鸡兔共有30只,脚共有90个,下面程序段是计算鸡兔各有多少只,请填空 for(x=1;x<=29;x++) {y=30-x;

if([1]) printf(“%d,%d\\n”,x,y); }

[1]2*x+4*y==90

[题5.79] for循环用以下形式表示:

for(表达式1;表达式2;表达式3) 循环体语句

则执行语句for(i=0;i<3;i++) printf(”*”);时,表达式1执行[1]次,表达式3执行[2]次。 [1]1 [2] 3

[题5.80] 下面程序的功能是计算1-3+5-7+?-99+101的值,请填空。

#include main()

{int i,t=1,s=0; for(i=1;i<=101;i+=2) {[1];s=s+t;[2];} printf(“%d\\n”,s); }

[1]t=t*i [2]t=-t/i

[题5.93] 下面程序的运行结果是____. #include main() {int i,j;

for(i=0;i<=3;i++) { for(j=0;j<=5;j++)

{if(i==0||j==0||i==3||j==5)printf(“*”); else printf(“”); }

printf(“\\n”);

} }

* * * * * * * * * * * * * * * *

[题5.94] 下面程序的运行结果是____. #include main() {int i,j;

for(i=4;i>=1;i- -)

{for(j=1;j<=i;j++)putchar(‘#’); for(j=1;j<=4-i;j++) putchar(‘*’); putchar(‘\\n’); } # # # # } # # # * # # * * # * * *

[题5.98]下面程序的功能是计算100至1000之间有多少个数其各位数字之和是5。请填空。

#include main()

{int i,s,k,count=0; for(i=100;i<=1000;i++) { s=0; k=i;

while(【1】){s=s+k;k=【2】;} if(s!=5) 【3】; else count++; }

printf(“%d”,count);

} [1] k [2] k/10 [3] continue

[题5.99]下面程序的功能是从键盘输入的10个整数中,找出第一个能被7整除的数。若找到,打印此数后退出循环;若未找到,打印”notexist”。请填空。 #include void main() { int i,a;

for(i=1;i<=10;i++) {scanf(”%d”,&a);

if(a%7==0) {printf(”%d”,a);【1】; }

if(【2】) printf(“notexist\\n”); }

[1] break [2] i==l1

[题5.100]下面程序的功能是打印100以内个位数为6且能被3整除的所有数。请填空。 #include main() {int i,j; for(i=0;【1】;i++) {j=i*10+6;

if(【2】) continue; printf(“%d”,j); }

} [1] i<=9 [2] j%3!=0

[题5,103] 下面程序的运行结果是____. #include main() {int a,y; a=10;y=10; do

{a+=2;y+=a; if(y>50)break; }while(a=14);

printf(“a=%d y=%d\\n”,a,y); }

a=16 y=54

[题5.104] 下面程序的运行结果是 #include main() {int i=5; do{switch(i%2)

{case 4:i--;break; case 6:i--;continue; }

i- -;i- -; printf(“%d”,i); }while(i>0); } 3 1 -1

5.3 编 程 题

[题5.105]每个苹果0.8元,第一天买2个苹果,第二天开始,每天买前一天的2倍,直至购买的苹果个数达到不超过100的最大值。

编写程序求每天平均花多少钱?

[题5.106]试编程序,找出1至99之间的全部同构数。同构数是这样一组数:它出现在平方数的右边。例如:5是25右边的数,25是625右边的数,5和25都是同构数。

[题5.108]编写程序,从键盘输入6名学生的5门成绩,分别统计出每个学生的平均成绩。

[题5.105] # include main ()

{ int day=0, buy=2; float sum=0.0,ave; do { sum+=0.8*buy; day++; buy*=2; } while (buy<=100); ave=sum/day; printf(“%f”,ave); }

[题5.106] #include main () { int i;

for(i=1; i<100; i++)

if(i*i==i || i*i0==i) printf(“=”,i); } 或

#include main () { int i;

for (i=1; i<100; i++)

if(i*i==i) printf(“=”,i); else printf(“=”,i); }

[题5.108] #include

main( )

{ inti,j;

float g,sum,ave; for(i=1;i<=6;i十+)

{sum=0;

for(j=1;j<=5; j++)

{scanf(“%f”,&g); sum+=g; }

if(i*i0==i)

ave=sum/5;

printf(”NO.%d ave=%5.2f\\n”, i, ave);

} }

键盘输入 95 70 73 67 64

60 65 77 86 90 71 93 63 80 90 87 83 91 95 89 100 93 89 92 85

运行结果:

NO.1 ave=73.80 NO.2 ave=75.60 NO.3 ave=79.40 NO.4 ave=89.00 NO.5 ave=91.80 NO.6 ave=64.40

本文来源:https://www.bwwdw.com/article/ysdw.html

Top