c语言题目 b=3 ; b=(++b)+(++b)+(++b); 输出最终b=? 答案是16 具体怎么算的?我怎么算到...

 我来答
老头丸A
2020-03-16 · TA获得超过3万个赞
知道小有建树答主
回答量:1.1万
采纳率:31%
帮助的人:892万
展开全部
只能说是编译器的原因,你试试:
b=3;
b=(++b)+(++b);
估计答案是10.
++的优先级比+高,所以先做2次++,b变成了5,
再做b=5+5=10;
但是你写b=(++b)+(++b)+(++b);答案是16
说明编译器先把(++b)+(++b)=10,算了出来,再做了b=10+(++b)=16
其实不考虑编译器,我觉得正确答案应该是18,
所以先做3次++,b变成了6,
再做b=6+6+6=18;
福星星廉河
2020-03-15 · TA获得超过3万个赞
知道大有可为答主
回答量:1.1万
采纳率:35%
帮助的人:609万
展开全部
计算b=(++b)+(++b)+(++b);时
第一步:计算第一个(++b)这点谁都不会错;此时b=4;
第二步:计算第二个(++b)这点也没有问题吧,此时b=5;
第三步:计算(++b)+(++b)将5代入,(++b)+(++b)=10;这点容易想不通,为什么不是5+4呢?因为变量只有一个存储单元,中间结果被覆盖掉了。
第四步:之后的运算应该不是问题了吧……
程序是先运行了b=(++b)+(++b);这儿等号赋值语句执行前,a已经完成了两次自加a的值为5,所以加了之后b=10;然后b=b+(++b);b自加变成6,所以b=10+6=16;
若有帮助
望采纳!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
张廖怀莲戴富
2020-03-11 · TA获得超过3万个赞
知道大有可为答主
回答量:1.1万
采纳率:35%
帮助的人:762万
展开全部
这个是运算堆栈的问题导致的。
首先计算机会按照运算符号从左往右开始压栈。(也就是那两个加号)
第一个+进栈,随后和它相关的两个数字也会进栈。((++b)(++b)),这样就会有+
(++b)(++b)的堆栈结果。也就是“+”“5”“5”的堆栈结果。然后第二个+进栈,变量进栈。+“6”。
所以上边的式子在计算机中运行的时候是:
5+5+6。所以才会有16的结果。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
缑雅静刘佳
2020-03-16 · TA获得超过3万个赞
知道大有可为答主
回答量:1.1万
采纳率:27%
帮助的人:589万
展开全部
a=a+++b+++c;
到了这里
实际上根据优先级就是
a
=
(a++)
+
(b++)
+
c
a++
的值是1,
a的值变成了2
b++
的值是1,
b的值变成了2
c
还是1
然后吧等式的结果赋给a,
所以a
就是3了
执行完代码的结果就是
a
=
3
b
=
2
c
=
1
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
利寄南赖禾
2020-04-17 · TA获得超过3万个赞
知道大有可为答主
回答量:1.1万
采纳率:31%
帮助的人:883万
展开全部
我觉得计算结果应该为18才对啊
首先,b初始值为3,三个前加后为6,6+6+6
=
18
编译器运行后的结果也是18
注意一点,前加的优先级高于加号
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式