给定程序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。 请改正程序中的错误,

admin2019-04-04  25

问题 给定程序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函数,不得增行或删行,也不得更改程序的结构。
#include
#include
#include
#define  FU (m,n)   (m/n)
float  fun (float  a,float b,float  c)
{  float value;
     value=FU (a+b,a—b) +FU (c+b,c—b) ;
    Return (Value) ;
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)#define FU (m,n) ((m)/(n)) (2) return (value);

解析 本题中函数的功能是计算题干中给出的公式值。本题的解题过程是利用了定义的宏FU,实现了函数中给出的公式的求值。
(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)”,因为“/”的优先级高于“+”或“—”,所以要使用括号限定计算优先顺序。所以将“#define FU(m,n)(m/n)”改为“#define FU(m,n)((m)/(n))”。
(2)第二个标识下返回语句的关键字有误。所以,第二个标识下“Return (value); ”应该改为“return (value); ”,C语言中没有“Return”这个关键字。
转载请注明原文地址:https://jikaoti.com/ti/R5f0FFFM
0

最新回复(0)