C高手们进来呀

来源:百度知道 编辑:UC知道 时间:2024/06/09 20:02:32
main()
{
int x=0,y=5,z=3;
while(z-->0&&++x<5) y=y-1;
printf("%d,%d,%d\n",x,y,z);
}
请解释一下,答案为:3,2,-1

在此循环条件中while(z-->0&&++x<5),你可以只用考虑 z--;因为z--的条件最先达到条件极限z-->0;当循环3次后,z--=<0;而++x=3<5还满足,在&&中以小条件为准,所以循环次数为3次。
所以分析如下:
x=0,y=5,z=3;
第一次z--=3>0;++x=1<5,运行后z=2,x=1;条件满足执行循环体,
第二次z--=2>0;++x=2<5,运行后z=1,x=2;条件满足执行循环体,
第三次z--=1>0;++x=3<5,运行后z=0,x=3;条件满足执行循环体,
第四次z--=0>0不成立,此句运行后z=-1,退出循环,此时
z=-1,x=3,y被减去了三次1即y=2;
此中应该理解--,++在变量前舆在变量后的区别,一个是先自增自减,一个是后自增自减。

第一次循环 z-->0 成立,z=2; ++x<5 成立, 1 < 5 ,x=1, y=4;
2 : z-->0 成立 , z=1; x= 2; y=3
3 : z-->0 成立 ,z=0; x=3; y=2;
4 : z-->0 不成立 ,z= -1; 因为是 && ,z-->0 为假,所以++x<5 将不会执行