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++编程软件叫什么