C语言 预处理命令

来源:百度知道 编辑:UC知道 时间:2024/05/15 13:27:03
以下程序的输出的结果()
#define SQR(x) x*x
main()
{
int a=16,k=2,m=1;
a/=SQR(k+m)/SQR(k+m)
printf("%d\n",a);
}
请说明具体做法!
答案是2

a/=SQR(k+m)/SQR(k+m)
因为你在宏定义中没有吧x*x括起来
故转化为
a/=k+m*k+m/k+m*k+m
a/=2+2+0+2+1
a=16/7
a=2

两个相等的不为0数相除,结果不是1吗?

这个还有什么具体做法啊

还是给你说明一下吧

根据预处理命令,SQR(k+m)=(k+m)*(k+m)
因为k+m不等于0
所以SOR(k+m)/SOR(k+m)=1

a/=SOR(k+m)/SOR(k+m) 相当于a/=1
这个表达式相当于 a=a/1
那a还是16.

SQR(k+m)/SQR(k+m) 替换为 x*x 为7 a/=SQR(k+m)/SQR(k+m) 结果就为 2

#define SQR(x) x*x
因为x两端没括号,所以在替换时,
SQR(k+m)/SQR(k+m)
替换为k+m*k+m/k+m*k+m为7,
然后a/=SQR(k+m)/SQR(k+m)
即为16/7,整数除法发生截断,所以为2.