满意答案
是刚学C吧?好象对变量的作用域、命名以及命令的使用还要再加强一下。
三个函数中都有错误:
一,看你的程序,似乎是想把变量s作为一个全局变量,在各个函数中使用,可该变量并没有定义。(那个主函数中的S是大写的,与此无关。)
二,变量名与函数名重合,如果s是全局变量的话,那么又与函数s(float,float,float)的命名重复,编译器无法确定同样的一个名字到底是函数还是变量,不能通过编译。同时,在函数area(float,float,float)中,里面有一个求面积的变量area也没有定义。
三,主函数中的语法逻辑错误。
程序的本意是先判断三条边是否符合构成三角形的条件,然后再计算面积。但:
1、这里其实应该用if语句,而不用循环;
2、即使是采用循环,从逻辑上也是错的:照你的程序,只要符合条件(两边之和大于第三边)就一直循环下去,除非不符合方退出,这个程序不能计算出正确的结果。
虽然下面是按尽量按程序的原样改动,但一般而言不提倡使用全局变量,因为使用多了,程序的可移植性会大受影响。
综上所述,程序和如下改动(在保证正确的情况下尽量不改变原程序):
#include
#include
float s;
void main()
{ float area(float a,float b,float c);
float a,b,c,S;
scanf("%f %f %f",&a,&b,&c);
if(a+b>c&&a+c>b);
S=area(a,b,c);}
}
float area(float a,float b,float c)
{
float ss(float a,float b,float c);
float area;
s=ss(a,b,c);
area=sqrt(s*(s-a)*(s-b)*(s-c));
printf("area=%f",area);
return area;
}
float ss(float a,float b,float c)
{
s=(a+b+c)*0.5;
return s;
}
11分享举报