如下程序的结果 (要求(java)画图来解释) int a = 3, b; b = (a++)+(++a)+(a++)*2+a+(++a);

如题所述

只要你记住++在前边,就是先把变量值+1之后再计算,把++放后边,就是先用变量当前的值计算,然后在把该变量值+1,这样你就应该可以很容易的计算出这个答案了.
b = (a++) +(++a)+(a++)*2+a+(++a)对应的是
b = (3++) 此时先把a的值赋给b,然后a+1,所以a=4,b=3,
b= 3+(++4) 此时a先计算自己到5,所以a=5,b=8
b=8+(5++)*2 此时先计算a*2=10+8,然后a+1,所以 a=6,b=18
b=18+6 ,此时a=b,b=24
b=24+(++6) 此时先把a+1,所以 a=7,b=31
温馨提示:内容为网友见解,仅供参考
第1个回答  2015-08-13
a++ 是先执行,再加,++a是先加,再执行,
(a++)还是3 但是当执行到+(++a)的时候就变成了5 后面都是这样子
第2个回答  2015-08-13
3+5+10+6+7=31追问

画图来解释

int a=3,b,c; b=(a++)+(a++)+(a++); c=(++a)+(++a)+(++a); printf("%...
int a=3,b,c;b=(a++)+(a++)+(a++);c=(++a)+(++a)+(++a);printf("%d %d %d",a,b,c);结果问什么事9,9,25 估计你疑惑的是 b=9 先不说编译器的二义性 b=(a++)+(a++)+(a++);这个语句中 使用前 a=3, 因为括号的优先级别大于等号 所以括号内的数据先执行,也就是说3...

c语言int a=3; b=(a++)+(a++)+(a++); 后输出a的值为什么是9?
b的值是9,因为a++是在执行加法操作之后才自加1,所以b的值为3+3+3=9

...main() { int a,b; a=3,b=(++a)+(++a)+(++a); printf("a=%d,b=...
整理后如下:include<stdio.h> main(){ int a,b;a=3,b=(++a)+(++a)+(++a);printf("a=%d,b=%d\\n",a,b);} 主要是第二个表达式a=3,b=(++a)+(++a)+(++a);,它由一个逗号运算符将两个表达式分开,由于逗号运算符的性质(分别计算左右两边的表达式),所以它被解释为:首先计算...

inta=3;intb;b=(++a)+(++a)
第三:如果非要清楚原理请看反汇编 include <stdio.h>int main(int argc, const char *argv[]){int a = 3;int b;b = (++a) + (++a);printf("b = %d\\n", b);return 0;}.section.rodata.LC0:.string"b = %d\\n".text.globlmain.typemain, @functionmain:pushl%ebpmovl%esp, %e...

...main() { int a=1,b; b=(++a)+(++a); printf("%d",b); } 结果为什...
+),相当于 =3+4+5=12;『=(++i)+(i+ +)+(++i),相当于J=4+4+6=14。但程序 实际执行后3个表达式的结果分别是18,9和 15。在表达式 =(+ +i)+(++i)+(++i)中, 的值是3个自增表达式的值,而每一个自增 表达式的值其实取决于i的值。++i是一个自 增表达式,这个表达式的计算...

已知int a=3 b=(++a)+(++a) 中a=? b=?
老师讲的答案是正确的。++a是a先加一在运算 a++是先运算在加一 第一个(++a)后,a=4。第二个(++a)之后,a=5.然后做最后的运算 b=(++a)+(++a)这个式子实质上是两个a的相加【因为(++a)实质上就是a=++a】综上所说,a=5 b=10 ...

若int a=3;则表达式(a++)+(a++)+(a++)的值是多少
B,C 是三个复合运算,他们运算先后没有规定\/* 当然由于ABC都一样,所以区分这个没啥必要,只是为了全面,别听信一些扯淡的回答 *\/\/\/ 然后对于 a++; 运算,a的值究竟在什么时候增加1,又是C语言未规定的\/\/ 对此唯一有的约束是,在一个分号; 之前的所有运算,必须结束\/\/ 也就是在下一条语句前...

...int main() { int a=1,b ; b=++a+(++a); printf("%d %d\\n",a,b...
接下来解释一下为什么会有上面的结果,其实你查看一下反汇编代码就知道了。b=++a+(++a);编译器先执行两次 a=a+1; 然后再执行 b=a+a;b=++a+(++a)+(++a);编译器先执行两次 a=a+1; 然后将 a+a 的结果放到寄存器 edx,再执行一次 a=a+1,最后执行 b = a + edx,此时 a 的值为...

int a=0,b,c; b=(a++)+(a++)+(a++); c=(++a)+(++a)+(++a);TC、C-free...
然后执行第一个加号,这时候是两个a的引用相加,这时候的a的值是5,相加结果是10,然后执行第三个a++,然后再执行第二个加号,这时候a是6,也就是10+6=16。我在VC下的运算结果就是16。如果是另一种顺序。先执行完所有三个a++,此时a是6,再执行连加6+6+6=18,结果就不一样了。

int a=3, b;b=a++;b的值是3,为什么?
因为 b=a++ 相当于 b=a a=a+1 也就是说,是先把a赋值给b(这个时候a=3),然后a再+1,所以b的值是3 如果是下面这样就不同了 b=++a 这相当于 a=a+1 b=a 这种情况下b的值就是4

相似回答