单项选择
号:13334
若有如下语句
int x=3;
do {printf (,,%d\n/,, x-=2) ;}while(! (--x));
则上面程序段o
A、输出的是1
B、输出的是1和-2
C、输出的是3和0
D、是死循环
答案:B
解答:循环变量x初值为3. Do-while是先执行循环体,后判断条件。若条 件为假,循环结束。条件为真,执行循环体。
第一次循环:
循环体printf ("%d\n", x-二2);是输出x的值。而x-二2等价于x=x~2二
3-2 =lo 所以输出l
条件是自增表达式与逻辑非表达式的综合。先计算自增表达式- -x的值是x自减1后的值,为0.自增变量x的值是0.条件! (- -x) = !0=l. 为真。继续执行循环体。
第二次循环
循环体printf (,,%d\n,,> x-=2):是输出x的值。而x-二2等价于x=x~2 =
0-2 =-2o 所以输出-2
条件是白增表达式与逻辑非表达式的综合。先计算--x.白增表达式-
-x的值是洎减1后的值,为-3.自增变量x的值是-3.条件! (- -x) = ! (-3)二0.为假。循环结束。
总结:输出 l-2
号:13353 下面程斥的功能是在输入的一批正整数中求出最大者,输入0结束循环。请 选择填空。
ttincludeO
void main ()
{ int a, max=0;
scanf (”%d", &a);
TOC \o "1-5" \h \z while ()
{ if(max
scanf&a);
}
pri ntfmax);
}
A、a==0
B、a
C、!a==l
D、!a
答案:B
解答:题目中说输入0结束循环。它的另一个意思是输入的变量a的值不是 0时就执行循环或者说a为真就执行循环,为假就结束循环。所以条件是 a!=0 或 a
答案A a==0 a为假,即等于0时,0=0,为真,执行循环体。为真, 即非0,则a二二0的逻辑值为假。结束循环。总结:a为假执行循环体。 为真,结束循环。
答案C ! a二二1非运算符!优先级高于比较运算符二二。所以先计算! a,然后再判断是否和1相等。a为假时,! a值是真,与1恒等,逻辑值 为为真时,! a值是假,与1不等,逻辑值为0.所以它的含义是a为假执 行循环体。为真,结束循环。
答案D。! a的含义,是a为假执行循环体。为真,结束循环。
■@号:13357
与下面程序段等价的是O
for (n二100;n<=200;n++)
{ if(n%3~0) continue;
printf (”%4d", n);
}
A、for (n=100;n<=200;n++) if(n%3==0) printf(〃%4d〃,n);
B、for(n=100;(n%3)&&n<=200;n++) printf("%4d", n);
C^ for (n=100; (n%3) | n<=200;n++) printf (,,%4d,\ n);
D、 for(n=100;n<=200;n++)
{ if (n%3) printf ("%4d", n);
else continue;
答案:D
解答:
程序的含义:
n=100;n<=200;n++o 含义是循环变量n的初值为100,终值为200,步 长为1.
if(n%3==0) continue;含义是若n是3的倍数,则结束此次循环,进 入下一次循环。即后面的printfC%4r,n);不执行。直接执行步长加 1.
若n不是3的倍数,则执行printfC%4r,n);,即输出n的值。且值占四 列,右对齐。
输出100-200中所有不是3的倍数的数。
看四个答案:
答案A if(n%3=0)printf(〃%4d〃,n);的含义是n是3的倍数,则输出。 与源程序的题意不符。
答案B与关系表达式,两边的逻辑值均为1,结果才是真。若有一个 为假,结果为假。(n%3)&&n<=200 n%3为真,同时n<=200为真,则执 行循环体,即输出变量n .n%3为真,说明n不是3的倍数时为真。
(n%3)&&n<=200若n%3为假,或n>200,则条件为假,结束循环。所以,
当n是3的倍数时,就结束。即n二102时,102%3二0,为假,就结束循环。不 符合题意。
答案C (n%3) |n<=200;是或关系表达式。有一个为真,结果为真。 全为假,结果为假。n%3 n是3的倍数时,如n二102, n%3为假,但n二102〈二200 为真。所以102也要输出。不符合题意。
答案D if (n%3) printf ("%4d", n) ; else conti