C语言的问题

给定程序MODI1。C中函数FUN的功能是:计算函数
F(X,Y,Z)=(X+Y)/(X-Y)+(Z+Y)/(Z-Y)的值。其中X和Y的值
不等,Z和Y不等。例如:
当X=9时 Y=11 Z=15时 函数值为-3。50
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动MAIN函数,不得增行减行,也不得改变程序的结构

【MODI1.C】
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
/************found************/
#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);
/************found************/
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);
}
说一下为什么错了 为什么那样改~!

#include <stdio.h>
#include <math.h>
#include <stdlib.h>
/************found************/
#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));//这里还要加括号,因为宏定义不会帮你加括号,你用a=0就会输出不对的,因为FU(a+b,a-b)=a+b/a-b了,后面的也一样,算算看,所以要加括号
/************found************/
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个回答  推荐于2016-01-12
宏定义的参数添加上括号,因为宏替换是直接字符替换,
否则直接带入 参数后,表达式计算顺序就错了

FU(a+b,a-b)
替换以后就成了
a+b/a-b
这样计算顺序就错了
加上括号就行了
#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);
/************found************/
Return(Value); 这里 Return r小写, Value v小写
}

#include <stdio.h>
#include <math.h>
#include <stdlib.h>
/************found************/
#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);
/************found************/
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);
}本回答被提问者采纳
第2个回答  2009-06-14
【MODI1.C】
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
/************found************/
#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);
/************found************/
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);
}
第3个回答  2009-06-14
value=FU(a+b,a-b)+FU(c+b,c-b);
改为:value=FU((a+b),(a-b))+FU((c+b),(c-b));

是因为:原做法会编译成 value=(a+b/a-b)+(c+b/c-b);
而不是 value=((a+b)/(a-b))+((c+b)/(c-b));

Return(Value);
改为:return(Value);

因为:c语言区分大小写
第4个回答  2009-06-15
/************found************/
#define FU(m,n) (m/n)
这句改为 #define FU(m,n) ((m)/(n))
原来的样子在替换value=FU(a+b,a-b)+FU(c+b,c-b);时会给替换成是value=a+b/a-b+ c+b/c-b 不会自动带括号的,必须事先给加上括号

/************found************/
Return(Value);
本句中Return都需要小写字母 return (value) 因为C语言严格区分大写和小写字母
相似回答