c语言,++i求解。

......{inti=3;i=i+(++i);printf(“%d”,i);为什么是8?......{inti=3;i=i+(++i)+(++i);printf(“%d... ......{int i=3;i=i+(++i);printf(“%d”,i);为什么是8?
......{int i=3;i=i+(++i)+(++i);printf(“%d”,i);为什么是13?
.......{int i=3;i=i+(++i)+(++i)+(++i);printf(“%d”,i);为什么是19?
展开
 我来答
百度网友dd2a4ae
2012-03-03 · TA获得超过1.6万个赞
知道大有可为答主
回答量:2628
采纳率:11%
帮助的人:1652万
展开全部
此题解题的关键,是要明确:
C语言中,加法运算之间,是左结合的。

也就是说,多个加号接连出现时,先算最左边的加号,得到结果,再将结果与右侧的下一个加号后的表达式进行运算。

----------------------------
第一题
......{int i=3;i=i+(++i);printf(“%d”,i);为什么是8?
改写为i=i+u
它的计算步骤是这样的:
1. 计算u=(++i),此刻运算前i是3,求得u=4,i的值也被重新赋值为4
2. 计算 i=i+u=4+4=8

----------------------------

第2题
......{int i=3;i=i+(++i)+(++i);printf(“%d”,i);为什么是13?
按加法左结合规则,这个表达式赋值可按实际运算顺序,改写成这个形式:
i=(i+(++i))+(++i)
=(i+u)+(++i)
=v+(++i)
=v+t
计算步骤:
1. u=(++i)=4,执行前i=3,结果是u=4,同时i重新赋值为4
2. v=i+u=4+4=8
3. t=(++i)=5,此刻运算前i是4,所以结果是5,i也被赋值为5
4. i=v+t=8+5=13

----------------------------

第3题
.......{int i=3;i=i+(++i)+(++i)+(++i);printf(“%d”,i);为什么是19?
先改写为:
i=((i+(++i))+(++i))+(++i)
=((i+u)+(++i))+(++i)
=(v+(++i))+(++i)
=(v+w)+(++i)
=x+(++i)
=x+y

1. u=(++i)=4,执行前i=3,所以u=4, i 也重新赋值为4
2. v=i+u=4+4=8
3. w=(++i)=5,执行前i=4,所以w=5, i 也重新赋值为5
4. x=v+w=8+5=13
5. y=(++i)=6,执行前i=5,所以y=6, i 也重新赋值为6
6. i=x+y=13+6=19

----------------------------
Csloud
2012-03-03 · TA获得超过199个赞
知道小有建树答主
回答量:152
采纳率:0%
帮助的人:63.7万
展开全部
第一个, 先运算括号内,就是++i,i变为4,4+4=8
第二个,先中间的括号,i变为4,即i+4+(++i),再进行括号,i变为5;即5+4+5=14
第三个,同样,该18;
至于为什么我们的答案不同, 是因为各个编译器处理++或--的方式不同,你在tc,vc或gcc中都会得到不用的答案,
其实你不需要纠结这个问题,你只需要知道++i(先自加)和i++(后自加)的区别就是了,在标准C中,你上面的等式是不标准的!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
锤子锤子大锤头
2012-03-03 · TA获得超过161个赞
知道小有建树答主
回答量:297
采纳率:0%
帮助的人:163万
展开全部
在给你看一个更神奇的:
int i=3;
printf("%d %d",i,++i);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
06008333
2012-03-03 · TA获得超过267个赞
知道小有建树答主
回答量:109
采纳率:100%
帮助的人:137万
展开全部
1.因为“++”的优先级大于+的优先级所以先计算++i;此时i为4了,在计算i=i+i,就得到8了。
后面的不对啊好像,
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
甫慕思0J8
2012-03-03
知道答主
回答量:10
采纳率:0%
帮助的人:12.2万
展开全部
简单来说,i++是先计算在加1,++i是先加1再计算。你的结果是有错误的,或者是你打错乐。规律是这样的,我给你解释第一个和第二个,后面的自己思考一下,这样容易掌握。
第一个根据优先级:
1、首先计算括号里面的部分:即(++i);本来i是3,执行完之后i变成了4
2、然后执行加号,i加i就是4加4,就是8
3、最后是赋值符号,把8赋值给i,所以最后输出的就是8
第二个根据优先级:
1、首先执行括号里面的,第一个++i执行完之后i变成了4
2、然后执行第二个括号里面的,执行完之后i变成了5
3、然后三个5相加,结果是15
如果你的式子是i=i+(i++)+(++i);,结果是13.因为
执行i++表示是执行完之后在加1.所以看起来好像是如下执行顺序
1、执行++i 结束后结果是4
2、执行三个i相加,结果是12
3、最后执行自加操作,结果是13
总之,你记住一句话:(++i)就是先加1再操作,(i++)就是操作完了再加1
更多追问追答
追问
我式子没错。六楼有详细回答。谢谢你了。
追答
可能编译器的问题。我重新在VC编译了一下,结果如果我所说。不知道你的编译器是哪种。呵呵,你明白了就好。祝学习愉快。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2012-03-03
展开全部
不要再纠结了。不同的运行环境、不同的运行软件,运行出来的结果是会不同的。
只要记得++i是先自加了再赋值
而i++是先赋值了再自加就可以了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(7)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式