求助“全国计算机二级C语言 ”中一题!!!

请问下图中的这道目答案是什么?

如何分析此题,原理是什么?

谢谢~!
答案为(D).......

第1个回答  2009-09-04
答案是(D)做此类题要格外小心!
理由:此题有二个明显的错误。
其一在于预处理语句后面不能加分号,这是最主要的错误;其二应在main()前加上一个void,当然这不会影响结果。正确程序如下:
#include<stdio.h>
#define PT 3.5
#define S(x) PT*x*x
void main()
{
int a=1,b=2;
printf("%4.1f\n",S(a+b));
}
你可以调试一下。
第2个回答  2009-09-07
选D,解释如下:
宏替换只是简单的替换,不会像调用函数一样传递参数,主函数中的S(a+b)实际上是3.5*a+b*a+b(只是简单地把PT换为3.5,把x换为a+b,而不是把a+b的值传给x,这是个易错点)
其中变量a的值为1,b的值为2,所以计算结果是7.5
但是上述解答忽略了一个重要问题:因为a、b都为int型数据,而在格式输出里的输出符是%f,所以最后是程序有错,无输出结果
第3个回答  2009-08-31
当然b了。

S(x)是宏定义的一个函数相当于

float S(float x)
{
float a= PI*x*x;
return(a);
}

PI也是宏定义
值为 3.5本回答被提问者和网友采纳
第4个回答  2009-08-31
你的图片太小了,放大后就一点看不清了~~~~
第5个回答  2009-08-31
B
3.5*3*3=31.5
相似回答