6 .已知int x=1,y;执行下述语句后变量x的值是_________。 ( B ) y=++x>5&&++x<10; A. 1 B. 2 C. 3 D. 4

这是一题C语言的试题,但在VC环境下运行的结果是2,请问为什么呢?为何第二个++x没有执行?即使加上括号还是不执行,为何???
加上括号还是不执行,为何??难道括号不优先?y=++x>5&&(++x)<10,还是得到结果为2,这又如何解释呐???

你要明白&&这个的含义以及运行机制,&&操作,首先计算它前面的表达式:如果前面的表达式满足,则计算&&后面的表达式看满足否。如果前面的表达式不满足,则绝对不可能运行后面的表达式。因此,上述题首先执行 ++x>5,发现++x后x=2<5,因此前面不满足,那么整个条件不满足,因此不可能执行 ++x<10这个语句,因此x=2追问

谢谢你的解答,但加上括号还是不执行,为何??难道括号不优先?即运行y=++x>5&&(++x)<10,后还是得到x结果为2,这又如何解释呐???

追答

y=++x>5&&(++x)<10

并不是说你加上括号就会先执行它的,加上括号只是说明++这个符号是和x结合在一起的。

如果按你这样说加了括号后就限制性,那么一个很长的语句的执行会很混乱。
&&这个操作符的 运行机制 就是首先执行它前面的语句,在满足条件的情况下然后执行后面的语句,但是前后语句内部怎么执行他不管~
又比如||操作的机制是:首先执行前面的语句,如果前面的语句为真,那么绝对不会执行后面的语句。如果前面语句为假,那么才会执行后面的语句。

我写个语句给你看看 x+++y ,如果我写这个语句你能知道他到底要干嘛吗?我可以理解成(x++)+y,也可以理解成x+(++y),这两者执行的结果是不同的,其实加括号主要是为了让程序没有歧义,说明你的那些操作是一个 整体(不要拆散他们),并不是说在计算机内运行的时候会首先运行

追问

x+++y 这要看不同的编译系统了,TC和VC以及DVC是不一样的,但均可以解释,你的解答我基本理解了,再学习再研究吧!谢谢你的耐心解释!!!

温馨提示:内容为网友见解,仅供参考
第1个回答  2011-07-04
&&和||都是短路运算符,&&运算符是前面的表达式值为0的时候后面的表达式将不执行。||运算符是前面的表达值值为1后面的表达式就不执行。拿&&运算符说,它本身的意思是前后两个表达式都成立才行。按顺序先算前面的表达式,如果这个表达式不成立,那么后面的表达式也就没有算的意义了,所以后面的表达式不执行了。 这里的++x>5即2>5值为0,后面的++x<10就没有执行追问

短路运算?就是括号也不优先了?就是基本的C语言规则也不遵循了???

追答

括号的优先只是相对于表达式。++x>5&&++x5和++x5,发现这个表达式不成立,后面的++x<10就被忽略了

第2个回答  2011-07-04
因为你的第一个条件(即y=++x>5)就不满足,对于“且&&”来说,只有第一个满足才会判断第二个条件,因为只要有一个不满足就没有继续判断的必要了,整个条件(y=++x>5&&++x<10)视为不成立。追问

谢谢你的解答,但加上括号还是不执行,为何??难道括号不优先?即运行y=++x>5&&(++x)<10,后还是得到x结果为2,这又如何解释呐???

追答

只判断到y=++x>5,&&后面的语句程序是不会“看”的,因为执行了也没用,明白了吗?

第3个回答  2011-07-04
&& 前面部分的值为假,因此不需要判断后面部分是否为真,整个值都是假,因此不会执行。
第4个回答  2011-07-04
后面的答案很多,主要还是&&的理解;

...x=1,y;执行语句y=++x>5&&++x<10后变量x的值是() A.1 B.2 C.3 D...
是2了,因为x自加一次变成2,赋给y,y=2,所以(y=++x)的值为2,所以(y=++x>5)为0,即为假,所以不再执行后面的++x<10,所以x最后为2‘;

C语言基础题,帮忙做下 谢谢
26 已知int x=1,y;执行下述语句后变量x的值是__C_。y=++x>5&&++x<10;A) 1 B) 2 C) 3 D) 4 27 为判断字符变量c的值不是数字也不是字母时,应采用下述表达式___。A) c<=48||c>=57&&c<=65||c>=90&&c<=97||c>=122 B) !(c<=48||c>=57&&c<=65||c>=...

已知int x=1,y; 执行 y=++x>5&&++x<10;语句后,x的值为多少呢? 谢谢高 ...
首先要明白++x和x++的区别,++x是变量x先进行自加,运算结果再参与运算,x++是x先参与运算,之后变量再自加,明白这个这个问题就不难了。之后再看表达式,Y是一个boolean值,是两个表达式&&之后的结果,对&&操作符来说,如果前面的表达式为真,再运算后面的表达式,两者取与运算,如果前面的表达式为假...

已知int x=1;,则执行语句x>5||++x;后,变量x的值是
因为在或运算里,只要有一个真就退出,所以如果x>5的话实际不会执行后面的++x,不过因为x=1<5,所以还是得执行后面的++x,因此x的值为2

已知int x=1;,则执行语句x>5&&++x;后,变量x的值是__25__ A)4_百度...
这是c语言的短路原理,&&符号两边的表达式同时成立,该逻辑表达式成立,现在x>5的关系表达式不成立,逻辑运算符&&右边的表达式不做,故++x不执行,x维持原值。选D 1

下述语句执行后,变量k的值是( ) 。 int k=1; while (k++<10); A.10...
这是一个循环语句,退出它的条件k++<10,表达式k++为后缀自加,即先判定k<10然后k加1,故k为10时不满足k<10,然后再自加1,所以k=11(选择B)。

下述语句执行后,变量k的值是( )。 int k=1; while (k++<10); A. 10...
正确答案 A 当k=10时,还要执行一遍while (k++<10);这时k++<10这一条件先返回k的值10与10做比较,再把k加1,比较的结果为假,循环结束,k的值为11

已知intx=1,y=2,z=1;表达式"(++x)+(y++)+(z++)的值是4,不是6
这题应该 等于 5 ; ++x 是先+1在取x的值,所以 (++x)=2 ;y++是先取y值再+1,(y++) =2,z++是先取z值再+1,(z++) = 2 。 放在程序里运行一下,分别用 n、m、o 变量对应 (++x)、(y++)、(z++) 断点调试,一目了然。

C语言……
5) C 将表达式变形 x=x%(y+z) 代数数值运算后为5 6) C 按照对应格式输入 7) D 格式为 lf而且 输入时不能6.2 控制输入小数位 二、程序阅读题:1 A 原因:输出列表里为一个逗号表达式整个表达式值为最后一个表达式的值 f!=0为真c=='A' 为假 &&后 所以为0 2 B 因为if语句中条...

执行下述语句后,a,b,m,n变量的值分别为? int a=1, b=2, c=3, d=4...
a=1 。 因为 a>b 不正确,所以为0, 故m=0 ,&&与运算: 一个为0 整个"(m=a>b)&&(n=C>d)"为0 ,||为或运算:++a是a先自增然后参与运算,b--是b先参与运算然后再自增,故++a==b--为真,即( m=a>b ) && ( n =c>d ) || ++a = = b--为真,故a=1 ...

相似回答