十万火急 C语言问题!

来源:百度知道 编辑:UC知道 时间:2024/06/04 20:00:31
以下两个程序结果为何不同?
int a=2; int a=2,b;
a=a++*1/3; b=a++*1/3;
printf("%d",a); printf("%d",b);
结果是1和0

你的结果各是多少呀,我的怎么一样!

呵呵,是不一样,看错了,

第一个是++写在后面是后加,拆开就成这样a=a*(1/3);a++;a先为0,然后自加一次,为1;;

后一个是b=a*(1/3);a++;b的值为0,而a自加一次,为3.

其实最关键的是a参与了一次运算,之后,将值赋给自己了,,自身改变了,在自加的,

后一个虽然有运算,但没改变自身,直接自加的。

没分啊。。。
算了
2/3+1=1
2/3=0
还不懂的话加5650807c高手群吧
不过好像满了哎~~!

在遇到";"之前,A++的"++"是不进行运算的,它将在遇到";"才进行运算.
故左边的程序等价于:
a=a*1/3; //a=0
a=a+1; //a=1;

而右边的程序也等价于:
b=a*1/3; //a=2,b=0
a=a+1; //a=3

PS: 而++A则是即时运算的

按顺序先 计算a=a++*1/3; a++就是3 , 3*1/3就是1 所以第一个输出是1

此时a就是1 , 再计算b=a++*1/3; 这里a++就是2 , 2*1/3就是0(整数/整数 结果就是求整整数) 所以这里输出是 0