有人帮我看看这几题算错是什么原因么(语言-c语言)

有帮我看看这几题是什么原因么 我自己算的是
sun=9
1 2 3 4 5 6 7
z=54
不知道哪里算错了

1、
#define ADD(x) x+x
main( )
{
int m=1,n=2,k=3,sum;
sum=ADD(m+n)*k;
printf(“sum=%d\n”,sum);
}

2、
#define N 1
#define M N+2
#define NUM 2*M+1
main( )
{
int i;
for (i=1; i<=NUM; i++) printf(“%3d ”, i );
}

3、
#define N 3

#define Y(n) ((N+1)n)
main()
{int z;
z=2
(N+Y(5+1));
printf("%d",z);
}

预处理只负责替代,所以最好多用括号,否则会碰到意外的错误。

#define ADD(x) x+x 最好写成: #define ADD(x) ((x)+(x))
同理:
#define M ((N)+2)
#define NUM (2*(M)+1)