| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1666 人关注过本帖
标题:宏的问题
取消只看楼主 加入收藏
xuwinsun
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2004-8-17
收藏
 问题点数:0 回复次数:13 
宏的问题
#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\n",s1,s2);

    getch();    /* 请不要删除此行 */

}



请教,s2为什么等于28?

谢谢

2004-08-17 15:08
xuwinsun
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2004-8-17
收藏
得分:0 
是谭老的习题集上的,
计算机算出是28
可就是不明白为什么?



我:“日本人也算人?” 上帝:“不算。将它们圈养就行了。美国人在它们头上扔两蛋不就乖得很吗?你们讲究什么仁义道德?” http://www./bbs/dispbbs.asp?BoardID=1&RootID=36493&id=36500&star=1&skin=0
2004-08-18 09:43
xuwinsun
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2004-8-17
收藏
得分: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\n",s1,s2);
   
}



不好意思,输入调试时多了()。
将第二个#define 改成     #define  x*r*y/4
结果就是28。



郁闷!
为什么啊?

我:“日本人也算人?” 上帝:“不算。将它们圈养就行了。美国人在它们头上扔两蛋不就乖得很吗?你们讲究什么仁义道德?” http://www./bbs/dispbbs.asp?BoardID=1&RootID=36493&id=36500&star=1&skin=0
2004-08-18 10:29
xuwinsun
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2004-8-17
收藏
得分:0 
请详细指点一二。
谢谢!
a++*a    = 12?
b=4
c*a*++b/4=5*4*4/4=20
问题在哪?????
计算顺序是否是左到右?
谢谢!


我:“日本人也算人?” 上帝:“不算。将它们圈养就行了。美国人在它们头上扔两蛋不就乖得很吗?你们讲究什么仁义道德?” http://www./bbs/dispbbs.asp?BoardID=1&RootID=36493&id=36500&star=1&skin=0
2004-08-18 11:02
xuwinsun
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2004-8-17
收藏
得分:0 
还是糊涂:
如果不调用s2=T(。。。。)
直接使用以下语句:

printf("%d\n",a++*a+b+c*a*++b/4);


结果????



郁闷!






我:“日本人也算人?” 上帝:“不算。将它们圈养就行了。美国人在它们头上扔两蛋不就乖得很吗?你们讲究什么仁义道德?” http://www./bbs/dispbbs.asp?BoardID=1&RootID=36493&id=36500&star=1&skin=0
2004-08-18 11:12
xuwinsun
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2004-8-17
收藏
得分:0 
还是糊涂:
如果不调用s2=T(。。。。)
直接使用以下语句:

printf("%d\n",a++*a+b+c*a*++b/4);


结果????

为什么是31??算法和调用T(x,y,r)有什么不同?????


郁闷!

我:“日本人也算人?” 上帝:“不算。将它们圈养就行了。美国人在它们头上扔两蛋不就乖得很吗?你们讲究什么仁义道德?” http://www./bbs/dispbbs.asp?BoardID=1&RootID=36493&id=36500&star=1&skin=0
2004-08-18 11:27
xuwinsun
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2004-8-17
收藏
得分:0 
b应该是4,没有什么问题,先++b
中间的b成了4,可
printf("%d\n",a++*a+b+c*a*++b/4);
和原先的区别在哪????


郁闷!

我:“日本人也算人?” 上帝:“不算。将它们圈养就行了。美国人在它们头上扔两蛋不就乖得很吗?你们讲究什么仁义道德?” http://www./bbs/dispbbs.asp?BoardID=1&RootID=36493&id=36500&star=1&skin=0
2004-08-18 11:29
xuwinsun
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2004-8-17
收藏
得分:0 
先计算最后的c*a*++b,则b=4,再计算中间的+b+,所有b=4



郁闷啊郁闷!my god!

我:“日本人也算人?” 上帝:“不算。将它们圈养就行了。美国人在它们头上扔两蛋不就乖得很吗?你们讲究什么仁义道德?” http://www./bbs/dispbbs.asp?BoardID=1&RootID=36493&id=36500&star=1&skin=0
2004-08-18 11:41
xuwinsun
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2004-8-17
收藏
得分:0 
1、不是我要这么做,这是一道试题。谭浩强书上的练习。
2、为什么调用T宏和直接展开后printf结果不同?
3、定义宏时为 T(x,y,r)    x*r*y/4  没有()




郁闷!

我:“日本人也算人?” 上帝:“不算。将它们圈养就行了。美国人在它们头上扔两蛋不就乖得很吗?你们讲究什么仁义道德?” http://www./bbs/dispbbs.asp?BoardID=1&RootID=36493&id=36500&star=1&skin=0
2004-08-18 11:51
xuwinsun
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2004-8-17
收藏
得分:0 
这我知道,可现在的printf中没有“,”运算。只有一个语句。


郁闷!

我:“日本人也算人?” 上帝:“不算。将它们圈养就行了。美国人在它们头上扔两蛋不就乖得很吗?你们讲究什么仁义道德?” http://www./bbs/dispbbs.asp?BoardID=1&RootID=36493&id=36500&star=1&skin=0
2004-08-18 11:55
快速回复:宏的问题
数据加载中...
 
   



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

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