1. 以下关于while循环的描述中,正确的是( )
A. while循环的循环体至少执行一次
B. while循环先执行循环体,再判断条件
C. while循环的条件表达式可以是任意类型
D. while循环的条件表达式只能是关系表达式
正确答案:C
解析:while循环的条件表达式理论上可以是任意类型,C语言会将非0值视为真,0值视为假。while循环先判断条件后执行循环体,因此循环体可能一次都不执行。
2. 以下程序的输出结果是( )
#include <stdio.h>
int main()
{
int i = 5;
while(i--)
printf("%d ", i);
return 0;
}
A. 5 4 3 2 1
B. 4 3 2 1 0
C. 5 4 3 2 1 0
D. 4 3 2 1
正确答案:B
解析:i--是后置递减,先使用i的值进行条件判断,然后再减1。当i=5时,条件为真(5),然后i减为4,输出4;当i=0时,条件为假(0),循环结束。所以输出为4 3 2 1 0。
3. 以下程序段执行后,变量s的值是( )
int i = 1, s = 0;
while(i <= 5)
{
s += i;
i++;
}
正确答案:B
解析:程序计算1+2+3+4+5的值,结果为15。循环执行5次,每次将i的值累加到s中,然后i自增1。
4. 以下程序段的输出结果是( )
int x = 10;
while(x > 0)
{
printf("%d ", x);
x -= 3;
}
A. 10 7 4 1
B. 10 7 4
C. 10 7 4 1 -2
D. 10 7 4 1 -2 ...
正确答案:A
解析:初始x=10,输出10后x减3变为7;输出7后x减3变为4;输出4后x减3变为1;输出1后x减3变为-2,此时x>0为假,循环结束。所以输出为10 7 4 1。
6. 以下程序段的功能是( )
int n, sum = 0;
scanf("%d", &n);
while(n > 0)
{
sum += n % 10;
n /= 10;
}
A. 计算n的阶乘
B. 计算n的各位数字之和
C. 将n逆序输出
D. 判断n是否为素数
正确答案:B
解析:n%10获取n的个位数,累加到sum中;n/10去掉n的个位数。循环直到n为0,实现了计算n的各位数字之和的功能。
7. 以下程序段中循环体的执行次数是( )
int k = 10;
while(k = 0)
k--;
A. 0次
B. 1次
C. 10次
D. 无限次
正确答案:A
解析:注意条件表达式是k=0,这是一个赋值表达式,将0赋给k,然后表达式的结果为0(假),所以循环体一次都不执行。
8. 以下程序段的输出结果是( )
int a = 1, b = 10;
do {
b -= a;
a++;
} while(b-- < 0);
printf("a=%d,b=%d", a, b);
A. a=3,b=0
B. a=2,b=8
C. a=2,b=7
D. a=3,b=-1
正确答案:B
解析:第一次循环:b=10-1=9,a=2;条件判断b--<0,先判断9<0为假,然后b减1变为8。循环结束,输出a=2,b=8。
9. 以下程序段的输出结果是( )
int i = 0, sum = 0;
while(i < 10)
{
if(i % 2 == 0)
sum += i;
i++;
}
printf("%d", sum);
正确答案:A
解析:程序计算0到9之间所有偶数的和:0+2+4+6+8=20。
10. 以下程序段的输出结果是( )
int i = 1;
while(i <= 5)
{
printf("%d ", i * i);
i++;
}
A. 1 2 3 4 5
B. 1 4 9 16 25
C. 1 4 9 16
D. 2 4 6 8 10
正确答案:B
解析:循环变量i从1到5,每次输出i的平方:1, 4, 9, 16, 25。
11. 以下程序段的输出结果是( )
int i = 10;
while(i > 0)
{
if(i % 3 == 0)
printf("%d ", i);
i--;
}
A. 9 6 3
B. 10 7 4 1
C. 9 6 3 0
D. 10 9 8 7 6 5 4 3 2 1
正确答案:A
解析:循环从10递减到1,输出能被3整除的数:9, 6, 3。
12. 以下程序段的输出结果是( )
int i = 1, j = 1;
while(i + j < 10)
{
printf("%d ", i + j);
i++;
j += 2;
}
A. 2 4 6 8
B. 2 5 8
C. 2 4 6
D. 2 5 8 11
正确答案:B
解析:第一次循环:i+j=2<10,输出2,然后i=2,j=3;第二次:i+j=5<10,输出5,然后i=3,j=5;第三次:i+j=8<10,输出8,然后i=4,j=7;第四次:i+j=11>=10,循环结束。所以输出2 5 8。
13. 以下程序段的输出结果是( )
int i = 0;
while(i++ < 5)
printf("%d ", i);
A. 0 1 2 3 4
B. 1 2 3 4 5
C. 0 1 2 3 4 5
D. 1 2 3 4
正确答案:B
解析:i++是后置递增,先使用i的值进行比较,然后i加1。第一次:0<5为真,i变为1,输出1;最后一次:4<5为真,i变为5,输出5;然后5<5为假,循环结束。所以输出1 2 3 4 5。
14. 以下程序段的输出结果是( )
int i = 1, sum = 0;
while(i <= 10)
{
if(i % 2 == 1)
sum += i;
i++;
}
printf("%d", sum);
正确答案:A
解析:程序计算1到10之间所有奇数的和:1+3+5+7+9=25。
15. 以下程序段的输出结果是( )
int i = 5;
while(--i)
printf("%d ", i);
A. 5 4 3 2 1
B. 4 3 2 1
C. 5 4 3 2 1 0
D. 4 3 2 1 0
正确答案:B
解析:--i是前置递减,先减1再使用。第一次:i减为4,条件为真(4),输出4;最后一次:i减为1,条件为真(1),输出1;然后i减为0,条件为假(0),循环结束。所以输出4 3 2 1。
16. 以下程序段的输出结果是( )
int i = 1, j = 1;
while(i < 5)
{
j = j * i;
i++;
}
printf("%d", j);
正确答案:B
解析:程序计算1*2*3*4=24,即4的阶乘。
17. 以下程序段的输出结果是( )
int i = 0;
while(i < 3)
{
int j = 0;
while(j < 2)
{
printf("%d,%d ", i, j);
j++;
}
i++;
}
A. 0,0 0,1 1,0 1,1 2,0 2,1
B. 0,0 1,0 2,0 0,1 1,1 2,1
C. 0,0 0,1 1,0 1,1
D. 0,0 0,1 0,2 1,0 1,1 1,2
正确答案:A
解析:外层循环i从0到2,内层循环j从0到1。对于每个i值,j会遍历0和1。所以输出为:0,0 0,1 1,0 1,1 2,0 2,1。
18. 以下程序段的输出结果是( )
int i = 10, sum = 0;
while(i > 0)
{
if(i % 2 == 0)
sum += i;
i--;
}
printf("%d", sum);
正确答案:B
解析:程序计算10到1之间所有偶数的和:10+8+6+4+2=30。
19. 以下程序段的输出结果是( )
int i = 1;
while(i <= 10)
{
if(i == 5)
break;
printf("%d ", i);
i++;
}
A. 1 2 3 4
B. 1 2 3 4 5
C. 1 2 3 4 5 6 7 8 9 10
D. 1 2 3 4 6 7 8 9 10
正确答案:A
解析:当i等于5时,执行break语句,立即终止循环。所以只输出1 2 3 4。
20. 以下程序段的输出结果是( )
int i = 0;
while(i < 5)
{
i++;
if(i == 3)
continue;
printf("%d ", i);
}
A. 1 2 4 5
B. 1 2 3 4 5
C. 1 2 4
D. 1 2 3 4
正确答案:A
解析:当i等于3时,执行continue语句,跳过本次循环的剩余部分(不输出3),直接进入下一次循环。所以输出1 2 4 5。