写出下列程序的输出结果:

来源:百度知道 编辑:UC知道 时间:2024/05/12 17:58:22
写出下列程序的输出结果:
main()
{int x,y,z;
x=y=z=-1;
++x&&++y||++z;
printf("x=%d\ty=%d\tz=%d\n",x,y,z);
x=y=z=-1;
++x||++y&&++z;
printf("x=%d\ty=%d\tz=%d\n",x,y,z);
x=y=z=-1;
++x&&++y&&++z;
printf("x=%d\ty=%d\tz=%d\n",x,y,z);
getch();
}
问题:1.这个数是怎么得到的?
2.为什么是这个结果,算法是什么?
短路是在什么情况中出现呢?
这个题目不是短路的情况?

三次运行结果如下:
x=0 y=-1 z=0
x=0 y=0 z=-1
x=0 y=-1 z=-1
先说下思想:
在C语言中,
x&&y,如果x的值为0,那么就不执行操作y(即使是个表达式也不执行了。)
x||y,如果x的值为1,那么就不执行操作y(即使是个表达式也不执行了。)
++x和x++又有点区别,前者是先执行自加操作之后再参与到运算中,后者是先参与运算再执行自加。
第一次:
++x&&++y||++z,由于x的值为0了,++y就不执行了,所以y的仍然为-1,而++x&&++y的值为0,因此还要执行++z的操作,所以z的值也为0。
同理,后面的你自己可以找出原因了。