C语言题目一个,问输出结果是什么。正确答案是1,-2,但是我读这个程序的结果是死循环,求解。

2025-03-23 03:52:38
推荐回答(5个)
回答1:

你好,我可以告诉你的是,这个程序的答案是 1 -2 ,原因是第一次是你所说的0然后取非继续做再输出一个数-2,但是,到while语句中的时候--X就变成了-3, -3取非不就是0吗,然后循环条件不就是假,假的还用继续做吗,根本就不是死循环,你犯的是一个相当然的错,记住,学C一定不能想当然,会吃苦头的,我自己以前就一直会想当然,结果成绩考不过那些脑子不如我的,只要你踏实了,C一定不是问题的。祝福你!

回答2:

while里面是对 --x进行取反后再判断的,所以,只有当--x等0的时候才会循环,也就是第一次无条件运行,和第二次运行时为0输出1 -2.其他情况因为--x为非0,所以取反后就是0,结束循环

回答3:

--x 是先引用这个式子的值 然后再计算x的值

所以程序分析如下:
do
{
printf("%3d", 3-2); //x=3-2=1; 输出为1
} while(!(--x)); //此时--x的值为0 x值为0 !(--x)表达式值为false

do
{
printf("%3d", 0-2); //x=0-2=-2; 输出为-2
} while(!(--x)); //此时--x的值为-3 x值为-3 !(--x)表达式值为true
所以程序执行完了

回答4:

while(!(-3))实际上是while(!(非0)),结果是while(0),退出循环。
while只判断0和非0,没有其他整数。

回答5:

并非死循环,当程序一开始执行x= 3 - 2, x = 1; 然后执行到while x为前置-- 所以x的值先-1 然后再进行判断 此时的x为0 所以当判断x的值时 x为0 即不满足条件 退出循环