c语言问题 进吧

来源:百度知道 编辑:UC知道 时间:2024/05/26 11:15:11
int x=3;
do {printf("%d\n",x=x-2);}
while (!(--x));这题的答案为什么是1和-2
尤其是(!(--x))这个是什么意思 !0是1 呢么!(-3)是什么东西啊

while(!(--x));
--x,表示先将x的值减一,然后使用x的值
do{}while语句中,先执行一次do语句,所以x=x-2=3-1=1
然后执行while语句,--x以后,x=0
!x=!0=1,表示while语句的表达式是真,因此会进行下一次循环
x=x-2=-2
然后--x,x=-3
!x=!(-3)=0,所以while语句表达式是假,因此循环结束

0是假,非0数是真,!表示取反,假的反是真,真的反是假,所以0的反是1,非0的反是0

do while 语句时先执行do中语句 后进行比较
x=3 do {printf("%d\n",x=x-2);} 这时输出 1 然后while (!(--x)); 看--x是否小于零 这时x=0 继续循环
do {printf("%d\n",x=x-2);} 这时输出 -2
然后while (!(--x)); 这时x=-3 跳出循环