坐标求三角形类

* Copyright (c) 2013, 烟台大学计算机学院
* All rights reserved.
* 作    者:马广明
* 完成日期:2014 年 4 月 1 日
* 问题介绍: 坐标求三角形周长面积--常成员函数
* 版 本 号:v1.0
*/
#include <iostream>
#include<Cmath>
using namespace std;
class CPoint
{
private:
    float x;
    float y;
public:
    CPoint(float xx=0,float yy=0):x(xx),y(yy) {}
    float Distance1(CPoint p) const;
    void input();
    void output()
    {
        cout<<"("<<x<<","<<y<<")"<<endl;
    };
};
class CTriangle
{
public:
    CTriangle(CPoint &X,CPoint &Y,CPoint &Z):A(X),B(Y),C(Z) {} //给出三点的构造函数
    void setTriangle(CPoint &X,CPoint &Y,CPoint &Z);//
    float perimeter(void);//计算三角形的周长
    float area(void);//计算并返回三角形的面积
    bool isRightTriangle(); //是否为直角三角形
    bool isIsoscelesTriangle(); //是否为等腰三角形
private:
    CPoint A,B,C; //三顶点
};
void CPoint::input()
{
    char h;
    cout<<"请输入坐标(格式x,y):";
    while(1)
    {
        cin>>x>>h>>y;
        if(h==',')
            break;
        cout<<"格式不对,请重新输入:"<<endl;
    }
}
float CPoint::Distance1(CPoint p)const
{
    float a,b,c;
    a=p.x-x;
    b=p.y-y;
    c=sqrt(a*a+b*b);
    return c;
}
void CTriangle::setTriangle(CPoint &X,CPoint &Y,CPoint &Z)
{
    A=X;
    B=Y;
    C=Z;
}
float CTriangle::perimeter(void)
{
    float a;
    a=A.Distance1(C)+B.Distance1(C)+A.Distance1(B);
    return a;
}
float CTriangle::area(void)
{
    float a,b;
    a=(A.Distance1(C)+B.Distance1(C)+A.Distance1(B))/2;
    b=a*(a-A.Distance1(C))*(a-A.Distance1(B))*(a-B.Distance1(C));
    return b;
}
bool CTriangle::isRightTriangle()
{
    float a,b,c;
    a=B.Distance1(C);
    b=A.Distance1(C);
    c=A.Distance1(B);
    if((a*a+b*b==c*c)||(a*a+c*c==b*b)||(c*c+b*b==a*a))
    {
        return 1;
    }
    else
    {
        return 0;
    }
}
bool CTriangle::isIsoscelesTriangle()
{
    float a,b,c;
    a=B.Distance1(C);
    b=A.Distance1(C);
    c=A.Distance1(B);
    if((a==b)||(b==c)||(a==c))
    {
        return 1;
    }
    else
    {
        return 0;
    }
}
int main()
{
    CPoint X(2,2),Y(4,2),Z(3,5);
    CTriangle ct(X,Y,Z);
    cout<<"周长:"<<ct.perimeter()<<endl;
    cout<<"面积:"<<ct.area()<<endl;
    cout<<(ct.isRightTriangle()?"是":"不是")<<"直角三角形"<<endl;
    cout<<(ct.isIsoscelesTriangle()?"是":"不是")<<"等腰三角形"<<endl;
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值