第五周项目二三角形类

来源:互联网 发布:matlab中选择子矩阵 编辑:程序博客网 时间:2024/05/27 20:32
/*   * Copyright (c) 2015, 烟台大学计算机学院   * All rights reserved.   * 文件名称:test.cpp   * 作    者:姜甜甜   * 完成日期:2015年 4 月 8日   * 版 本 号:v1.0   *   * 问题描述:本项目设计一个三角形类,其数据成员不再是三角形三条边的边长,而是三角形的三个顶点。利用设计的三角形类,输入三角形的三个顶点,求出其面积、周长,   并判断其是否为直角三角形和等腰三角形。   提示:(1)这个问题需要用到两个类,顶点类参照项目1中的CPoint类;  (2)三角形类参考下面CTriangle类的声明;(3)充分利用CPoint类中已有的代码实现;(4)关于三条边   的处理,可以增加三个私有属性,在初始化时求出来备用 */

#include <iostream>#include<cmath>using namespace std;class CPoint{private:    double x;  // 横坐标    double y;  // 纵坐标public:    CPoint(double xx=0,double yy=0);    double Distance1(CPoint p) const; //两点之间的距离(一点是当前点——想到this了吗?,另一点为p)    void input();  //以x,y 形式输入坐标点    void output(); //以(x,y) 形式输出坐标点};CPoint::CPoint(double xx,double yy){    x=xx;    y=yy;}double CPoint::Distance1(CPoint p) const{    double s;    s=sqrt((this->x-p.x)*(this->x-p.x)+(this->y-p.y)*(this->y-p.y));    return s;}void CPoint::input(){    char c;    while(1)    {        cin>>x>>c>>y;        if (c==',') break;        cout<<"输入的数据格式不符合规范,请重新输入\n";    }}void CPoint::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; //三顶点    double a,b,c;//三边长};void CTriangle::setTriangle(CPoint &X,CPoint &Y,CPoint &Z){    a=X.Distance1(Y);    b=X.Distance1(Z);    c=Y.Distance1(Z);    cout<<"三边长是:"<<a<<" "<<b<<" "<<c;}float CTriangle::perimeter(void){    return a+b+c;}float CTriangle::area(void){    float p;    double s;    p=(a+b+c)/2;    if(p-a>0&&p-b>0&&p-c>0)        s=(p*(p-a)*(p-b)*(p-c));    else cout<<"构不成三角形!"<<endl;    return sqrt(s);}bool CTriangle::isRightTriangle(){    double max=a;    if(b>max) max=b;    if(c>max) max=c;    if(((max==a)&&(abs(a*a-b*b-c*c)<1e-7))||((max==b)&&(abs(b*b-a*a-c*c)<1e-7))||((max==c)&&(abs(c*c-b*b-a*a)<1e-7)))        //if((a*a+b*b==c*c)||(a*a+c*c==b*b)||(b*b+c*c==a*a))错        return true;    return false;}bool CTriangle::isIsoscelesTriangle(){    if((abs(a-b)<1e-7)||(abs(b-c)<1e-7)||(abs(c-a)<1e-7))        //if(a==b||a==c||b==c)错        return true;    return false;}int main(){    cout<<"输入三角形三个顶点的值:"<<'\n';    CPoint t1,t2,t3;    t1.input();    t2.input();    t3.input();    CTriangle s(t1,t2,t3);    s.setTriangle(t1,t2,t3);    cout<<"周长是:"<<s.perimeter()<<endl;    cout<<"面积是:"<<s.area()<<endl;    if(s.isRightTriangle())        cout<<"是直角三角形."<<endl;    else cout<<"不是直角三角形"<<endl;    if(s.isIsoscelesTriangle())        cout<<"是等腰三角形";    else cout<<"不是等腰三角形";    return 0;}

笔会:数据类型,三角形的三边长构成三角形。double类型的比较

0 0