单项选择

号: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