当x=y=z=0时,c语言中++x || ++y && ++z; x ,y,z的值是多少

当x=y=z=0时,c语言中++x || ++y && ++z; x ,y,z的值是多少?为什么?

x为1, y和z不变 为0.

一、 根据运算符优先级 &&要高于||

所以 这个表达式等效于

++x||(++y&&++z)

二、 虽然&&优先级要高,但并不代表要先计算右侧的&&, 而是右侧是一个整体。 

在计算的时候还是从左到右扫描的。 

先计算++x, x先自加为1。

于是等效于

1||(++y&&++z)

三、 根据短路运算,当||左值为1时,右值是1还是0已经不影响最终结果了。所以右值不参运算

于是右侧的++y&&++z不会被执行。 y和z还是原始值0.

四、 综上, 执行后x=1, y=0, z=0.

五、 编写如下程序验证:

#include <stdio.h>
int main()
{
    int x, y, z;
x=y=z=0;
++x||++y&&++z;//原始表达式
printf("%d %d %d\n", x,y,z);//输出三个值。 

return 0;
}

最终输出1 0 0. 验证了结论。 

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-12-04
只有x的值增加了1,其余值没有变
原因是,由运算符优先级可知原表达式等效于
++x || (++y && ++z)
然后又由于||运算符的短路效应,显然子表达式++x的值为非零,所以||右侧的表达式没有必要在去执行
故而只有x自增了1,其余值没有改变本回答被网友采纳
第2个回答  2013-12-04
x,y,z分别为:1 0 0 ;当++x为1之后,||的结果已经确定为1,后面的++y和++z不再执行,所以执行后xyz的值分别为1,0,0本回答被提问者采纳
第3个回答  2013-12-04
x = 1,y =1, z =1

reason: 首先 判断(++i)就会计算++i 得到 1. 然后 返回值1 为真
然后判断(++y && ++z),分别计算++y和++z得到 1和1
第4个回答  2013-12-04
x=1;y=0;z=1;
因为先算x,x自加等于1;或预算遇到1 就是短路运算,所以y不运算=0;因为&运算左边是1所以要计算右边的表达式所以z=1;
总结:或运算遇到0为短路运算;
与运算遇到1为短路运算

当x=y=z=0时,c语言中++x || ++y && ++z; x ,y,z的值是多少
于是右侧的++y&&++z不会被执行。 y和z还是原始值0.四、 综上, 执行后x=1, y=0, z=0.五、 编写如下程序验证:include <stdio.h>int main(){ int x, y, z;x=y=z=0;++x||++y&&++z;\/\/原始表达式printf("%d %d %d\\n", x,y,z);\/\/输出三个值。 return 0;}最终输出1 ...

11.若x=y=z=0,则表达式++x||++y&&++z执行后,x=___,y=___,z=
11.若x=y=z=0,则表达式++x||++y&&++z执行后,x=___1_,y=__1__,z=__0__13.C语言中输入数据时,数据之间的分隔符可以是__空格___和__回车___.14.强制转换类型的运算符的一般形式? (数据类型)(表达式)1.C语言采用(B)方式将源程序转换为二进制的目标代码.A.编辑B.编译C.连接...

int x,y,z;x=y=z=0;++x||++y&&++z;执行后x,y,z的值,要解释。
因为或判断语句的特点是++x为真则后面的不用再计算,整条语句肯定为真,则x输出的是1. y,z仍然都是0

x=y=z=0;++x| |++y&&++z;printf("x=%d y=%d z=d%\\n",x,y,z); 为什么...
++x| |++y&&++z;这表达式相当于 ++x | | (++y&&++z);因为 || 是左结合的,所以先算++x 结果是1 为真 整个表达式结果也是真 根据短路效应 右边是不计算的 所以 x = 1, y = 0, z = 0 短路效应:如果关系表达式左值 足以判断 整个表达式的值 右边的表达式 不计算 比如 对于 || ...

c语言中x=2 y=2 z=0若执行完a=++xll++y&&z++后x y z的值?
逻辑运算符从左向右计算,当左边的结果计算出来之后,已经可以预知整个表达式的结果时,后面将不会计算。因此++x || ++y,即3 || ++y,真|| ++y,结果已经为真。所以++y将不会计算。真 && z++,即真 && 假。所以x和z经过了自增,y没有经过。最终结果就是3 2 1。

c语言逻辑运算 int x,y,z; x=y=z=0;++x||++y||++z;为什么结果等于 x=...
||运算符只要第一项为真之后的几项都不会计算,所以++y,++z都没有执行

x=y=z=0;++xII++y&&++z;的结果为什么是x=1;y=0;z=0
使得x=0,y=0,z=0,接着执行++x||++y&&++z,由于&&的运算顺序与||一样,因此按照从左到右的顺序算++x,++x为1,因此整个条件表达式肯定为真,C++语言就规定只算到肯定能判断条件表达式的真假,以提高运行效率,所以后面++y&&++z就不算了。因此只有++x被运行过了,所以最后结果为1,0,0。

int x=0,y=0,z=0;则表达式k=++x||++y&&++z的值是多少??
表达式k=++x||++y&&++z等效于 k=(++x) || (++y&&++z)k值为1,x值为1,y和z值仍为0

c语言 ++x||++y&&++z
才需要继续执行后一项的值,你所写的程序执行过程如下:由于++x=1为真,则或运算的表达式为真,则其后的++y不执行,所以到此x=1,y=0;继续执行后面的与运算,由于前面的++x||++y表达式为真,不能够决定整个与运算表达式是否为1,则继续执行++z,所以有z=1,所以该表达式的值为1。。。

...的值为___。 int x,y,z; x=y=z=0; ++x || ++y && ++z;
0 ++x是1 ||的运算方式是只要前面为1,则后面不进行运算,结果肯定唯一 ++y && ++z这些实质上是没有运行的语句

相似回答