c 语言的两道小习题

来源:百度知道 编辑:UC知道 时间:2024/05/11 14:13:46
1.定义一个宏,交换两个参数的值。(原题是这样,没其他已知条件了,有些无从入手。)
2.有宏定义
#define max(a,b) ((a)>(b)?(a):(b))
下面的表达式将扩展成什么
max(a,max(b,max(c,d)))
如何修改上述表达式,可以使其宏替换变得宵微小一点?

1、#define swap(a,b) {a=a+b;b=a-b;a=a-b;}

2、max(a,max(b,max(c,d))) 扩展成

(a)>((b)>(((c)>(d)?(c):(d)))? (b):(((c)>(d)?(c):(d))))? (a):((b)>(((c)>(d)?(c):(d)))? (b):(((c)>(d)?(c):(d))))

可以修改为:max(max(a,b),max(c,d))

#define swap(a,b,m) m=a;a=b;b=m;

max(max(a,b),max(c,d))

#define max(a,b) ((a)>(b)?(a):(b))
下面的表达式将扩展成什么
max(a,max(b,max(c,d)))

(a>(b>(c>d?c:d))?b:(c>d?c:d))?a:(b>(c>d?c:d))?b:(c>d?c:d)))