在vc中输入程序:int j=3,k=0 ; k= (j++)*(++j)+(j--)*(--j); printf("k=%d\n",k); 结果如下: k=25
3个回答
展开全部
在C语言中j=(i--*--i)+(i++*++i)跟j=(i++*++i)+(i--*--i)的区别,i初始值为3
看下文时注意此句话---执行*时系统找i--,不同编译环境有差异
i--*--i却=4是先执行i--,再执行--i,最后执行*,但由于i--的特殊性,开始i=3,i--时i暂不变,--i时i=2,此时注意,因为i值变了,在执行*时系统找i--时,找到i=2,所以相当于(2--)*2=4,之后再i=1。所以整个过程相当于,先执行--i,在执行*,再执行i--。i++*++i同理。
j=(i--*--i)+(i++*++i)则要更复杂一点,当
i--*--i = 4运算出来时i=2,但这时i--还不能执行,因为这是还是在同一个式子里,i=2
带入到i++*++i中运算出得9,此时再进行i--,再i++,得到i=3,所以j=4+9=13.
后者同理。
看下文时注意此句话---执行*时系统找i--,不同编译环境有差异
i--*--i却=4是先执行i--,再执行--i,最后执行*,但由于i--的特殊性,开始i=3,i--时i暂不变,--i时i=2,此时注意,因为i值变了,在执行*时系统找i--时,找到i=2,所以相当于(2--)*2=4,之后再i=1。所以整个过程相当于,先执行--i,在执行*,再执行i--。i++*++i同理。
j=(i--*--i)+(i++*++i)则要更复杂一点,当
i--*--i = 4运算出来时i=2,但这时i--还不能执行,因为这是还是在同一个式子里,i=2
带入到i++*++i中运算出得9,此时再进行i--,再i++,得到i=3,所以j=4+9=13.
后者同理。
展开全部
首先++,--优先级高,低于()
先执行:j++,++j,后j=4,前半步为4*4
在执行:j--,--j,后j=3,后半部为3*3
k=16+9=25
千万不要是全部把j++,++j,j--,--j之后在进行运算的,这样结果就是18了
同理:k= (j++)*(++j)+(j--)*(--j)+(j++)*(++j);//这里k=41
可以验证
先执行:j++,++j,后j=4,前半步为4*4
在执行:j--,--j,后j=3,后半部为3*3
k=16+9=25
千万不要是全部把j++,++j,j--,--j之后在进行运算的,这样结果就是18了
同理:k= (j++)*(++j)+(j--)*(--j)+(j++)*(++j);//这里k=41
可以验证
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2011-03-31
展开全部
看是什么编译器了 我用vs2005输出是18~~~
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询