那位高手能给我解释一下这段代码是怎样执行的?

来源:百度知道 编辑:UC知道 时间:2024/06/21 05:56:18
#include <stdio.h>
void main()
{ int x=3;
do
{printf("%3d",x-=2);
}
while(!(--x));
}

为什么运行结果是1 -2?

x=3时,首先执行循环体,输出x-2的值,此时的x值为1,所以输出为1,然后进入while条件判断,(--x)的值是0,前面再加个!0就等于1,进入下一个循环,此时x=0;
x=0时,首先执行循环体,输出x-2的值,此时的x值为-2,所以输出为-2,然后进入while条件判断,(--x)的值是-3,加上去非以后就变成0,循环结束!

听好了噢,do..while是先执行后判断的循环
当x=3,执行x-=2有x=x-2=3-2=1,输出1
然后判断!(--x),--x=0,!0=1为真,x变为0,继续循环
x=0时,执行x-=2 有x=x-2=0-2=-2 输出-2
判断!(--x),--x=-1,!(-1)=0,判断为假,退出循环

所以结果为1 -2