一个关于C语言自增++运算的题目,高手进

main()
{
int x=2,y,z;
y=(++x)+(x++)+(++x);
z=(x--)+(--x)+(x--);
printf("x=%d,y=%d,z=%d\n",x,y,z);
}运行结果为什么不是x=2,y=11,z=11
我的预测是y=3+3+5=11
但是答案是x=2,y=12,z=12
请详细讲解好吗?
我用的是Turbo C/C++ for Windows集成实验环境安装文件,我很同意
“根据编译器而不同,
在你的编译器中应该是这样执行的:
y=(++x)+(x++)+(++x);
因为第二个(x++)有括号,所以就求解x++再执行括号外面的+,结果也就是3+4+5=12
在VC中就不同
回答者:jinesln - 助理 二级 3-13 14:33”的回答,但可以再详细一点吗?

main() { int x=2,y,z; y=(++x)+(x++)+(++x); z=(x--)+(--x)+(x--); printf("x=%d,y=%d,z=%d\n",x,y,z); }/*首先,给你说明的同时,也是我的一次再学习。0.对于每个编译平台都会对这个++运算有不同的处理.对于:Turbo C 2.0的系统下:1.说明一下,这应该属于应试教育的产物,实际的开发可要挨骂的!2.可以这样做实验(1)代码:main(){int x=2,y=0;y=(++x)+(x++);/*y=?,而以运算后,x=?*/printf("x=%d,y=%d\n",x,y);}(2)把你的代码丝毫不改的放到Dev-cpp4.9.9.2的环境下运行:你预测一下结果是什么???你肯定想不到的!看图:



*/3.我看最好的是看汇编代码了!应该能看到各个系统的差异v......4.我晕........
温馨提示:内容为网友见解,仅供参考
第1个回答  2007-03-13
谭浩强的《C语言程序设计》中有个例子,大致是说不同的系统处理int i=3;printf("%d,%d,%d",i++,i++,i++)的方法不同,有的输出是3,4,5,有的输出3,3,3。我用的是Microsoft Visual C++ 6.0,按照后者输出。

对于你的问题,系统可能是将++x处理为3,后面的++x不变化,即3+4+3=10

参考资料:《C语言程序设计》谭浩强

第2个回答  2007-03-13
根据编译器而不同,
在你的编译器中应该是这样执行的:
y=(++x)+(x++)+(++x);
因为第二个(x++)有括号,所以就求解x++再执行括号外面的+,结果也就是3+4+5=12
在VC中就不同本回答被提问者采纳
第3个回答  2007-03-13
真的假的 兄弟 你在程序里运行试了么?
我感觉你的应该是对的啊
第4个回答  2007-03-13
我在Vc6.0里运行的结果是x=2,y=10,z=12

一个关于C语言自增++运算的题目,高手进
回答:根据编译器而不同, 在你的编译器中应该是这样执行的: y=(++x)+(x++)+(++x); 因为第二个(x++)有括号,所以就求解x++再执行括号外面的+,结果也就是3+4+5=12 在VC中就不同

C语言中++问题
自增运算符++的优先级高于算数运算符+所以结果应该是12+12 记住在第一次遇到++自增运算符的时候在此时输出结构其值还是不变的,但是一旦在次遇到该 变量那么这个值就变了,但是本题因为j=i++i是在一个等式里所以i++的值还是12 但是当这个等式结束以后i的值就是13了 ...

c语言,后置自增++运算符。i=7,赋值的时候i++输出的是7。。。int x=0...
int x=0,temp,y=6;temp=x++&&y;因为x的值为0,而x++是后置++,把以先取x的值,即0,然后x的值加1,x变成1 所以temp=0&&y;temp的值为0,x的值为1

关于C语言++用法的一个基础问题
c[s[i]]++就是c[s[i]]加1。s[i]是小于5的数,作为c[]的一个下标。自增运算符 ++ 使操作数的值加1,其操作数必须为可变左值(可简单地理解为变量)。问题在于:++ 可以置于操作数前面,也可以放在后面,如:++i;i++ ;++i表示,i自增1后再参与其它运算;而i++ 则是i参与运算后,i...

c语言 void main() { int x=10, y=10; x+=++x;
x+=++x;等价于:++x; x+=x;取用x前先自增,x变为11,再执行x=x+x。于是11+11=22 y+=y++;等价于:y+=y; y++;这是先运算后y再自增。y=10+10=20,然后再增1,变为21。

C语言中自增运算是什么意思,麻烦举个例子
比较下面两端程序 int a=0;printf("%d\\n",a++);printf("%d",a);这里的输出是 0 1 int a=0;printf("%d\\n",++a);printf("%d",a);这里的输出是 1 1 可以看出++a就是在执行语句之前就让a自增1,a++就是在执行该语句后再让a自增1....

c语言,自增++和加减运算
b++是使用b后b的值才加1,a+b++相当于a+b;b=b+1;a+++b也是这样,编译器看成(a++)+b;相当于a+b;a=a+1;最后,在这种问题方面不必纠结,因为这样编程的程序员100%要丢工作的,这样编程难于让别人理解甚至误解,不必记这种东西更不要去学,除了给别人理解增加难度之外没有任何用处。

C语言题目:一个数自加100次
VC++下 include <stdio.h> int main(void){ int i,number,result=0;printf("enter number:");scanf("%d",&number); \/*输入自加的数*\/ for(i=1;i<=100;i++){ result=result+number; \/*自加100次*\/ } printf("%d\\n",result);return 0;} ...

C语言自增自减运算符深入剖析
C语言的自增++,自减--运算符对于初学者来说一直都是个难题,甚至很多老手也会产生困惑,最近我在网上看到一个问题:#include stdio.hvoid main() \/*主函数*\/{int a,b,c,d;a=5;b=5;c=(a++)+(a++)+(a++);d=(++b)+(++b)+(++b);printf("a=%d,b=%d,c=%d,d=%d...

C语言i++,++i如何运算
include <stdio.h>int main (void){int num = 10;printf("%d\\n",++num); \/\/ num先自增1 然后输出 num = 11printf("%d\\n",num++); \/\/ 先输出num = 11 然后 num 进行自增 此时num = 12printf("%d\\n",num--); \/\/ 先输出num = 12 然后 num 进行自减 此时...

相似回答
大家正在搜