C语言问题~~····求救~

来源:百度知道 编辑:UC知道 时间:2024/06/23 23:13:30
请问选择什么~~~~~~~~~

以下程序的输出结果是( )。

A) 16 B) 2 C) 9 D) 1

#define SQR(X) X*X
main()
{
int a=16, k=2, m=1;
a/=SQR(k+m)/SQR(k+m);
printf(“d\n”,a);
}
明白~~~~~~

************ 宏问题 及 正确应用方法 ************
你的程序的结果是这样来的:
a/=k+m*k+m/k+m*k+m
a=16/(2+2+0+2+1)
a=16/7
a=2 (答案是:B)

*********************************
宏应用该注意的问题:
1.宏只是简单的替换,没有保证运算的顺序。
2.宏里的每个可做变量的符号都应该用括号括起来。(如:本例中的X)
3.整个宏也要用括号(),括起来。(如,本例应该些为:“ ((X)*(X)) ” )
最后PS:虽然括号()很多,但是这是正确应用宏应该养成的习惯。“千万要加括号”!!!
*********************************

下面在本例的基础上,给出在对本例的宏应用不同括号后的程序和结果:

#include"stdio.h"
#define SQR(X) X*X
#define SQR_1(X) (X)*(X)
#define SQR_2(X) ((X)*(X))
int main()
{
int a=16, k=2, m=1;
a/=SQR(k+m)/SQR(k+m);
printf("%d\n",a); /*对应宏“X*X”,结果为 2 */

a=16, k=2, m=1;
a/=SQR_1(k+m)/SQR_1(k+m);
printf("%d\n",a); /*对应宏“(X)*(X)”,结果为 1 */

a=16, k=2, m=1;
a/=SQR_2(k+m)/SQR_2(k+m);
printf("%d\n",a); /*对应宏“((X)*(X))”,结果为 16 */
return 0;
}

运行结果:2 1 16