C程序中的循环问题

来源:百度知道 编辑:UC知道 时间:2024/06/16 02:13:18
#include"stdio.h"
void 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-->0&&++x<5如何运算,应怎能样理解?请把具体的循环过程写下来!

z--表示先判断z是否大于0再z减1,++x则是先x加1再判断新的x是否小于5
z(=3)>0→z=3-1=2→x=0+1=1→x<5→y=5-1=4
z(=2)>0→z=2-1=1→x=1+1=2→x<5→y=4-1=3
z(=1)>0→z=1-1=0→x=2+1=3→x<5→y=3-1=2

关键是下一步
重新返回判断while的条件,此时z=0,不再满足大于0,故该运算结果为否(返回0)。对于&&与算符,只要前面的表达式为0,后面不管是1还是0,返回的结果都是0,因此C语言规定,当前一算式结果是0时,直接跳过&&后面的代码不再进行判断,因此++x不被执行,x仍为3.
而z-->0中,z>0被执行过后根据规则z--依然执行,故z=0-1=-1.
由于while的条件不再满足,y=2不变
也就是说,最后执行的几步是:

z(=0)不大于0→while条件语句值返回0→z=0-1=-1→printf...

= =
直接判断啊
只要while的条件为假,也就是说括号内的值为0就推出循环
如果为1就执行循环
while(z-->0&&++x<5),
如题
意思说z-->0 ++x<5
只要其中一个为0就退出循环
又因为&&在C 语言中,如果&&前面为0就不执行&&后面#include"stdio.h"
的表达式了
z=3,x=0时,z-->0,++x<5成立,执行y=y-1 y=4
z=2,x=1时,z-->0,++x<5成立,有y=y-1 y=3
z=1,x=2时,z-->,++x<5成立,有y=y-1 y=2
z=0,x=3时,z--==0为假,不成立,不执行++x<5 所以会有x=3 这是一个容易判断错误的地方
最后输出结果为x=3,y=2,z=-1 为什么会是-1呢 在while判断的时候,执行过一次z-- 所以z=-1

这个还需要解释