第一张图:
#include<iostream>
using namespace std;
int main(){
int x = 3;
do{
//do-while 循环,do必 执行一次
printf("%d" , x -= 2); //【1】// x = x - 2 = 3 - 2 = 1,输出1不换行
//【3】第二次进来do 的时候,x 已经 = 0了, x = x - 2 = 0 - 2 = -2 ,输出-2不换行
}while(!(--x)); // 【2】--x = 0,!0 就是真,所以这【第一次】次循环判断通过,回到do
// 【4】第二次进这个while 判断, x = -3, -3 是非0 的,所以 -3 原本是 真,所以!(-3) 就为假了,所以判断不满足,就不会再进行下次循环 了【综上输出 1-2】
return 0;
}
第二张图
首先,第二道题的写法,原始while 循环,不管是 while 还是 do-while, 花括号中的内容都叫 循环体,当循环体只有一句 语句的时候,花括号可以省略,
#include<iostream>
using namespace std;
int main(){
int x = 3;
do
printf("%d\t", x = -2); // 到这儿,x重新赋值为 -2
while(!(--x)); // -- x = -2 - 1 = -3 , -3 是一个非零数,为真, 所以!(-3) 为假,不能通过判断,循环结束
return 0;
}
第一题
首先 x=3,进入循环,执行 x-=2,即 x = x - 2,x 等于1,于是 printf 语句输出 1,然后进入判断语句,--x 为前置--,需要先 -1 再判断,此时 x = 0,! 逻辑取反后为真,无法跳出循环,继续进入循环,x = x - 2,x 等于 -2,printf 语句输出 2,再次进入判断语句,--x 后,x 等于 -1,在C语言中,除了0外都是真,对真(-1)逻辑取反,判断条件为假,跳出循环,总之输出了 1 -2
第二题
我感觉他这里想问的是循环结束后,x 的值,显然根据上题可知 x 等于 -2
14题:x初值为3,先运行do,x=x-2即x=1,输出1,while里面--x即x=0,!(0)=1,whle(1)继续运行,do里面x=x-2即-2,输出-2,现在while里面--x即!(-3)=0也就是while(0),条件为假,退出循环,第8题一样的道理