资源描述
第五章 循环
资料来源:
一、选择题:
1.设有程序段则下面描述中正确的是(C )
int k=10;
while (k==0) k=k-1;
A.循环是无限循环 B.while循环执行10次
C.循环体语句一次也不执行 D.循环体语句执行一次
2.设有以下程序段,则( A)。
int x=0,s=0;
while (!x!=0) s+=++x;
printf (“%d”,s);
A.运行程序段后输出0 B.运行程序段后输出1
C.程序段中的控制表达式是非法的 D.程序段执行无限次
3.语句while(!E);中的表达式!E等价于( E! = 0 )。
A.E==0 E!=1 E!=0 E==1
4.下面程序段的运行结果是( B )。
a=1;b=2;c=2;
while(a<b<c) {t=a;a=b;b=t;c――;}
printf (“%d,%d,%d”,a,b,c);
A.1,2,0 B.2,1,0 C.1,2,1 D.2,1,1
5.下面程序段的运行结果是( D )。
x=y=0;
while(x<15) y++,x+=++y;
printf(“%d,%d”,y,x);"
A.20,8 B.20,7 C.6,12 D.8,20
6.下面程序段运行结果是( C)。
int n=0;
while(n++<=2);printf(“%d”,n);
A.2 B.3 C.4 D.有语法错误
7.设有下列程序段,下面描述正确的是( D )。
t=0;
while(printf(“ * ”))
{ t++;
if(t<3) break;
}
A.其中循环控制表达式与0等价 B.其中循环控制表达式与‘0’等价
C.其中循环控制表达式是不合法的 D.以上说法都不对
8.下面程序的功能是将从键盘输入的一对数,由小到大排序输出,当输入一对相同等数时结束循环,请选择填空。
main(B)
{ 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);
}
}
A.!a=b B.a!=b C.a==b D.a=b
9,下面程序的功能是在输入的一批正整数中求出最大者,输入0结束循环,请选择填空。D
main()
{ int a,max=0;
scanf(“%d”.&a);
while(【1】)
{ if(max<a) max=a;
scanf(“%d”,&a);
}
printf(“%d”,max)
}
A.a= =0 B.a C.!a= =1 D.!a
10. 若运行以下程序时,从键盘输入2473<CR>(<CR>表示回车),则下面程序的运行结果是( A )。
#include <stdio.h>
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”);
}
A.668977 B.66896 C.66778777 D.668876
11 C语言中while和do-while循环的主要区别是( A )。
A.do-while的循环体至少无条件执行一次
B.while的循环控制条件比do-while的循环控制条件严格
C.do-while允许从外部转到循环体内
D.do-while的循环体不能是复合语句
12.以下能正确计算1×2×3ו……×10的程序是( C )。
A.do {i=1;s=0; B.do { i=1;s=1;
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{ s=s*i; do{ s=s*i;
i++; i++;
} while(i<=10); } while(i<=10);
13.以下程序段 ( C )。
x=-1;
do
{x=x*x;
}while (!x);
A.是死循环 B.循环执行二次
C.循环执行一次 D.有语法错误
14.以下描述正确的是( C )。
A.语句do-while循环由do开始,用while结束,在while(表达式)后面不能写分号
B.由于do-while循环中循环体语句只能是一条可执行语句,所以循环体内不能使用复合
C.在do-while循环体中,一定要有能使while后面表达式的值变为零(“假”)的操作
D.do-while循环中,根据情况可以省略while
15.若有如下语句
int x=3;
do { printf(“%d\n”,x-=2);} while(!(――x));
则上面程序段是( D )。"
A.输出的是1 B.输出的是1和-2
C.输出的是3和0 D.是死循环
16.下面程序是从键盘输入学号,然后输出学号中百位数字是3的学号,输入0时结束循环。请选择填空。B
#include <stdio.h>
main()
{ long int num;
scanf(“%d”,&num);
do { if( 【1】 ) printf(“%d”,num);
scanf(“%d”,&num);
} while( !num= =0 );
}
A.num%100/10= = 3 B.num/100%10= = 3
C.num%10/10= = 3 D.num/10%10= = 3
17.等比数列的第一项a=1,公比q=2,下面程序的功能是求满足前n项和小于100的最大n,请选择填空。B
main()
{ int a,q,n,sum;
a=1; q=2; n=sum=0;
do { 【1】;
++n; a*=q;
} while(sum<100);
n-= 1;
printf(“%d\n”,n);
}
A.sum+ B.sum+= a C.sum* = a D.a+ =sum
18.下面程序运行的结果是( D )。
main()
{ int y=10;
do {y-- ;}while(--y);
printf(“%d\n”,y--);
}
A.-1 B.1 C.8 D.0
19.若运行以下程序时,从键盘输入Adescriptor<CR>(<CR>表示回车),则下面程序的运行结果是( D )。
#include <stdio.h>
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‘O’:
case‘u’:case‘U’:v1+ =1;
default:v0+ =1;v2+ =1;
}
} while(c!= ‘\n’);
printf(“v0=%d, v1=%d, v2=%d\n”,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
20.下面有关for循环的正确描述是( B )。
A.for循环只能用于循环次数已经确定的情况
B.for循环是先执行循环体语句,后判断表达式
C.在for循环中,不能用break语句跳出循环体
D.for循环的循环体语句中,可以包含多条语句,但必须用花括号括起来
21.对for(表达式1; ;表达式3)可以理解为( B )。
A.for(表达式1;0 ;表达式3)) B.for(表达式1;1 ;表达式3
C.for(表达式1;表达式1;表达式3) D.for(表达式1;表达式3 ;表达式3)
22.若i为整型变量,则以下循环的执行次数是( B )。
for(i=2;i==0;) printf(“%d”,i――);"
A.无限次 B.0次 C.1次 D.2次
23. 以下for循环执行的次数是:( C )。
for(y=0,x=0;(y=123 && x<4);x++)
A. 无限次 B. 循环次数不定 C. 执行4 次 D. 执行3 次
24.以下不是无限循环的语句为( A )。
A.for(y=0,x=1;x>++y;x=i++)i=x; B.for( ; ; x++=i)
C.while(1){x++; } D.for(i=10; ;i--) sum+=I;
25.执行语句for(i=1; i ++<4; ); 后变量i的值是( C )。
A.3 B.4 C.5 D.不定
26.下面程序的功能是计算1至50中是7的倍数的数值之和,请选择填空( A )。
main()
{ int i, sum=0;
for(i=1; i<=50; i++)
if( 【1】 ) sum+=i;
printf(“%d”,sum);
}
A.i%7 =0 B.(int)(i/7)= = i/7
C.(int)i/7 = = i/7 D.i%7 = =0
27.下面程序运行的结果是( D )。
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);
}
}
A.26 68 B.39 81 C.42 84 D.28 70
28. 下面程序运行的结果是( D )。
main()
{ int b,i,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
29.以下正确的描述是( B )。
A. continue语句的作用是结束整个循环的执行
B.只能在循环体内和switch语句体内使用break语句
C.在循环体内使用break语句或continue语句的作用相同
D.从多层循环嵌套中退出时,只能使用goto语句
30.下面程序段( D )。
for(t=1; t<=100; t++)
{ scanf(“%d”,&x);
if(x<0) continue;
printf(“%3d”,t);
}
A.printf函数永远也不执行 B.当x<0时整个循环结束
C.x>=0时什么也不输出 D.最多允许输出100个非负整数
31.下面程序段( B )。
x=3;
do
{ y=x--;
if(!y) { printf(“x”);continue;}
printf(“#”);
} while(1<=x<=2);
A. 输出 ## B. 输出##*
C. 死循环 D. 含有不合法的控制表达式
32.以下描述正确的是( B )。
A.goto语句只能用于退出多层循环 B.switch语句不能出现continue语句
C.只能用continue语句来终止本次循环 D. 在循环中break语句不能独立出现
33.下面程序运行的结果是( C )。
main()
{ int k=0;
char c=’A’;
do
{ swith(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
34.若运行以下程序时,从键盘输入3.6 2.4后回车,则下面程序运行的结果是( B )。
#include(math.h)
main()
{ 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(“%f/n”, y);
}
A.1.500000 B.1.600000 C.2.000000 D.2.400000
35.下面程序运行的结果是( B )。
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);
}
A. x=4 B. x=8 C. x=6 D. x=12
36. 计算1 到 100之间奇数之和和偶数之和,请选择填空B B
main()
{ ini a,b,c,i ;
a=c=0;
for(i=1;i<=100;i++)
{ a+=i;
【1】 ;
c+=b;
printf(“奇数之和=%d\n”, a);
printf(“偶数之和=%d\n”, 【2】c);
}
}
(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
37. 下列程序是从键盘上输入一组字符,统计出大写字母的个数m和小写字母的个数n,并输出m、n中较大者。请填空。C A
main()
{ int m=0,n=0;
char c ;
while(【1】 !=’\n’)
{ if (c>=’A’ && ’Z’) m++;
if (c>=’a’ && ’z’) n++;
}
printf(“%d/n”, m<n ?【2】);
}
(1) A. c=gets B. getchar() C. c=getchar() D. scanf(“%c”,&c);
(2) A. n:m B. m:n C. m:m D.n:n
38.下面程序的功能是把316表示为两个加数的和,使两个加数分别能被13和11整除。请选择填空。D
#include <stdio.h>
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/11 B. k%11 C. k/11==0 D. k%11==0
39. 下面程序段的运行结果是 B 。
for(x=3;x<6;x++) printf((x%2)?(“**%d”):(“##%d\n”),x);
A. **3 B. ##3 C. ##3 D. **3##4
##4 **4 **4##5 **5
**5 ##5
40.下列程序段不是死循环的是 D 。
A. int i=100; B. for(;;); C. int k=0; D. int s=36;
while(1) do{ ++k; }while(k>=0); while(s); --s;
{ i=i%100+1;
if(i>100) break;
}
二、填空题:
1. 当运行以下程序时,从键盘输入right?<CR>(<CR>表示回车),则下面程序的运行结果是( sjhiu )。
#include <stdio.h>
main()
{ char c;
while((c=getchar())!=‘?’)putchar(++c);
}
2.执行下面程序段后,k值是( 36 )。
k=1;n=263;
do {k*=n%10; n/=10;} while(n);
3.下面程序中循环体的执行次数是( 3 )。
a=10;b=0;
do {b+=2;a-=2+b;}while(a>=0);
4.下面程序段的运行结果是( a=-5 )。
i=1;a=0;s=1;
do {a=a+s*i;s=-s;i++; }while(i<=10);
printf(“a=%d”,a);
5.下面程序段是找出整数的所有因子,请填空。
scanf(“%d”,&x);
i=1;
for( ;【i<=x】; )
{ if(x%i==0)printf(“%3d”,i);
i++;
}
6.下面程序的运行结果是( -1 )。
for(a=1;i=-1;-1<=i<1;i++)
{a++;printf(“%2d”,a);}
printf(“%2d”,i);
7.下面程序运行的结果是( 2,5,8,11,14, )。
main()
{ int i=1;
while(i<=15)
if(++i%3 !=2)continue;
else printf(“%d,”,i);
printf(“\n”);
}
8. 下面程序段的运行结果是( ** )。
x=2;
do{ printf(“*”); x--; }while(!x==0);
9. 下面程序段的运行结果是( x=15,y=14 )。
for(y=1;y<10;) y=((x=3*y,x+1),x-1);
printf(“x=%d,y=%d”,x,y);
10. 若for循环用以下形式表示:
for(表达式1;表达式2;表达式3) 循环体语句
则执行语句for(i=0;i<3;i++) printf(“*”);时,表达式1执行(【1】)次,表达式3执行(【3】)次
三、阅读程序:
1. 下面程序的运行结果是 1
2
3 。
main()
{ int num=0;
while(num<=2)
{ num++;
printf(“%d\n”,num);
}
}
2. 下面程序的运行结果是 8 。
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);
}
3. 下面程序的运行结果是 *#*#*#$ 。
main()
{
int i;
for(i=1;i<=5;i++)
{
if(i%2) printf(“*”);
else continue;
printf(“#”);
}
printf(“$\n”);
}
4. 下面程序的运行结果是 s=254 。
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);
}
5. 当运行以下程序时,从键盘键入China#<CR>(<CR>代表回车),则下面程序的运行结果是 5,5 。
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);
}
6. 当运行以下程序时,从键盘输入1 2 3 4 5 -1<CR>(<CR>代表回车),则下面程序的运行结果是 k=14 n=-1 。
#include <stdio.h>
main()
{
int k=0,n;
do{ scanf(“%d”,&n); k+=n; }while(n!=-1);
printf(“k=%d n=%d\n”,k,n);
}
7. 下面程序的运行结果是 x=1,y=20 。
main()
{ int i,x,y;
i=x=y=0;
do{ ++i;
if(i%2!=0) { x=x+i; i++; }
y=y+i++;
}while(i<=7);
printf(“x=%d,y=%d\n”,x,y);
}
8. 下面程序的运行结果是 1,3,7,15,
31,63, 。
main()
{ int a,b,i;
a=1; b=3; i=1;
do{ printf(“%d,%d,”,a,b) ;
a=(b-a) *2+b;
b=(a-b) *2+a;
if(i++%2==0) printf(“\n”);
}while(b<100);
9.下面程序的运行结果是 *
# 。
main()
{ int i;
for(i=1;i<=5;i++)
switch(i%2)
{ case 0: i++; printf(“#”); break;
case 1: i+=2; printf(“*”);
default: printf(“\n”);
}
}
10. 若从键盘输入65 14<CR>(<CR>代表回车符),则下面程序的运行结果是 m=1 。
main()
{ int m,n;
printf(“Enter 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);
}
11. 下面程序的运行结果是 ******
**
**
****** 。
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”);
}
}
12.下面程序的运行结果是 ####
###*
##**
#*** 。
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’);
}
13. 下面程序段的运行结果是 8 。
i=1; s=3;
do{
s+=i++;
if(s%7==0) continue;
else ++i;
}while(s<15);
printf(“%d”,i);
14.下面程序的运行结果是 2581114 。
main()
{ int i=1;
while(i<=15)
if(++i%3!=2) continue;
else printf(“%d”,i);
printf(“\n”);
}
15. 下面程序的运行结果是 i=6,k=4 。
main()
{ int i,j,k=19;
while(i=k-1)
{ k-=3;
if(k%5==0) { i++; continue; }
else if(k<5) break;
i++;
}
printf(“i=%d,k=%d\n”,i,k);
}
17. 下面程序的运行结果是 a=16 y=60 。
main()
{ int a,y;
a=10; y=0;
do { a+=2; y+=a;
if(y>50) break;
}while(a=14);
printf(“a=%d y=%d\n”,a,y);
}
18. 下面程序的运行结果是 3,1,-1, 。
main()
{ int i=5;
do
{ switch(i%2)
{ case 4: i- -; break;
case 6: i- -; continue;
}
i- -; i- -;
printf(“%d,”,i);
} while(i>0);
19.下面程序的运行结果是( 1,-2 )。
main()
{ int y,a;
y=2;a=1;
while(y--!=-1)
{do
{a*=y;a++;} while(y--);
}
printf(“%d,%d”,a,y);
}
四、程序填空:
1.下面程序段是从键盘输入的字符中统计数字字符的个数,用换行符结束循环。请填空。
int n=0
c=getchar();
while(【c!=’\n’】)
{ if(【c>=’0’&&c<=’9’】)n++;
c=getchar();
}
2.下面程序的功能是计算1-3+5-7+…-99+101的值,请填空。
main()
{ int i,t=1,s=0;
for(i=1;i<=101;i+=2)
{【t=i*t】; s=s+t; 【t=((i-1)%2==1)? -1:1】; } /* { s=s+t*i; t=-t; */
printf(“%d\n”,s);
}
3.下面程序的功能是求出数字0至9可以组成多少个没有重复的三位偶数,请填空。
main()
{ int n,i,j,k;
n=0;
for(i=1;i<=9;i++)
for(k=0;k<=8;【k++】)
if(k!=i)
for(j=0;j<=9;j++)
if(【j!=k】)
n++;
printf(“n=%d\n”,n);
}
4.下面程序的功能是从键盘输入的10个整数中,找出第一个能被7整除的数。若找到,打印此数后退出循环;若未找到,打印”not exist”。请填空。
main()
{ int i,a;
for(i=1;i<=10;i++)
{ scanf(“%d”, &&a);
if(a%7==0){ printf(“%d”,a);【break】;}
}
if(【i==11】) printf(“not exist\n”);
}
5. 下面程序的功能是将小写字母变成对应大写字母后的第二个字母。其中y变成A,z变成B。请选择填空。
main()
{
char c;
while((c=getchar())!=‘\n’)
{
if(c>=‘a’&&c<=‘z’)
{
【c=c-30】;
if(c>‘Z’)
【c=c-’Z’】;
}
printf(“%c”,c) ;
}
}
6. 下面程序的功能是计算正整数2345的各位数字平方和,请选择填空。
main()
{
int n,sum=0;
n=2345;
do{
sum=sum+【(n%10)*(n%10)】;
n=【n/10】;
}while(n);
printf(“sum=%d”,sum);
}
7. 下面程序的功能是用公式, 求π的近似值,直到最后一项的小于10- 6为止。请填空。
#include <math.h>
main()
{ long i=1;
【float】 pi=0;
while(i*i<=10e+6) { pi=【pi+1.0/(i*i)】; i++; }
pi=sqrt(6.0*pi);
printf(“pi=%10.6f\n”,pi);
}
8. 有1020个西瓜,第一天卖一半多两个,以后每天卖剩下的一半多两个,问几天以后能卖完?请填空。
main()
{
int day,x1,x2;
day=0; x1=1020;
while(【x1>=0】) { x2=【x1/2-2】; x1=x2; day++; day++;printf("x1=%d ",x1 }
printf(“day=%d\n”,day);
}
9. 下面程序的功能是用”辗转想除法”求两个正整数的最大公约数。请填空。
#include <stdio.h>
main()
{
int r,m,n;
scanf(“%d,%d”,&m,&n);
if(m<n) 【n=n-m】;
r=m%n;
while(r) { m=n;
展开阅读全文