一个二级题,高手来讲讲

来源:百度知道 编辑:UC知道 时间:2024/05/15 14:12:42
#include<stdio.h>
#include<string.h>
main()
{ int x=1,y=1,z=1;
(++x)||(++y)&&(++z);
z=x+y;
printf("%d",z);
getch();
}
为什么输出为3呢?最后x和y不是都变成2了吗?

(++x)||(++y)&&(++z);
算完++x后遇到||相当于 真||
所以不管||后面是真还是假 这个命题已经为真了
所以计算机就不去算后面的(++y)&&(++z);了

这个程序的过程:
1、声明、赋值int x=1,y=1,z=1;
2、逻辑判断:||运算是(a||b&&c)当a或b中至少有一个为真,那么该值就为真,后面&&c的就不进行操作了。
那么此时x=2,y,z没有进行操作,y=1,z=1;
3、重新赋值:z=x+y;
4、打印z=x+y ====>z=2+1=3

不明白再问吧

++x,先让x+1,变成2
因为2是真,所以||表达式的结果肯定是真,||右边的表达式将不会计算,这是||运算时候的短路法则
所以y还是1,z还是1
z=x+y=2+1=3

哦!同意二楼~~
x加了一,y不变!z被重新赋值~

(++x)||(++y)&&(++z);
执行这句时,x变为2,y,z不变。因为||语句中,当第一个为真时不执行后面的。x为2,即为真,所以(++y)&&(++z)不执行。

++x,即先让x=1,然后x+1=2,y也一样