上古世纪 韩服:C的一个小问题

来源:百度文库 编辑:高考问答 时间:2024/05/05 01:51:19
#include <stdio.h>
#define S(a,b,c) 1/2(a+b+c)
#define area(S,a,b,c) sqrtS(S-a)(S-b)(S-c)
void main ()
{
float m,n;
int x,y,z;
scanf("%d,%d,%d",&x,&y,&z);
m=S(x,y,z);
n=area(m,x,y,z);
printf("%f,%f\n",m,n);
}错在哪里啊,有多处.谢谢!

#define S(a,b,c) 1/2(a+b+c)

float m,n;
int x,y,z;
scanf("%d,%d,%d",&x,&y,&z);
m=S(x,y,z);
n=area(m,x,y,z);
慢慢想吧

以下是我改过的,可以运行出正确的结果
#include <stdio.h>
#include <math.h> // sqrt是数学库中的
// define 应该简洁一点
#define S(a,b,c) (float)(0.5*(a+b+c))
#define Area(S,a,b,c) (float)sqrt(S*(S-a)*(S-b)*(S-c)) // 海轮公式??
void main ()
{
float m,n;
int x,y,z;
scanf("%d,%d,%d",&x,&y,&z);
m=S(x,y,z);
n=Area(m,x,y,z);
printf("%f,%f\n",m,n);
}

看来你把函数和#define给搞混淆了,后者只是做简单的替换,而不是值传递或者地址传递。使用#define要和定义的一样
你的定义是#define S(a,b,c) 1/2(a+b+c)
使用却是m=S(x,y,z);
原因就是这么的,锻炼自己一下,自己改吧。
楼主好运。

上楼说得没错,你把函数和预定义给混淆了

#define S(a,b,c) 1/2(a+b+c)
#define area(S,a,b,c) sqrtS(S-a)(S-b)(S-c)
定义宏的时候,程序是不给解释的,只是见到了,就用宏来代替;
应该为##define S(a,b,c) (1/2)*((a)+(b)+(c))
#define area(S,a,b,c) sqrt(S)*((S)-(a))((S)-(b))((S)-(c))
一定要加上括号,,切记,切记。。。