关于c语言的2到题目

来源:百度知道 编辑:UC知道 时间:2024/05/06 12:33:44
55.若有宏定义如下:
#define X 5
#define Y X+1
#define Z Y*X/2
则执行以下printf语句后,输出结果是____D___.
int a;a=Y;
printf("%d\n",Z);
printf("%d\n",--a);
a)7 b)12 c)12 d)7
6 6 5 5

#include <stdio.h>
#define MUL(x,y) (x)*y
main()
{
int a=3,b=4,c;
c=MUL(a++,b++);
printf("%d\n",c);
}
上面程序的输出结果是___A_______.
a)12 b)15 c)20 d) 16
//说说计算过程,谢谢!

1.
/*#define Z Y*X/2没有加括号#define Z (Y)*X/2 结果就不同了*/
Z =Y*X/2
=X+1*X/2
=5+1*5/2
=5+2
=7
--a=--X+1
=4+1
=5
2.c=MUL(a++,b++);
=(a)*y
=3*4
=12
如果是
c=MUL(++a,++b)
则=4*5
=20

宏在编译时会进行替换,相当于
1.
int a;a=5+1;//Y换成(X+1),X又换成5
printf("%d\n",--a);//结果是5
Z的换法照楼上的
2.
c = (a++)*b++;//结果是12; 相当于c = a*b; a++; b++

注:这里(a++)不要以为=4哦,a++是个函数,实现过程序大概是这样的
{
int b = a;
a = a+1;
return b;
}
所以(a++)就等于3,但现在a=4了