主题:求C语言题目分析
zlinsc
[专家分:0] 发布于 2010-07-06 23:20:00
若有"int a=5;a+=a-=-a*a;",则a的值是_60__
怎么推出来的?
回复列表 (共5个回复)
沙发
eastcowboy [专家分:25370] 发布于 2010-07-07 02:56:00
首先是“-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++这样的,就不要研究啦,没结果的。
板凳
overfly [专家分:3230] 发布于 2010-07-07 18:18:00
牛仔兄说的对,我一直奇怪为什么教材中和笔试题都喜欢出这种题目,而且总有一群人揪住这些题目刨根问底[em29]
3 楼
雪光风剑 [专家分:27190] 发布于 2010-07-08 09:48:00
[quote]牛仔兄说的对,我一直奇怪为什么教材中和笔试题都喜欢出这种题目,而且总有一群人揪住这些题目刨根问底[em29][/quote]
中国式考题,滥用现有知识进行不实用的过渡挖掘,来拉开所谓的“区分度”
4 楼
咖喱炒饭 [专家分:210] 发布于 2010-07-22 17:31:00
a+=a-=-a*a
分解以后就是 1. a+=(a-=(-a*a)) = 5+=(5 -= -25)
= 30 += (30) //此步骤a已经等于30,可以看做是a = a + 25
= 60
5 楼
sjw903 [专家分:60] 发布于 2010-07-23 18:50:00
顶,这个题没有什么意思
我来回复