OJC++【id:91】【20分】B. 三角形类(构造与析构)

题目描述

定义一个三角形类CTriangle,属性包含三条边和三角形类型,其中用字符串保存三角形类型。三角形类型如下:

等腰三角形:isosceles triangle
直角三角形:right triangle
等腰直角三角形:isosceles right triangle
等边三角型:equilateral triangle
一般三角形:general triangle
不能构成三角形:no triangle

其中判断直角三角形条件:三角形三边中的一边长度平方等于另两边长度平方之和

类行为包括构造、析构、计算面积等等。其中构造函数将设置三条边长度,并且判断三条边能否构成三角形、并设置三角形类型。析构函数将三条边长度清0,并将三角形类型设置为none

三角形面积计算如下

输入

测试数据的组数

第一组边1 第一组边2  第一组边3

第二组边1 第二组边2 第二组边3

......

输出

第一个三角形类型,面积

第二个三角形类型,面积

......

如果不形成三角形,就无需输出面积

面积精度到小数点后1位

IO模式

本题IO模式为标准输入/输出(Standard IO),你需要从标准输入流中读入数据,并将答案输出至标准输出流中。


输入样例1

3\n
3.0 2.0 6.0\n
3.0 4.0 5.0\n
1.0 1.0 1.414

输出样例1

no triangle\n
right triangle, 6.0\n
isosceles right triangle, 0.5\n

AC代码

#include<iostream>
#include<iomanip>
#include<cmath>
using namespace std;
class CTriangle {
    double a, b, c;
public:
    string type;
    CTriangle(double ta, double tb, double tc);
    ~CTriangle();
    void setType();
};
CTriangle::CTriangle(double ta, double tb, double tc):a(ta),b(tb),c(tc){}
CTriangle::~CTriangle(){
    a = 0;b = 0;c = 0;
    type = 'none';
}
void CTriangle::setType() {
    if (a + b <= c || a + c <= b || b + c <= a){       
        type = "no triangle";
        cout << type << endl;
    }
    else {    //是三角形
        double S, p;
        p = 0.5 * (a + b + c);
        S = sqrt(p * (p - a) * (p - b) * (p - c));
        if (a == b && b == c)//等边
            type = "equilateral triangle";
        else if (a == b || b == c || c == a) {    //等腰
            if (fabs(a * a - b * b - c * c) < 0.01 || fabs(b * b - c * c - a * a) < 0.01 || fabs(c * c - a * a - b * b) < 0.01) {    //等腰直角
                type = "isosceles right triangle";
            }
            else type = "isosceles triangle";
        }
        else if (fabs(a * a - b * b - c * c) < 0.01 || fabs(b * b - c * c - a * a) < 0.01 || fabs(c * c - a * a - b * b) < 0.01) {
            type = "right triangle";
        }    //直角
        else type = "general triangle";     //普通
        cout << type << ", ";
        cout << fixed << setprecision(1) << S << endl;
    }

}
int main() {
    int t; 
    cin >> t;
    while (t--) {
        double ta, tb, tc;
        cin >> ta >> tb >> tc;
        CTriangle C(ta, tb, tc);
        C.setType();
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值