请问这两张图上的运行的具体过程说什么样的

img

img


这两道题有点难道我和朋友了,不是很能理解他们都过程,想了很久,期待解答

img

第一张图:

#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;
}

第二张图

img

首先,第二道题的写法,原始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题一样的道理