第五周——多文件组织多各类——三角形类

来源:互联网 发布:mac 桌面下方出现白条 编辑:程序博客网 时间:2024/06/11 09:59

问题及代码:

主函数:

/*.*Copyright (c) 2014,烟台大学计算机学院*All rights reserved.*文件名称:Lily.cpp*作者:李莉*完成日期:2015年4月6日*版本号:v1.0**问题描述: 回想Engineer类的数据成员,有眼镜、背包等。某Engineer的眼镜、背包,是Glass、Bag类的对象。类中的数据成员,其类型可以是简单类型,也可以是类。通过这种方式,将某些类组合到另外的类中,当作其中的一个“部件”使用。本项目设计一个三角形类,其数据成员不再是三角形三条边的边长,而是三角形的三个顶点。利用设计的三角形类,输入三角形的三个顶点,求出其面积、周长,并判断其是否为直角三角形和等腰三角形。提示:(1)这个问题需要用到两个类,顶点类参照项目1中的CPoint类;(2)三角形类参考下面CTriangle类的声明;(3)充分利用CPoint类中已有的代码实现;(4)关于三条边长的处理,可以增加三个私有属性,在初始化时求出来备用。当然,也可以在需要用到时再计算。*程序输入:三个点的坐标*程序输出:*/#include <iostream>#include <cmath>#include "five.h"using namespace std;int main(){    Cpoint X,Y,Z;    cout<<"请输入第一个点的坐标:"<<endl;    X.input();    cout<<"请输入第二个点的坐标:"<<endl;    Y.input();    cout<<"请输入第三个点的坐标:"<<endl;    Z.input();    Triangle tr(X,Y,Z);    cout<<"三角形的面积为:"<<tr.area()<<endl;    cout<<"三角形的周长为:"<<tr.perimeter()<<endl;    cout<<"三角形"<<(tr.isRightTriangle()?"是":"不是")<<"直角三角形"<<endl;    cout<<"三角形"<<(tr.isIsoscelesTriangle()?"是":"不是")<<"等腰三角形"<<endl;    return 0;}


头文件函数:

#ifndef FIVE_H_INCLUDED#define FIVE_H_INCLUDEDclass Cpoint{private:    double x;    double y;public:    Cpoint (double xx=0,double yy=0);    double Distance(Cpoint p)const;    void input();    void output();};class Triangle{public:    Triangle(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; //三顶点};#endif // FIVE_H_INCLUDED


源文件函数:

#include <iostream>#include <cmath>#include "five.h"using namespace std;Cpoint::Cpoint(double xx,double yy){    x=xx;    y=yy;}void Cpoint::input(){    cin>>x>>y;}void Cpoint::output(){    cout<<"("<<x<<","<<y<<")"<<endl;}double Cpoint::Distance(Cpoint p)const{    double d;    d=sqrt((p.x-x)*(p.x-x)+(p.y-y)*(p.y-y));    return d;}void Triangle::setTriangle(Cpoint &X,Cpoint &Y,Cpoint &Z){    A=X;    B=Y;    C=Z;}float Triangle::perimeter(void){    double a,b,c;    a=A.Distance(B);    b=B.Distance(C);    c=C.Distance(A);    return (a+b+c);}float Triangle::area(void){  double a=B.Distance(C),b=C.Distance(A),c=A.Distance(B);  double s = (a + b + c) / 2;  return sqrt(s * (s - a) * (s - b) * (s - c));}bool Triangle::isRightTriangle(){    double a=B.Distance(C),b=C.Distance(A),c=A.Distance(B);    double max=a;    if(max<b)    {        max=b;    }    if(max<c)    {        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)))    {      return true;    }    else        return false;}bool Triangle::isIsoscelesTriangle(){    double a=B.Distance(C),b=C.Distance(A),c=A.Distance(B);    if((abs(a-b)<1e-7)||(abs(b-c)<1e-7)||(abs(c-a)<1e-7))    {        return true;    }    else        return false;}


运行结果:

心得体会:

多文件组织bingo!!

0 0
原创粉丝点击