http 33eee.cnm:执行下面的程序后,a的值是

来源:百度文库 编辑:中科新闻网 时间:2024/04/29 17:15:22
执行下面的程序后,a的值是
#define SQR(X) X*X
main( )
{ int a=10,k=2,m=1;
a/=SQR(k+m)/SQR(k+m);
printf("%d\n",a); }
A) 10 B) 1 C) 9 D) 0

被骗了吧,这题很有陷阱的,答案是 B。

严格地说,这是一个不规范的程序,因为:

#define SQR(X) X*X

并不像我们想像的那样,因为它如果展到程序中:

a /= SQR(k + m) / SQR(k + m);

其实是:

a /= k + m * k + m / k + m * k + m;

注意到没有?并不是我们希望的结果,因为在 #define 中,我们没有给 X*X 加上括号!所以实际的情况,这就成了:

a /= 2 + 1 * 2 + 1 / 2 + 1 * 2 + 1;



a /= 7;

显然结果 a 就是 1

10
先声明 sqr(x)=x^2
a/=...就是 a=a/(...)

所以 a=a/(SQR(k+m)/SQR(K+M))

/\ (SQR(k+m)/SQR(K+M)=1
a=a/1
=10/1
=10

选A

二楼正解
一楼C肯定挂了