当前位置:编程学习 > C/C++ >>

C++ 编程,三角形类

在给出下列程序的基础上,完善三角形类Triangle,给出成员函数的实现。
#include<iostream>
#include<cmath>
using namespace std;
class Point{  //顶点类
private:
double x,y;
public:
Point(double a,double b){x=a;y=b;}
Point(){x=0;y=0;}
void Set(double a,double b){x=a,y=b;}
double GetX(){return x;}
double GetY(){return y;}
};
class Treiangle{ //三角形类
Point x,y,z;
double s1,s2,s3;
public:
...SetTriangle(...);  //设置三角形的三个顶点坐标
...Test(...);             //判断三个顶点是否构成三角形
...Area(...);            //计算三角形的面积
请在类外写出三个函数的定义(如果需要形式参数,请给出形参名和对应类型,以及返回值类型)
提示
1.构成三角形的条件:任意两边之和大于第三边或任意两边之差小于第三边。
2。已知三角形三边,a,b,c,设p=(a+b+c)/2
则面积是S=根号下p(p-a)(p-b)(p-c)
答案:#include "iostream.h"
#include "math.h"
class CPoint//定义点
{
private:
    double x,y;
public:
    CPoint(double a,double b){x=a;y=b;}//构造函数
    CPoint(){x=0;y=0;}
    void Set(double a,double b){x=a,y=b;}//设置点坐标
    double GetX(){return x;}
    double GetY(){return y;}
};
class CTreiangle//三角形类
{
private:
    CPoint x,y,z;
    double s1,s2,s3;
public:
    void SetTriangle(CPoint P1,CPoint p2,CPoint P3);
    bool Test();
    double Area();
};
void CTreiangle::SetTriangle(CPoint P1,CPoint p2,CPoint p3)//设置三角形的三个点并计算三条边的边长
{
    x=P1;
    y=p2;
    z=p3;
    s1=sqrt((x.GetX()-y.GetX())*(x.GetX()-y.GetX())+(x.GetY()-y.GetY())*(x.GetY()-y.GetY()));
    s2=sqrt((x.GetX()-z.GetX())*(x.GetX()-z.GetX())+(x.GetY()-z.GetY())*(x.GetY()-z.GetY()));
    s3=sqrt((z.GetX()-y.GetX())*(z.GetX()-y.GetX())+(z.GetY()-y.GetY())*(z.GetY()-y.GetY()));
}
bool CTreiangle::Test()//检测是不是三角形,原理三点不共线
{
    if((y.GetX()-x.GetX())*z.GetY()==(y.GetY()-x.GetY())*z.GetX()+x.GetY()*y.GetY()-x.GetY()*x.GetY()-x.GetX()*y.GetY()+y.GetX()*x.GetY())
        return false;
    else
        return true;
}
double CTreiangle::Area()//应用海伦公式计算面积并返回
{
    double p,area;
    p=(s1+s2+s3)/2.0;
    area=sqrt(p*(p-s1)*(p-s2)*(p-s3));
    return area;
}
int main()
{
    CPoint temp[3];//定义三个点
    double tempx,tempy;
    CTreiangle treiangle;
    while(1)
    {
        for(int i=0;i<3;i++)
        {
            cout<<"请输入第"<<i+1<<"个点的X坐标"<<endl;
            cin>>tempx;
            cout<<"请输入第"<<i+1<<"个点的Y坐标"<<endl;
            cin>>tempy;
            temp[i].Set(tempx,tempy);
        }
        treiangle.SetTriangle(temp[0],temp[1],temp[2]);
        if(!treiangle.Test())
        {
            cout<<"输入数据不合法不能够形成三角形"<<endl;
            cout<<"重新输入数据"<<endl;
        }
        else
        {
            cout<<"三角形的面积为"<<treiangle.Area()<<endl;
            cout<<"重新输入数据"<<endl;
        }
    }
    return 0;
}
VC6.0编译运行通过
测试图,以3,4,5为例

上一个:C++编程中POSITON用法
下一个:C++编程软件叫什么

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,