c语言,这个程序是怎么运算出150的。而且x,y的值是不是反了。

如题所述

第一,显示的结果是正确的,因为x与y没有分隔开,看起来有点醉人。如果把显示的那一句改成:printf("x=%d,y=%d\n",x,y)就会出现很明显的结果:
x=6
y=150
第二,关于计算出x与y的过程,分析如下:
y=++x*++x*++x=(++x*++x)*++x《说明:因为C语言是分步计算的,计算第一步时根本不考虑第二步,我们就把它要计算的第一步括起来》
=((x+1)*(x再+1))*++x《说明:因为有先自增,C语言是先计算自增,后计算加减乘除。自增时,因x是保存在同一个存贮地址内,原始是3,先加1变成了4,又加1成了x=5了。完成自增之后,可以写成下一步了》
=(x*x)*++x《说明:这是调用两个x相乘,当然调用的结果两个x都是5,相乘后得到的是5*5=25》
=25*++x《说明:这里又有先自增,自增后x=x+1=5+1=6,这也是x的最终值了,因为后面没有再对x的赋值或计算了。自增后又可写为下一步》
=25*x《这时x的值已经是6了》
=25*6
=150

完毕。如果还有什么疑问请留言。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-01-08
程序先算++x
首先++x*++x 这个就是先算了两个++x 结果x变成了5 这一步的结果就是25
后面的++x把x变为6
最后结果就是25乘6 是150

xy没有反啊追问

y是多少。

追答

y是150

追问

为什么二个都是5啊。不是4*5

追答

因为在算++x*++x 式子的时候

编译器需要知道两个运算数的值
在*运算之前 x就进行了两次自增
所以*左右两边都是5
算完这个之后
需要知道第三个运算数
于是x自增为6
最后就是25 * 6 = 150

x是一个自始至终都用到变量 不是第一个x自增之后就不会再变了 毕竟没有存在另一个变量里

第2个回答  2015-01-08
首先++x=4;再执行++x=5 5*5=25
在执行++x=6 25*6=150
相似回答