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

已知inta=5,b=5;则表达式:++a>b?a:b-->++a?++b:a的值为6。(正确)我怎么算不出来,我得7,错哪?... 已知int a=5,b=5; 则表达式: ++a>b?a:b-->++a?++b:a的值为6。( 正确 ) 我怎么算不出来,我得7,错哪? 展开
 我来答
Yuqi_Tan

2019-06-08 · TA获得超过8.9万个赞
知道大有可为答主
回答量:9918
采纳率:93%
帮助的人:3458万
展开全部
已知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。
如有不明白之处请留言追问。
更多追问追答
追问
不是先计算b-->++a?++b:a吗,结合性从右到左,为什么有些又是先右边
不是先计算b-->++a?++b:a吗,结合性从右到左,为什么有些又是先右边
百度网友ba8d05e
2019-06-08
知道答主
回答量:35
采纳率:66%
帮助的人:13.7万
展开全部

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

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

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

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

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

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

所以最后表达式的值为 6

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
中冥利3328
2019-06-05 · TA获得超过4040个赞
知道大有可为答主
回答量:8153
采纳率:84%
帮助的人:344万
展开全部
最後值为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
追问
? 别长得差不多就抄过了
? 别长得差不多就抄过了
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
迪卡普里奥朱
2019-06-07 · 超过16用户采纳过TA的回答
知道答主
回答量:49
采纳率:71%
帮助的人:8.1万
展开全部
这是一个三元嵌套的问题,必须考虑把它转换成等价的if else语句。我不是很懂C,但原理是相同的。
等价的if else应该是这样的。
if(++a>b){
//上面++a改变了a的值
a=6
}else{
//由于条件不满足所有不会执行后面的代码
if(b-->++a){
++b
}else{
//输出a
a=6
}
}
所以最后 a=6,是因为后面压根就没有执行。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
l7722526
2019-06-05 · TA获得超过2.7万个赞
知道大有可为答主
回答量:2.8万
采纳率:84%
帮助的人:3775万
展开全部
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的值没有改变!!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式