标题:请教:下题的结果为什么是3,28??
只看楼主
zhuxiaoan
Rank: 1
等 级:新手上路
帖 子:32
专家分:0
注 册:2006-6-1
得分:0 

#define MIN(x,y) (x)>(y)?(x):(y)
#define T(x,y,r) x*r*y/4
main()
{
int a=1,b=3,c=5,s1,s2;
s1=MIN(a=b,b-a);
s2=T(a++,a*++b,a+b+c);
printf("%d,%d",s1,s2);
}

答案:3 28
是正确的;

大家主要的问题是s2为什么是28

x=a++ ,y=a*++b, r=a+b+c
x=3, y=3*4, r=3+4+5
s2=3*3+4+5+3*4/4=9+4+15= 28

大家会问a会什么不变.首先a++是先运算后加1,所以,x=a++=3,,
然后s2=T(a++, a*++b, a+b+c);看清楚了,因为每个式子后面都是逗号,并不是分号,
所以进行a*++b,时,,a还是没有加1,,仍然是3.

[此贴子已经被作者于2006-11-10 20:17:01编辑过]

2006-11-10 20:13



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-101499-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.859524 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved