作业帮 > 综合 > 作业

一个简单的式子分析,只帮我看看

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/29 14:09:37
一个简单的式子分析,只帮我看看
若a为int类型,且其值为3,则执行完表达式
a+=a -=a*a 后,a的值是 ( C )
A) -3 \x05B) 9 \x05C) –12 \x05D) 6
疑问:是从右往左运算?那最后一步a=a+(-6) ,也应该是3+(-6) ,应该是 -9啊 ,a不等于3吗?为何答案是-12
【解析】考查复合赋值运算符的运算规则.
第一步运算 a*a,结果是9;
第二步运算 a -=9,等价于a=3-9=-6,因此a的值及表达式a-=9的值均是-6;
第三步运算 a+=-6,等价于a=a+(-6),于是a的值及表达式a+=6的值均是-12.
答:因为你忽略了赋值.
第一步运算 a*a,结果是9; a=3; ok
第二步运算 a -=9,等价于a=3-9=-6,从这步开始,a=-6;a不再是3.
第三步运算 a+=-6,等价于a=a+(-6)=(-6)+(-6)=-12,
再问: 那请问第一次 结果等于9,为什么不赋值给a ,那么a 就应该等于 9了,为何到第二步才赋值给 a 第一步: a-=a*a 那么a*a 等于9 那么,9不是应该赋值给a 吗
再答: 无赋值符号。 第一次没有进行赋值的。只是进行a*a运算。 可以验证的。
再问: a+=a -=a*a 的 a*a 前面有= ,有赋值符号的呀,怎么回事???
再答: 恩,的确有“=”。 不过很可惜,前面还有个“-”。 C语言规定优先级,算术运算优先于赋值运算。 所以,a-=a*a ,即a=a-a*a ,即a=3-3*3=-6.
再问: 请问,最后一步,a+= 前面也有一个"+", 那为何要把- 6赋值给前面的a ,而第一步按您说的,有“-” 就不把9 赋值给a , 而最后一步却把 -6 赋值给了前面的a ??? 最后一步 a+=-6 ,应该是 a=a+(-6) ,那应该是 3+(-6) 啊,但是答案却不是这样
再答: 在第二步,a-=a*a ,即a=a-a*a ,即a=3-3*3=-6.。注意:从这步结束,a=-6;. 然后到最后一步a+=-6;即a=a+(-6)=-6+(-6)。 并不是在最后一步把 -6 赋值给了前面的a 。