执行语句x=y=0; while (x<15) y++,x+=++y printf(“%d,%d”,y,x);的结果是

后置自加到底是在什么时候加1,本题中我理解的是y先参与x+=++y之后再根据之前的y++加上1,(当然++y之前也要加1),可是这样就不对,如果按照y先加1在参与后面的运算,答案就对了,为什么,后置自加不是先赋值再加1吗?求大神解答

x = 0时,执行y++后,y = 1,执行x += ++y后,y = 2,x = 2
x = 2时,执行y++后,y = 3,执行x += ++y后,y = 4,x = 6
x = 6时,执行y++后,y = 5,执行x += ++y后,y = 6,x = 12
x = 12时,执行y++后,y = 7,执行x += ++y后,y = 8,x = 20
不满足x < 15,退出循环,故输出是8,20追问

我就不知道为啥不是先把y赋给后面的表达式再加1呢

追答

#include <stdio.h>
int main() {
int x,y;
x = y =0;
while(x < 15) {
y++;
x += ++y;
}
printf("%d,%d\n",y,x);
return 0;
}

追问

好吧,有图有真相,只能这样了

温馨提示:内容为网友见解,仅供参考
第1个回答  2014-02-15
这是两条语句,y++要先加1追问

不是先赋值再加1吗,不应该先把y的值赋到后面的表达式里吗

追答

不是,y++要先算完,才会进行后面语句的计算

追问

还是不懂

追答

也就是说,y++和x+=++y是两条语句,在执行过程中,先要把y++执行完了,再去执行x+=++y,在x+=++y的执行过程要考虑运算的优先级的

#include

void main()
{
int x=0;
int y=0;
while (x<15)
{y++;
x+=++y;
printf("%d,%d\n",y,x);
}
getchar();
}
结果为:2,2;4,6;6,12;8,20

你可以单步调试一下看看

本回答被提问者采纳

执行语句x=y=0; while (x<15) y++,x+=++y printf(“%d,%d”,y,x...
x = 12时,执行y++后,y = 7,执行x += ++y后,y = 8,x = 20 不满足x < 15,退出循环,故输出是8,20

...x=y=0; while (x<15) y++,x+=++y ; printf(“%d,%d”,y,x...
include<stdio.h> void main(){ int x=0,y=0;while (x<15){ y++;x+=++y;} printf("%d,%d ",y,x);} 程序结果为 8,20

y++,x+=++y;怎么运算?x=y=0;while(x<15) y++,x+=++y; printf("%d,%d...
因为 y++,x+=++y; 这里实际是两个语句,你所谓的“先使用,后自增”是指在同一个语句中,到了下一个语句,它就已经自增完毕了。y++这个语句中并没有使用y,所以只是自增了,到了x+=++y这里,y已经是1了,再自增的话就变成2了,然后再累加到x,所以第一次循环结束的时候x的值就是2 ...

int x=0, y=0; while(x<15) y++,x+=++y; printf("%d,%d",y,x);
因为y++,x+=++y;是逗号表达式,所以最终值是x+=++y;还有x+=++y等价于x=x+(++y)0<15 y=1,x=0+2;\/\/x=2,y=2 2<15 y=3,x=2+4;\/\/x=6,y=4 6<15 y=5,x=6+6;\/\/x=12,y=6 12<15 y=7,x=12+8;\/\/x=20,y=8 20<15 不成立 输出:y=8,x=20 ...

...x=0,y=0; while(x<15) y++,x+=++y; printf("%d,%d",x,y); }_百 ...
include <stdio.h> int main(){ int x=0,y=0;while(x<15){ y++;x+=++y;} printf("%d,%d",x,y);} \/\/++y输出y值加好以后的值 \/\/y++; x+=++y \/\/y=1 x=2 y=2 \/\/y=3 x=6 y=4 \/\/y=5 x=12 y=6 \/\/y=7 x=20(x>15 所以跳出循环) y=8 ...

...x=0,y=0; while(x<15) y++,x+=++y; printf("%d,%d",x,y); }_百 ...
主要看这一行 while(x<15) y++,x+=++y;++的优先级要高于+=的优先级 因此x+=++y可等价于:x=x+(++y).即将++y与x原来值的和重新赋给x.运算的过程为: x y 2 2 6 4 12 6 20 8 这样回答能理解吗?

...新手...如x=y=0; while (x<15) y++ ,x+=y++; priintf ("%d , %d...
int i;a = 4;b = a + 5; \/\/b = 9 b ++;\/\/ i = b; b = b + 1;则整个逗号表达式的值为i也就是9;同理a=4 ,b=a+5,++b等价于 int i;a = 4;b = a + 5; \/\/b = 9 b ++;\/\/ b = b + 1; i = b;则整个逗号表达式的值为i也就是10;备注:变量i的值是...

...y; x=y=0; while (x<10) x+=++y; printf ("%d,%d",y,x); } 结 ...
一共执行4次循环 第一次执行完y=1,x=1 第二次执行完y=2,x=3 第三次执行完y=3,x=6 第四次执行完y=4,x=10 循环条件不成立,输出4,,10

int x=0,y=0;while(x<10){if(x%2)continue;y++;x++;};该程序执行后 y...
if(x%2)相当于if(x%2!=0)时结束本次循环 因此x=1时就不能进行下去了,进入死循环,即x之后一直等于1 学习,是指通过阅读、听讲、思考、研究、实践等途径获得知识和技能的过程。学习分为狭义与广义两种:狭义:通过阅读、听讲、研究、观察、理解、探索、实验、实践等手段获得知识或技能的过程,是一种...

...y=0;y<15;y++) { x=y++; printf("x=%d,y=%d\\n",x,y); } }_百度...
首先y=0;y<15;此时y的值是0,然后是y的值赋给x再执行++,所以第一次打印就是x = 0, y = 1,以此类推 你也可以x = ++y 来试一下,这个就是先执行++再赋值给x.

相似回答