第4章循环结构
一、选择题
1、有以下程序段
int k=0;
while(k=1)k++;
while 循环执行的次数是( A)
A) 无限次B) 有语法错,不能执行
C) 一次也不执行D) 执行1次
2、t为int类型,进入下面的循环之前,t的值为0
while( t=1)
{ …… }
则以下叙述中正确的是( B)
A) 循环控制表达式的值为0
B) 循环控制表达式的值为1
C) 循环控制表达式不合法
D) 以上说法都不对
3、在C程序中,与while(m)中表达式m完全等价的是(B )
A) m==0 B) m!=0 C) m==1 D) m!=1
4、有以下程序,程序运行后的输出结果是(C )。
main()
{int i=1,sum=0;
while(i<=4)
{
sum=sum+i;
i=i+1;
}
printf(“%d\n”,sum);}
A)4 B)5 C)10 D)死循环
5、有以下程序,程序运行后的输出结果是(D )。
main()
{ int i=1,sum=0;
while(i<=4)
sum=sum+i;
i=i+1;
printf(“%d\n”,sum);
}
A)4 B)5 C)10 D)死循环
6、有如下程序
main(){
int n=9;
while(n>6){n--;printf(“%d”,n);}
}
该程序段的输出结果是(B)
A) 987 B) 876 C) 8765 D) 9876
7、以下程序的输出结果是( B )
main()
{ int num= 0;
while(num<=2)
{ num++; printf(“%d\n”,num);}
}
A) 1 B) 1 C)1 D) l
2 2 2
3 3
4
8、有以下程序,若运行时输入3.6 2.4<回车>,则输出的结果是( B)。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
9、执行以下程序段时
x=-1;
do
{ x=x*x; }
while(! x);
则下面描述正确的是(A )
A) 循环体将执行一次B) 循环体将执行两次
C) 循环体将执行无限次D) 系统将提示有语法错误
10、有以下程序段其输出结果是(C )
int x=3;
do
{ printf("%d",x-=2); }
while (!(--x));
A) 1 B) 3 0 C) 1 -2D) 死循环
11、有如下程序
main(){
int x=23;
do
{
printf(“%d”,x);
x--;
}while(!x);
}
该程序的执行结果是(B )
A) 321 B) 23 C) 不输出任何内容D) 陷入死循环
12、有以下程序段
int n=0,p;
do{scanf(“%d”,&p);n++;}while(p!=12345 &&n<3);
此处do—while循环的结束条件是( D)
A) P的值不等于12345并且n的值小于3
B) P的值等于12345并且n的值大于等于3
C) P的值不等于12345或者n的值小于3
D) P的值等于12345或者n的值大于等于3
13、以下不构成无限循环的语句或语句组是(A)
A) n=0;
do {++n;}while(n<0);
B) n=0;
while(1){n++;}
C) n=10;
while(n);{n--;}
D) for(n=0,i=1; ;i++)n+=i;
14、若i为整型变量,则以下循环执行的次数是(B)
for(i=2;i= =0;) printf(“%d”,i--);
A)无限次B)0次C)1次D)2次
15、执行语句for(i=1;i++<4;)后,变量i的值是(C)
A) 3 B) 4 C) 5 D) 不定
16、有以下程序
main()
{
int y=9 ;
for( ; y>0 ; y--)
if(y%3==0 ) printf("%d" , --y) ;
}
程序的运行结果是(C)
A) 741 B)963 C)852 D)875421
17、以下程序执行后sum的值是( C)
A)15 B)14 C) 不确定D)0
main()
{ int i , sum;
for(i=1;i<6;i++) sum+=i;
printf(“%d\n”,sum);
}
18、有如下程序
{ int i,sum=0;
for(i=1;i<=3;sum++) sum+=i;
printf(“%d\n”,sum);
}
该程序的执行结果是(C)
A) 6 B) 3 C) 死循环D) 0
19、执行语句for(i=3;i>0;i--);i--;后,变量i的值是(C )
A)0 B)10 C)-1 D)1
20、执行下面程序片段的结果是(A )。
int x;
for(x=3;x<6;x++)
printf((x%2)?(“**%d”):(”##%d\n”),x);
A)**3##4 B)##3
**5 **4##5
C)##3**4 D)**3##4
**5 ##5
21、有以下程序,执行后输出的结果是(A )。
main()
{ int i;
for(i=0;i<3;i++)
switch(i)
{ case 1: printf("%d",i);
case 2: printf("%d",i);
default: printf("%d",i);
}
}
A) 011122 B) 012 C) 012020 D) 120
22、有以下程序,程序运行后的输出结果是(C )。
main()
{ int k=4,n=0;
for( ; n { n++; if(n%3!=0) continue; k--; } printf("%d,%d\n",k,n); } A)1,1 B)2,2 C)3,3 D)4,4 23、设变量已正确定义,则以下能正确计算f = n!的程序段是(D ) A) f=0 ; for(i=1;i<=n;i++) f*=i; B) f=1; for(i=1;i for(i=n;i>1;i++) f*=i; D) f=1; for(i=n;i>=2;i--) f*=i; 24、执行下面程序片段的结果是(B )。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); } A)7 B)8 C)9 D)10 25、以下程序的输出结果是( B )。main() { int i=0,a=0; while(i<20) { for(;;) { if((i%10)==0) break; else i--; } i+=11; a+=i; } printf("%d\n",a); } A) 21 B) 32 C) 33 D) 11 26、以下程序的输出结果是(A ) main() { int i,j,x=0; for(i=1;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 27、有以下程序 main() { int i,j; for(i=3;i>=1;i--) { for(j=1;j<=2;j++) printf("%d",i+j); printf("\n ") ; } } 程序的运行结果是(D) A) 2 3 4 B)4 3 2 C)2 3 D)4 5 3 4 5 5 4 3 3 4 3 4 4 5 2 3 28、有以下程序 main() { int i=5; do { if(i%3==1) if(i%5==2) { printf("*%d",i); break; } i++; } while(i!=0); printf("\n"); } 程序的运行结果是(A) A) *7 B)*3*5 C)*5 D)*2*6 29、以下程序的结果是(A) main() { int n; for(n=1; ; ) {if(++n%2==0) continue; if(++n%3==0) break; } printf("n=%d",n); } A)n=6 B)n=5 C)n=4 D)死循环 30、以下叙述中正确的是(C) A)break语句只能用于switch语句题中 B)continue语句的作用是:使程序的执行流程跳出包含它的所有循环 C)break 语句只能用在循环体内和switch语句体内 D)在循环体内使用break语句和continue语句的作用相同 二、程序阅读题(共10题) 1、以下程序运行后的输出结果是52 。 main() { int i=10, j=0; do { j=j+i; i--; }while(i>2); printf(“%d\n”,j); } 2、设有以下程序: main() { int n1,n2; scanf(“%d”,&n2); while(n2!=0) { n1=n2%10; n2=n2/10; printf(“%d”,n1); } } 程序运行后,如果从键盘上输入1298;则输出结果为8921 。 3、以下程序的输出结果是5。 main() {int s,i; for(s=0,i=1;i<3;i++,s+=i); printf("%d\n",s); } 4、阅读下面程序,程序的结果是2,1,0 。 main() {int i=7; for(i=2;i>0;i--) printf(”%d,”,i); printf(”%d”,i);} 5、阅读下面程序,程序的结果是14,4。 main() { int i,j,m=0; for(i=2;i<=10;i+=4) for(j=3;j<=4;j++) {m++;i++;} printf("%d,%d",i,m);} 6、阅读下面程序,程序的结果是1978。 main() long s=0,t=0; for(j=0;j t=t*10+a; s=t; for(j=1;j {t=t/10; s=s-t;} printf(”%d”,s); } 7、以下程序运行后的输出结果是0918273645 main() { char c1,c2; for(c1='0',c2='9';c1 printf("%c%c",c1,c2); printf("\n"); } 8、以下程序的输出结果是 5 。 main() { int s,i; for(s=0,i=1;i<3;i++,s+=i); printf("%d\n",s); } 9、执行以下程序后,输出'#'号的个数是 6 。 main() { int i,j; for(i=1; i<5; i++) for(j=2; j<=i; j++) putchar('#'); } 10、以下程序的输出结果是x=4 main() { int i,j,x=0; for(i=1;i<2;i++) { x++; for(j=0;j<=3;j++ ) { if(j%2) continue; x++;} x++;} printf(“x=%d\n”,x);} 三、程序填空题 1、以下程序的功能是计算:m=1-2+3-4+…+9-10,并输出结果。请填空。main( ) scanf(“%d”,&n); for(i=1; i<=n; i++) { m+=i*f; f= -f ; } printf(“m=%d”,m) } 2、以下程序的功能是计算s=1+1/2!+1/3 !+1/4 !+…+1/n! ,请填空。main( ) { double s=0.0,fac=1.0; int i; int n; scanf(“%d”,&n); for(i=1,i<=n;i++) { fac=fac * 1.0/i ; s=s+fac; } printf(“s=%lf”,s); } 3、以下程序的功能是计算:s=1+12+123+1234+12345。请填空。 main() { int t=0,s=0,i; for( i=1; i<=5; i++) { t=i+ t*10 ; s=s+t; } printf("s=%d\n",s); } 4、要使以下程序段输出10个整数,请填入一个整数。 for(i=0;i<= 18 ;printf(“%d\n”,i+=2)); 5、以下函数的功能是:求x的y次方,请填空。 double fun( double x, int y) { int i; double z; for(i=1, z=x; i return z; } 6、以下程序的功能是根据以下近似公式求π值: (π*π)/6=1+1/(2*2)+1/(3*3)+..+1/(n*n) 现在请你在下面的函数中填空,完成求π的功能。 main(){ double s=0.0; long i,n; scanf(“%ld”,&n); for(i=1;i<=n;i++) s=s+ 1.0/(i*i) ; printf(“%lf”,sqrt(6*s)); 7、以下用来输出两整数M和N之间的所有素数(质数),请填空,使程序能正确运行。 #define M 4 #define N 30 main() { int i, j, k, s=0; for(i=M; i<= N ; i++) { for(j=2; j< i ; j++) if(i%j== 0 ) break; if(j>=i) { printf("%5d", i); s=s+1; if( s%5==0 ) printf("\n"); } } printf("\n");} 8、以下程序实现:从键盘输入一位整数,计算其各位数字之和。比如输入整数31421,则打印结果为11。请填空。 main(){ int i,sum=0,a; scanf("%d",&i); while(i>0){ a= i%10 ; sum+=a; i= i/10 ; } printf("%d\n",sum); } 9、以下程序实现:计算1~10之间(不含10)的奇数之和以及偶数之和 main() { int a,b,i; a=b=0; for(i=0;i<10;i+=2) { a= a+i ; b= b+i+1 ; } printf("偶数为:%d,奇数和为:%d\n",a,b); } 10、以下程序的功能是:输出100以内(不含100)能被3整除且个位数为6的所有整数,请填空。 main() int i,j; for(i=0; i<10 ;i++) { j=i*10+6; if( j%3==0 ) continue; printf(“%d ”,j); } } 四、编程题 1、写一个程序,程序的功能是:从键盘输入一个整数m,输出1到m(含m)能被7或11 整除的所有整数,并计算出这些数的个数。例如:如果m为50,则程序输出7、11、14、21、2 2、28、3 3、35、42、4 4、49共11个数。 2、计算100到1000间有多少个数其各位数字之和是5。 3、从键盘输入整数n,输出1+3+5+7+…前n项的和(输入的n<=10) 4、编写程序,实现如下图形 1 12 123 1234 12345 5、打印100-999以内所有满足条件的数。条件为,这个数等于其个位数,十位数,百位数立方和,如153=1*1*1+5*5*5+3*3*3