初学者c语言源程序疑惑,帮忙解答一下。

来源:百度知道 编辑:UC知道 时间:2024/05/30 13:30:30
main()
{
int x,y,p,q;
x=8,y=8;
p=x+++x+++x++;
q=(++y)+(++y)+(++y);
printf("%d, %d, %d, %d",p,q,x,y);
}运行结果为24 33 11 11是怎么回事?p=x+++x+++x++不就=(x++)+(x++)+(x++)吗?第一个值为8,x此时变为9,第二个(x++)值为9,X此时变为10,第三个(x++)值为10,此时X变为11;同样的q=(++y)+(++y)+(++y)中,三个括号中的值分别为9,10,11,此时的Y值为11。于是结果应为27 30 11 11,怎么结果会是24 33 11 11呢?请高手解答
main()
{
int y;
y=1;
printf("%d",y+++y+++y);
printf("%d",y);
}
我的理解如下:你看Y+++Y+++Y是不是=(Y++)+(Y++)+Y呢?如果是的话,那么第一个Y++值为1,此时Y值变为2,第二个 Y++ 的值为2,此时Y的值变为3,那么Y+++Y+++Y=(Y++)+(Y++)+Y=1+2+3=6,所以它的运行结果为6,3,而上面的程序如何解释呀。请高手解释一下。

x 是指运行完了再加,赋值后再加,最后应24是对的.x,y也没有问题,关键是在q上.q的赋值上有小括号,而在以语言程序中,小括号是最先运算.在运行时三个Y应该同时进行三次自加,最后再按左到右顺序自加和磊加,最后赋值给Y.

C语言的算法是

p=x+++x+++x++;

意思是 先作 p=x+x+x
然后 x++ 算 三次 这就是后加 此时的x=11
q=(++y)+(++y)+(++y);

意思是 先作 三次++y 此时的y=11
在然后 再作 p=y+y+y;

这是 C语言的算法

不同语言有不同语言的算法

因为X++会先用X初值算,所以P=8+8+8=24
而++Y则会先算Y=Y+1,加三次后再执行三个Y相加,所以Q=11+11+11
以上都是在编译时进行的,顺序是规定的,你可以看一下教材,我们用的是清华的C程序设计第二版,第57页上写的很清楚.

+和++为同优先级,结合方向为自右向左,即Y+(++Y)+(++Y)
所以Y为3,y+++y+++y为6

那个x++是指运行完了再加,就是说是赋值给p后再加的。赋值给p后他就为11了。
++y就是加了再运行。

我晕 用一楼的那两句话足以解决这个题了A++是先用值再加1 而++A是先加1再用值 而A+++A+++A++相当于三个8相加了 这种题目书上应该有的