等腰三角形具有直角三角形和等腰三角形功能。
示例:
int a,b,c; //a,b and c are three triangle edge.
cout << "please insert a,b,c" << endl;
cin >> a;
cin >> b;
cin >> c;
if(a==b || b==c || c==a){
cout << "isosceles triangle";
}
else if(a*a==b*b+c*c ||b*b==c*c+a*a || c*c==a*a+b*b)
{
cout<<"right triangle");
}
这就是我确定直角三角形和等腰三角形的方式
为什么我不这样做呢?
if(pow(a,2)==pow(b,2)+pow(c,2) ||pow(b,2)==pow(c,2)+pow(a,2) || pow(c,2)==pow(a,2)+pow(b,2)){
if(a==b || b==c || c==a){
cout << "isosceles right triangle";
}
else{
cout << "right tri";
}
}
问题是:确定等腰直角三角形必须输入平方根号。
问题:当a = 1,b = 1,c = sqrt(2)
如何在C ++中将其确定为等腰直角三角形
答案 0 :(得分:1)
在您的示例中,所有边长a
,b
和c
的类型均为int
。等腰直角三角形不能具有所有整数边长。可能应该使用float
或double
。
如果您知道数学上的测试方法,那么用代码实现它应该非常简单。唯一要记住的是,在大多数情况下,由于舍入误差,直接比较浮点数是没有意义的。
数学等式a 2 = b 2 + c 2 应该这样检查:
std::abs(a*a - b*b - c*c) < EPSILON
其中EPSILON
很小,可以忍受浮点数的有限精度。
答案 1 :(得分:0)
基于Evg的评论,这是一个示例实现:
bool IsRightTriangle(double a, double b, double c)
{
double max_allowed_error = 0.1;
return (std::abs(a*a - b*b - c*c) <= max_allowed_error) || (std::abs(b*b - c*c - a*a) <= max_allowed_error) || (std::abs(c*c - a*a - b*b) <= max_allowed_error) ;
}
bool IsIsosceles(double a, double b, double c)
{
return a == b || b == c || c == a;
}
int main()
{
double a, b, c;
cout << "\nEnter length of first side of the triangle ";
cin >> a;
cout << "\nEnter length of second side of the triangle ";
cin >> b;
cout << "\nEnter length of third side of the triangle ";
cin >> c;
bool iso = IsIsosceles(a, b, c);
bool rt = IsRightTriangle(a, b, c);
if (iso && rt) std::cout << "\n Triangle is a Right Isosceles Triangle\n";
else
if (iso) std::cout << "\n Triangle is an Isosceles Triangle \n";
else
if (rt) std::cout << "\n Triangle is a Right Triangle \n";
}