1、空循环
int y=10;
while (y--) ;
printf(“y=%d\n”, y);
这里while (y–) ;处有分号,为空循环,直到y=0,退出循环,但还要再执行一次y-1,即y=-1
2、逻辑运算
int a=-2, b=0;
while (a++ && ++b) ;
printf(“%d, %d”, a, b);
1: a=-2,b=0-> a=-1 ,b=1 2: a=-1 ,b=1->a=0, b=2 3:
a=0, b=2结果a=0了,while判断此时的a不满足条件了,不会再去管&& 后的++b
因为条件不满足,循环体不会执行++b,所以b的值没有变化。
重点在于while(a++)这句,虽然当a=0的时候,条件已经不满足了,虽然循环体的东西不会执行,但是a++这句还是会执行a=1,
因此最后输出a=1,b=2
3、
int x=8;
for ( ; x>0; x--)//当x>0时,每一次循环完成后x--
{
if (x%3) { printf(“%d,”, x--)//输出x之后,x--; continue; }
printf(“%d,”, --x);//x自减后输出
}
解析一:
第一次执行if语句输出8,然后x自减变成7,然后执行continue;
第二次x自减变成6;不执行if语句,执行printf("%d",–x);先x自减变为5,然后输出;
第三次执行for循环里面X–;x变为4,执行if里面语句,输出4,再自减变为x=3;
第四次执行for循环中的x自减,变为x=2;执行if语句中的输出2,x自减变为1;
第五次执行for循环x自减,x变为0;循环结束。
总的来说,if函数里面输出执行了第一,三,四次,分别输出的8,4,2,for循环里的输出只有第二次执行了,输出为5.
解析二(自己过一遍):
1:x=8->for循环->if->输出8,x=x–=7,执行continue,进行下一次循环
2:此处执行for里的x–(每一次循环结束后x–),此时x=x–=7-1=6,因为此时x%3=6%3=0,不会执行后面的if语句了,直接执行
printf(“%d,”, --x);,此处x先递减后输出,所以输出的x=5
3:继续进行下一次循环,此时此处执行for里的x–,所以x=4,进入if语句,此时x%3=1,执行 printf(“%d,”,
x–);continue语句,此时输出x=4
4:此处执行if里的递减x=x–=3,继续进入下一次循环,进入for循环,执行x–(上次循环结束后才执行x–),此时x=x–=2,进入if语句,此时x%3=2,执行 printf(“%d,”, x–);continue语句,此时输出x=2,执行if里的x–,此时x=1
5:准备进入下一次循环,执行for循环里的x–,此时x=0,条件不满足,退出循环 所以x输出的值为:8、5、4、2