第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语言严格区分大写和小写字母