内容正文:
专题十 while、do...while、for循环
1、 选择题
1.以下能正确计算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);
答案:C
解析:本题考察do-while循环的执行过程。选项A和选项B,每次循环i均是从1开始,死循环。选项D,s的初始值设置错误。
2.下面程序的运行结果是( )。
#include <stdio.h>
main()
{ int y=10;
do{y--;}
while(--y);
printf("%d
",y--);
}
A. -1
B. 1
C. 8
D. 0
答案:D
解析:本题考察do-while循环的执行过程。当while后表达式为0时,循环结束。
3.若运行以下程序时,从键盘输入3.6 2.4<CR>(<CR>表示回车),则下面程序的运行结果是( )。
#include<math.h>
#include<stdio.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
”,y);
}
A. 500000
B. 1.600000
C. 2.000000
D. 2.400000
答案:B
解析:本题考察while循环的执行过程。当|z|>1.0时,执行x=y;y=z;z=x/y;,否则执行break,循环结束。
4.运行以下程序:
#include <stdio.h>
main( )
{ int m,n,r,s;
scanf(" %d,%d",&m,&n);
s=m*n;
while(n)
{ r=m%n; m=n; n=r;}
printf("%d,%d
" ,m,s/m);}
输入20,30,输出结果是( )【2020春考题】
A.5,120
B.10,60
C.20,30
D.30,20
答案:B
解析:本程序的功能是用辗转相除法,计算最大公约数和最小公倍数。
5.设int a=11,b=2;,执行下述程序段后,变量a和b的值分别是( )
for(;a>b;)
{a/=b++; }
A.1,3
B.1,4
C.2,3
D.2,4
答案:B
解析:本题考察for循环的执行过程,第一次循环a>b为真,执行a/=b++后,a==5,b==3;再判断a>b成立,执行a/=b++,后a为1,b为4;循环条件不成立,循环结束。
6.以下程序段的运行结果是( )【2021春考题】
int a=1,i;
for(i=1;i<4;i++)
{ switch(i)
{ case 0:
case 1:a+=3;
case 2:a+=2; break;
case 3:a+=5;
default:a+=4;
}
}
printf("%d
",a);
A. 6
B. 16
C. 17
D. 32
答案:C
解析:本题考查for循环的执行过程,以及分支语句switch的执行过程。本程序中break是跳出switch结构,无法跳出循环。
二、程序填空题
1.根据公式e=1+1/1!+1/2!+1