c语言问题???哪位大侠帮个忙!!!

#include<stdio.h>
void main()
{
int x=1,y;
y=(++x)+(x++)+(--x);
printf("%d,%d\n",x,y);

}
上面的运行结果为 x=2,y=5
但是我们老师说是 2 3
我的想法是y=(++x)+(x++)+(--x); 第一的括号中y1=x=2,二括y2=2 x=3, 三括号 y3=2 x=2 但是答案也不对。(x的值到底是前面的x对后面有影响,还是初始值都为1,在自增,或自减。)如果没影响那么 y=3,x=? (3个括号中那一个的值勒/)

还有一个问题是
#include<stdio.h>
void main()
{
int x=010,y=10;

printf("%d,%d\n",x++,y--);

}
运行结果为 8 ,10
为什么了?
自增,自减在后面那就没有影响 就应该为 10 ,10 三。。。。

谢谢 你看完。。。。3Q~~~~

y=(++x)+(x++)+(--x) 对++x, x的值变为2,同时,第一部分的值是2,对第二部分,x++,先用x的值,即第二部分的值为2(此时X还没执行++操作),第三部分,——x, X的值由2变为1,即第三部分的值为1,故y的值是5,, 同时,在执行完第三部分,即x已被用完,再由第二部分的x++,x由1变为2,故x的值为2.
第二题,010表示的是8进制。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-06-11
你们老师是白痴么,让你们做这种题目,C标准中,求值顺序未定义,所以y=(++x)+(x++)+(--x);这一句y值的结果是不定的,不同编译器下可能会有不同的结果,即便是同一编译器,不同编译选项下也可能会产生不同结果,但是最后x的值是固定的2

下面贴出VC6默认编译选项下,debug模式下的反汇编结果

5: y=(++x)+(x++)+(--x);
0040102F mov eax,dword ptr [ebp-4]
00401032 add eax,1
00401035 mov dword ptr [ebp-4],eax
00401038 mov ecx,dword ptr [ebp-4]
0040103B add ecx,dword ptr [ebp-4]
0040103E mov edx,dword ptr [ebp-4]
00401041 sub edx,1
00401044 mov dword ptr [ebp-4],edx
00401047 add ecx,dword ptr [ebp-4]
0040104A mov dword ptr [ebp-8],ecx
0040104D mov eax,dword ptr [ebp-4]
00401050 add eax,1
00401053 mov dword ptr [ebp-4],eax

做这种标准中未定义的题目毫无意义,实际开发中,没有人会写这种代码,写这种代码的人会直接被boss fire掉

第二题,printf("%d,%d\n",x++,y--);自增自减运算符后缀,传入的参数是原参数010和10,但是该剧语句执行后x和y会分别自增一,自减一
6: printf("%d,%d\n",x++,y--);
00401036 mov eax,dword ptr [ebp-8]
00401039 mov dword ptr [ebp-0Ch],eax
0040103C mov ecx,dword ptr [ebp-0Ch]
0040103F push ecx
00401040 mov edx,dword ptr [ebp-4]
00401043 mov dword ptr [ebp-10h],edx
00401046 mov eax,dword ptr [ebp-10h]
00401049 push eax
0040104A push offset string "%d,%d\n" (0042201c)
0040104F mov ecx,dword ptr [ebp-4]
00401052 add ecx,1
00401055 mov dword ptr [ebp-4],ecx
00401058 mov edx,dword ptr [ebp-8]
0040105B sub edx,1
0040105E mov dword ptr [ebp-8],edx
00401061 call printf (004010a0)
00401066 add esp,0Ch本回答被网友采纳
第2个回答  2012-06-11
y=(++x)+(x++)+(--x);
第一个++x,先把x加1,然后参加运算,此事x变为2.
第二个x++,x先参加运算,运算完了再加1,相当于2+2,运算完了之后x为3.
第三个--x,此时x为3,先对x进行自减1,x变为2,然后参加运算,相当于3+2.
所以最后x是2,y是5.追问

y=(++x)+(x++)+(--x);
第一个++x,先把x加1,然后参加运算,此事x变为2.
第二个x++,x先参加运算,运算完了再加1,相当于2+2,运算完了之后x为3.
第三个--x,此时x为3,先对x进行自减1,x变为2,然后参加运算,相当于3+2.
所以最后x是2,y是5.

第三个--x,此时x为3,先对x进行自减1,x变为2,然后参加运算,相当于2+2+2.(是不是应该这样哦???)

第3个回答  2012-06-11
++x,先+再赋值
x++,先取值再+
所以y1=2,y2=2,y3=1
第二个8应该是8进制,然后先赋值就是打印8和10,之后再运算
第4个回答  2012-06-11
自加自减在后没有影响……所以你前面的y=(++x)+(x++)+(--x)=2+2+1=5
至于后面的,如果你把“int x=010”改成“int x=10”就对了……前面多了一个“0”,x的值就变成8进制的了……于是输出变成8~
第5个回答  2012-06-11
运算符的优先级吧,很重要的,自己好好研究下
第6个回答  2012-06-11
哇塞 这坑爹的吧追问

看不懂啊~~~~我也不懂!!

追答

你看不懂 我更看不懂 我VB都不懂 别说介个了

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网