题目
编写一个函数,求三角形面积,参数分别是三角形的三个边长,要求返回该三角形的面积。
要求判断三角形边的关系,必须满足:两边之和大于第三边,两边之差小于第三边。 已知三角形的边长a, b, c,求面积area的公式为:
area = sqrt(s * (s - a) * (s - b) * (s - c)) 其中:s = (a + b + c) / 2, sqrt()为求平方根函数。
注意:
1、判断两边之差时使用abs函数。
2、控制小数位数用格式控制符fixed和setprecision,包含头文件iomanip。
一般代码
float getArea(float a, float b, float c);
int main() {
float a=0,b=0,c=0;
cout << "请输入三条边长:";
cin >> a >> b >> c;
if (getArea(a, b, c) == 0)
cout << "输入有误!";
else
cout <<fixed<<setprecision(2)<< getArea(a, b, c) << endl;
}
float getArea(float a, float b, float c) {
float m=0, s=0;
if ((a + b > c && a + c > b && b + c > a) && (abs(a - b )< c && abs(a - c )< b &&abs( b - c )< a))
{
s = (a + b + c) / 2;
m = sqrt(s * (s - a) * (s - b) * (s - c));
return m;
}
else
return 0;
}
改进代码
分开定义两个函数 判断是否构成三角形 和 求三角形面积 使代码更加清晰。
double getArea(double a, double b, double c)
{
double s = (a + b + c) / 2;
return sqrt(s * (s - a) * (s - b) * (s - c));
}
bool Judge(double a, double b, double c)//布尔类型
{
if ((a + b) < c || abs(a - b) > c) {
return 0;
}
else if ((a + c) < b || abs(a - c) > c) {
return 0;
}
else if ((b + c) < a || abs(b - c) > a) {
return 0;
}
return 1;
}
int main()
{
double a, b, c;
cout << "输入三角形的三条边: " << endl;
cin >> a >> b >> c;
if (Judge(a, b, c)) {
cout << "三角形面积 S = " << fixed<<setprecision(2)<< getArea(a, b, c) << endl;
}
else {
cout << "输入有误!" << endl;
}
}