改错题
1. 下列给定程序中,函数fun()的功能是:计算函数F(x,y,z)=(x+v)/(x-y)+(z+y)/(z-y)的值。其中,x和y的值不相等,z和y的值不相等。
例如,当x的值为1,y的值为2,z的值为3时,函数值为2.00。
注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include<stdio.h>
#include<stdio.h>
//****found****
#define F(m,n)(m/n)
float fun(float a,float b,float c)
{
float s;
s=F((a+b),(a-b))+F((c+b),(c-b));
//****found****
Return(s);
}
void main()
{
float x,y,z,sum;
printf("input x y z:");
scanf("%f%f%f",&x,&y,&z);
printf("x=%f,y=%f,z=%f\n",x,y,z);
if(x==y||y==z)
{
printf("Data error!\n");
exit(0);
}
sum=fun(x,y,z)
printf("the result is:%5.2f\n",sum);
}
【正确答案】(1)错误:#defineF(m,n)(m/n)
正确:#define F(m,n)(m)/(n)
(2)错误:Return(s);
正确:return(s);
【答案解析】 程序中函数的功能是:计算题目中给出的公式值。第一个标识:fun()函数两次调用宏F来计算“s=F((a+b),(a-b))+F((c+b),(c-b));”。检查宏的定义是否正确,可以用实参代入宏进行展开:并非(a+b)/(a-b),而是(a+b/a-b),因为“/”的优先级高于“+”或“-”,所以要使用括号限定计算优先顺序。故此,将“#define F(m,n)(m/n)”改为“#define F(m,n)(m)/(n)”。
第二个标识下返回语句的关键字有误。因为C语言中区分大小写,所以应将“Return(s);”改成“return(s);”。