藏剑能单刷陆寻吗:这个程序怎么看都没看懂

来源:百度文库 编辑:高校问答 时间:2024/05/05 23:59:27
main()
int x=3;
do{ printf("%3d",x-=2);
}while(!(--x));

运行结果是:
A.1 B.3 0 C.1 -2 D. 死循环。。。

请问最后的while(!(--x)是什么意思啊?

C
第一次循环 输出 1,x=1
--x,x=0,!x,x=1,继续循环
第二次循环 输出 -2,x=-2
--x,x=-3,!x,x=0(非0即1,x=-3时当1来看),退出循环
--x是自减,变量自减1,与x=x-1等效,!是逻辑运算符,去反,非0即1

!号的意思是非,这句话使用的不对
括号里的!号就不对,它是非,不管x是什么值它都会循环,因为当x为非0时,(!(--x))为0,当X值为0时,(!(--x))为1
前几次x值不为0,while(!(--x))的意思就是当括号里的数为0的时候,执行循环,因为!号的原因,前几次的值都是0,而当X值为0的时候while(!(--x))的意思就变成,括号里的值为1的时候执行循环,而死循环时,while(!(--x))的意思又变成当括号里的数为0的时候,执行循环.
因为!的意思是只要不是0的数只要加上!号,那个数就变成0,
是0的话就变成1,
把while(!(--x))改成while(x!=0);