请大家告诉我应该输出多少?
我有如下一段程序:
#include <stdio.h>
#define N 2
#define M N+1
#define NUM (M+1)*M/2
main()
{printf("%d",NUM);
}
请大家告诉我应该输出多少?并请说明原因。谢谢!
问题点数:20、回复次数:9Top
1 楼kingfish(工作很忙,很少来csdn...)回复于 2002-01-07 10:44:39 得分 8
这是用DEFINE定义宏的缺陷
#define NUM (M+1)*M/2
展开:
(2+1+1)*2+1/2
=8
如果非要用,多加括号
#define N 2
#define M (N+1)
#define NUM (M+1)*M/2
Top
2 楼tea78(点点)回复于 2002-01-07 15:53:25 得分 0
谢谢你,不过怎么会这样呢?
既然是缺陷,怎么没有想办法补救呢?Top
3 楼GZCompiler(编译器)回复于 2002-01-07 16:11:22 得分 6
可以补救嘛,将定义改一下:
#define N 2
#define M (N+1)
#define NUM ((M+1)*M/2)
Top
4 楼ZIPPO_TISEKI(zxd)回复于 2002-01-07 16:24:17 得分 0
嗯,思路清楚啊,佩服Top
5 楼rhesus(越堕落越快乐)回复于 2002-01-07 16:26:28 得分 3
#include <stdio.h>
#define N 2
#define M N+1
#define NUM ((M)+1)*(M)/2
main()
{printf("%d",NUM);
}
Top
6 楼steedhorse(晨星)回复于 2002-01-07 16:44:01 得分 3
NUM = (M+1)*M/2
= (N+1+1)*N+1/2
= (2+1+1)*2+1/2
= 4*2+1/2
= 8+0
= 8Top
7 楼no24wgh(老鬼)回复于 2002-01-07 17:16:57 得分 0
讨论这个好象意义不大,如果你敢在自己的工程中如此的滥用宏的话,我敢保证你会死得很难看。Top
8 楼lemon_wei(研究BT,做好P2P)回复于 2002-01-08 09:33:37 得分 0
应该是6
把M,N的 值的代入NUMTop
9 楼lswoyo(懒人码头)回复于 2002-02-03 10:33:33 得分 0
8Top




