已知int a=5,b=5; 则表达式: ++a>b?a:b-->++a?++b:a的值为6。

作者&投稿:山富 (若有异议请与网页底部的电邮联系)
已知int a=5,b=5;则表达式:++a>b?a:b-->++a?++b:a的值为~

答案是7,整个式子按先后级是从左往右计算的,所以++a>b?a:b--是第一个式子,这个式子的值就是:a=5,所以++a之后a=6,++a这个式子的值也是6,所以他大于5是正确的,所以是第一个答案,而此时,a=6,所以这整个个式子的答案是6,同时此时b=5,因此把这前面整个式子设为c的话,c=6,即全部式子可以写成:c>++a?++b:a,这样的话按照前面的分析,一样来做,此时a=6,执行++a之后a=7,++a这个式子也是7,++b这个式子是6,这样就变成了6>7?6:7所以,最后答案是7

结果为7。
条件表达式为:表达式1?表达式2:表达式3。先求解表达式1,若其值为真(非0)则将表达式2的值作为整个表达式的取值,否则(表达式1的值为0)将表达式3的值作为整个表达式的取值。
先判断++a==b--是否为真,++a表达的值为6,b--表达的值为6,两者相等,为真。则将表达式++a的值作为整个表达式的取值,因为在此之前a的值已经自增变成6,再进行++a表达式的值为7。

扩展资料:
1、优先级
条件运算符优先级高于赋值、逗号运算符,低于其他运算符
例如:
⑴ m<n ? x : a+3
等价于:(m<n) ?(x) :(a+3)
⑵ a++>=10 && b-->20 ? a : b
等价于:(a++>=10 && b-->20) ? a : b
2、结合性
条件运算符具有右结合性
当一个表达式中出现多个条件运算符时,应该将位于最右边的问号与离它最近的冒号配对,并按这一原则正确区分各条件运算符的运算对象。
例如:
w<x ? x+w : x<y ? x : y
与 w<x ? x+w : ( x<y ? x : y) 等价
与 (w<x ? x+w : x<y) ? x : y 不等价
参考资料:
百度百科-条件运算符

已知int a=5,b=5; 则表达式: ++a>b?a:b-->++a?++b:a的值为6。
这个题有两个问号表达式,而且还有嵌套现象,所以它的关键,是把表达式的计算过程(先后顺序)搞清楚,是按下面
(1)(++a>b?a:b--)>(++a?++b:a)
(2)((++a>b?a:b--)>++a)?++b:a
(3)++a>b?a:(b-->++a?++b:a)
哪一个计算的问题。
第①种情况,显然把>放到了最后计算,而因为>的优先级比?:的优先级高,所以,这个顺序是错误的。
第②种情况,是在确定第一个问号表达式的【表达式3】时,没有考虑到b--后面的>号,那是优先级比问号表达式高的运算,所以,它也是错误的。
第③种情况,把a:后面的一个整体(一个完整的问号表达式),作为前一个问号表达式的【表达式3】,这才符合优先规定。
但是,实际上并没有括号,你只能理解为:
++a > b ? a: b-->++a?++b:a
写的离远一点,只是为了方便看它的结构,
实际运行时,先算前一个问号表达式:
++a > b ? ==> ++5>5? ==> 6>5? 显然是成立的,也就是,接下来,会执行【表达式2】,并把【表达式2】的值赋给x:
a: b-->++a?++b:a
这时,表达式2只有一个a,也就把a的值(6)赋给x了。
后面的 b-->++a?++b:a呢?将不会运行,这是c语言设计者的聪明之处,用不到的表达式不会去计算它的值。
所以,x的值为6。
如有不明白之处请留言追问。

先看一下这些运算符号的优先级

那么按照优先级进行运算的话,正确的运算顺序应该是

(++a>b)?a:(b-->++a?++b:a)

++a=6 ,a=6,b=5 所以 ++a>b为真 

三目运算符是从右往左进行运算的,但是由于条件不满足所以并不会执行

(b-->++a?++b:a)

所以最后表达式的值为 6



最後值为7,这是一个if语句,就是
int a=5,b=6;
if(++a==b--) ++a;
else --b;
++ar的规则是先运算,所以括号中左值++a=6,a=6;
==的优先级低过--,所以先计算b--
b--的规则是先赋值,所以括号中右值b--=6,b=5;
左值6==右值6,即条件为真,执行++a,因为a值已是6, 所以加1操作後,
结果为 7

这是一个三元嵌套的问题,必须考虑把它转换成等价的if else语句。我不是很懂C,但原理是相同的。
等价的if else应该是这样的。
if(++a>b){
//上面++a改变了a的值
a=6
}else{
//由于条件不满足所有不会执行后面的代码
if(b-->++a){
++b
}else{
//输出a
a=6
}
}
所以最后 a=6,是因为后面压根就没有执行。

n的值仍然为2,没有改变!
过程:
先计算a>b,值为0,赋给m的值为0,表达式m=a>b的值也是0。
对于&&逻辑运算,不管后面(n=c>d)的值如何,都不影响(m=a>b)&&(n=c>d)的最终结果,因此,C语言不再对表达式n=c>d进行计算。因而n的值没有改变!!


int a=5;a++ 此处表达式a++的值是多少, 我知道是5,但不知道为什
a++这个表达式是执行++之前的a的值,没有其他更深层的原理,因为这是语言设计者定义的;++a是执行++之后的a的值,同样也是语言设计者定义的;大概理解为++在前表示先执行了++,++在后表示后执行了++

int a=5; void fun(int b) { static int a=10; a+=b++; printf("%d...
假如a=1;b=1;a+=b++先右后左 b++=b+1=2 a=a+(b++)=1+2=3

若a是int型变量,且a = 5,则下面表达式的值为:___。 ( a + 100 ) %...
1.( a + 100 ) % 2 + a\/2 = (5+100)%2 + 5\/2 = 1 + 2 = 3 2.iostream

设有以下语句:int a,b,c;其中a的值为5,若执行c=a^b>>2,使c的值为十六...
>>运算符优先级高于^运算符 int a=5,b,c;a^b>>2==3f a^(b>>2)==3f a^3f==b>>2(>>2等价于除以4,<<2等价于乘以4)\/\/方程两边同时乘以4(<<2)(a^3f)<<2==b 5:0000,0101 3f:0011,1111(^异或)___得:0011,1010(<<左移2位)___得:1110,1000 (16进制)...

int a=5;int b=4;int c=3;(3*a,a=b+c,++a);a的值是
应该是8吧。

设有说明语句int a=5,b=3,则执行语句a=--a||++b;后,b的值是多少
b的值不变,还是 3 。因为 条件 表达式 里 用的是 或运算,当 左边的条件为真时,无论右边是什么结果,都是真。所以 或运算 有个 短路 规则,即 不再执行 右边的条件。a=--a||++b;--a 为 4 ,为真。所以 不执行 ++b。b的值不变,还是 3。

设有语句int a=5;则执行语句a+=2;后,变量a的值是多少
int a=5;a+=2其实相当于a=a+2;因为a=5 所以得出来a=a+2:a=5+2:所以a=7;因为是赋值表达式所以应先计算表达式的右半部 即:a+2 然后将表达式右半部计算得出的值,赋给表达式左半部的变量。赋值表达式的格式:变量=表达式:

若定义变量int a=5,b=3;执行下列语句:a+=b;b=a-b;a=a-b;后a,b的值分...
a+=b 就是a=a+b 所以a=8 b=a-b=8-3=5 a=a-b=8-5=3 所以最后a=3 b=5

设已有说明语句“int a=5;”,则执行语句“a+=a*=a%=3;”后,a的值...
结果是8——a+=(a*=(a%=3))——等价于a=a%3;a=a*a;a=a+a;。

C语言中,若有int a=5;则逗号表达式a=2*6,a*3,a+5的值是___。
我认为是17,因为这是一个逗号表达式,里面有2个逗号,3个式子!逗号表达式的值,以最后一个式子的值为值,也就是a+5。但是他是从前往后依次做算的,运算第一个式子后,a是12,运算第二个,a不变还是12,运算第三个式子,式子的结果就是17 ...

双峰县17089105798: 已知int a=5,b=5;则表达式:++a>b?a:b -- >++a?++b:a的值为 -
雷迹理气: 答案是7,整个式子按先后级是从左往右计算的,所以++a>b?a:b--是第一个式子,这个式子的值就是:a=5,所以++a之后a=6,++a这个式子的值也是6,所以他大于5是正确的,所以是第一个答案,而此时,a=6,所以这整个个式子的答案是6,同时此时b=5,因此把这前面整个式子设为c的话,c=6,即全部式子可以写成:c>++a?++b:a,这样的话按照前面的分析,一样来做,此时a=6,执行++a之后a=7,++a这个式子也是7,++b这个式子是6,这样就变成了6>7?6:7所以,最后答案是7

双峰县17089105798: 已知float a=3.5,int b=5,则表达式(int)a/b的值是多少 -
雷迹理气: 答:已知float a=3.5,int b=5,则表达式(int)a/b的值是:0.因为在C语言中,取整不采用四舍五入的方法,而是直接截尾,在表达式(int)a/b中,a被取整后为3,3/5的商为0,所以表达式(int)a/b的结果为0.

双峰县17089105798: 已知"int a=4,b=5,c;";则执行表达式"c=a=a>b"后变量a的值0吗? -
雷迹理气: 是的.应该先执行>运算,a>b的值是0,因为四不大于五,然后就是c=a=0.所以执行结束a=0

双峰县17089105798: (6)定义int a=5,b;,则执行表达式b=++a* -- a之后,变量b的值为 【6】 . -
雷迹理气: ++a和--a都是先执行自加后再带入计算式计算的,所以先执行a自加也就是a=6然后执行a自减a=5,带入b=a*a即b=5*5=25.我想出题人只是想让你知道在一个计算式中要执行完所有的自加自减后再最后带入式子计算; 而a--和a++则是先将a值带入其中计算后再进行自加自减的.

双峰县17089105798: int a=5,b;则执行表达示b=++a* -
雷迹理气: int a=5,b; b=++a*--a表达式先执行++a,a=6,再执行--a,a=5,但注意表达式只一个a,a应该是一个值,所以最后的是5*5=25,所以b=25,明白了吗?

双峰县17089105798: 设int a=5,b=6,表达式(++a==b -- )?++a:b--的值是 5还是6?理由 -
雷迹理气: 最后值为7,这是一个if语句,就是 int a=5,b=6; if(++a==b--) ++a; else --b; ++ar的规则是先运算,所以括号中左值++a=6,a=6; ==的优先级低过--,所以先计算b-- b--的规则是先赋值,所以括号中右值b--=6,b=5; 左值6==右值6,即条件为真,执行++a,因为a值已是6, 所以加1操作后, 结果为 7

双峰县17089105798: C语言中,若int a=5,b=3,c=1;则表达式“f=a>b>c”,运算后的结果f的值是多少 -
雷迹理气: 答案应该是0; f=a>b>c 这个式子从左向右计算,a>b (5>3) =1, 1>c(1) = 0,所以 f=0

双峰县17089105798: 在c语言中,若有定义:int a=5,b=2,c=1;则表达式a - b<c | |b = =c的值 -
雷迹理气: 先计算 a-b<c 即 5-2<1 不成立 值为假. 然后计算b==c 即 2==1 不成立, 值为假. ||两侧都是假. 结果为假. 即0.

双峰县17089105798: 定义int a=5,b;,则执行表达式b=++a* -- a之后,变量b的值为多少?
雷迹理气: 25 30是不对的,如果改成以下形式答案为30; int a=5,b,c,d; c=++a; d=--a; b=c*d; 则b=30; b=++a*--a; 等效于b=(++a)*(--a) (++a)这个表达式的值是a这个变量,不是6这个常量. (--a)同理. 所以执行后其实就是b=a*a,这个时候++a,--a的操作后,a还是5 所以b=5*5;

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网