问答题 给定程序MODI1.C中函数fun的功能是:计算函数(x,y,z)=(x+y)/(x-y)+(z+y)/(z-y)的值。其中x和y的值不等,z和Y的值不等。例如,当x的值为9、y的值为11、z的值为15时,函数值为-3.50。 请改正程序中的错误,使它能得出正确结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。1 #include<stdio.h>2 #include<math.h>3 #include<stdlib.h>4 /**********found**********/5 #define FU(m,n) (m/n)6 float fun(float a,float b, float c)7 { float value ;8 value=FU(a+b,a-b)+FU(c+b,c-b);9 /**********found**********/10 Return(Value);11 }12 main()13 { float x,y,z,sum;14 printf(''Input x y z:'');15 scanf(''%f%f%f'',&x,&y,&z);16 printf(''x=%f,y=%f,z=%f\n'',x,y,z);17 if(x==y || y==z){printf(''Data error!\n''); exit(0);}18 sum=fun(x,y,z);19 printf(''The result is:%5.2f\n'',sum);20 }
【正确答案】正确答案:(1)#define Fu(m,n) ((m)/(n)) (2)return (value);
【答案解析】解析:(1)函数fun两次调用宏FU来计算“value=FU (a+b,a-b)+FU(c+b,c-b);”。检查宏的定义是否正确,可以用实参代入宏进行展开:(a+b/a-b),由此看到,“FU(a+b,a-b)”进行的计算不是“(a+b)/(a-b)”,而是“(a+b/a-b)”,因为“/”的优先级高于“+”或“-”,所以要使用括号限定计算优先顺序。所以将“#deftne FU(m,n)(m/n)”改为“#define FU(m,n)((m)/(n))”。 (2)第二个标识下返回语句的关键字有误。所以,第二个标识下“Return(value);”应该改为“return (value):”,C语言中没有“Return”这个关键字。