回 帖 发 新 帖 刷新版面

主题:求C语言题目分析

若有"int a=5;a+=a-=-a*a;",则a的值是_60__
怎么推出来的?

回复列表 (共5个回复)

沙发

首先是“-a”,取负运算的优先级最高,得到-5。
然后是乘法,因为目前a的值是5,此时-5*a得到-25
此时原来的式子变成“a += a -= -25”。

这里+=与-=的优先级相同,但注意结合性。一般的运算是左结合,也就是说“优先级相同时,先算左边的”。比如3+2-5,是先算3+2,得出的结果再去做减法。但这里+=和-=是右结合,也就是要先计算右边的。
由此,先计算a -= -25,于是a的值变为30,且“a -= -25”的结果正好是a当前的值,所以是30。
最后计算a += 30。得到最终结果为60。

这样的题目,考试时得到错误结果的几率非常大。实际工作中也基本上没人这么写,楼主也不必过于深究了。

另外:a+++a++这样的,就不要研究啦,没结果的。

板凳

牛仔兄说的对,我一直奇怪为什么教材中和笔试题都喜欢出这种题目,而且总有一群人揪住这些题目刨根问底[em29]

3 楼

[quote]牛仔兄说的对,我一直奇怪为什么教材中和笔试题都喜欢出这种题目,而且总有一群人揪住这些题目刨根问底[em29][/quote]
中国式考题,滥用现有知识进行不实用的过渡挖掘,来拉开所谓的“区分度”

4 楼

a+=a-=-a*a

分解以后就是 1. a+=(a-=(-a*a)) = 5+=(5 -= -25)
                               = 30 += (30) //此步骤a已经等于30,可以看做是a = a + 25
                               = 60

5 楼

顶,这个题没有什么意思

我来回复

您尚未登录,请登录后再回复。点此登录或注册