C语言二级上机

来源:百度知道 编辑:UC知道 时间:2024/07/08 01:40:44
#include<stdio.h>
#define MIN(x,y) (x)<(y)?(x):(y)
void main()
{int a=1,b=2,c=3,d=4,t;
t=MIN(a+b,c+d)*1000;
printf("t=%d\n",t);
}

为什么等于3呢

你要坚信:宏的作用就是在你的程序里原样替换.你把上面的宏定义原样换到下面就是:

t=MIN(a+b,c+d)*1000;
就变成了
t=(a+b)<(c+d)?(a+b):(c+d)*1000

结果是多少呢?

t=MIN(3,7)
3<7?3:7*1000问号成立,就是3了,要是不成立才7000

MIN(a+b,c+d)*1000带进去是(x)<(y)?(x):(y)*1000,带进去数字是
(1+2)<(3+4)?(1+2):(3+4)*1000,注意(3+4)*1000是一个,因为define只是单纯的字符代替

MIN(a+b,c+d)*1000
这里 相当于 (a+b)<(c+d)?(a+b):((c+d)*1000)
所以取a+b的值
就是3了