int x=3; do { printf(“%3d”, x-=2); }while(!(--x));

2025年03月18日 23:13
有5个网友回答
网友(1):

(1)do 循环,先执行一次循环体,不管循环条件是真是假。
x -= 2; 是 x=x-2,x 等于1
输出 1
(2)进 while 条件判断
--x 是前缀减,需要先减1再使用,变 x=x-1=0
0 为假,非0 为真,所以 返回去 执行循环
(3) x -= 2; x 等于 -2
输出 -2
(4) 进 while 条件判断
--x 是前缀减,需要先减1再使用,变 x=-2-1 得 x=-3
-3 不是0, 不是0 就是 真。
做 !() 非运算, !( 真) 得 假
是假,所以 while 循环 结束。

答,执行本段 输出 1 -2

网友(2):

第一次执行完 printf("%3d",x-=2); 后x=1,打印结果1
然后--x为0,取反后为1,条件为true,继续执行循环
第二次执行完 printf("%3d",x-=2); 后x=-2,打印结果是-2,--x得到-3,取反后是0,循环结束

网友(3):

x=3
x-=2 ——x=1
--x ——x=0
类似进行第二轮循环,共两次;
输出结果:
1-2
第一次--x的值是0,然后while里的条件!(--x)就是1了
第二次时--x是-3,!(--x)就是0了
(0表示假,非零表示真)

网友(4):

int x=3;
do
{
printf(“%3d”, x-=2);
}while(!(--x));

结果应该是:1,-2
第一次循环:x=3-2=1;输出
再执行--x ; x= 0
取反,条件为真 继续循环
第二次循环:x=0-2=-2 输出
再执行--x; x= -3
取反,条件为假,退出循环
注意只要不是为0,负数取反也是真

网友(5):

C第一次执行完 printf("%3d",x-=2); 后x=1,然后--x为0,取反后为1,条件为true,继续执行循环,第二次执行完 printf("%3d",x-=2); 后x=-2,--x得到-3,取反后是0,循环结束