2.创建一个CPoint类,代表平面直角坐标系中的点,创建构造函数和运算符重载函数,运算符重载为类重载(非友元重载),可以实现计算两个点之间的距离。可以根据需要加入自己的成员变量或成员函数。
要求:(1)输入两个点的坐标,输出两个点之间的距离。(2)重载运算符为“-”。
3.创建一个CTriangle类,需要用到第二题中创建的类,即用3点来代表一个三角形,输入三个点的坐标,实现判断此三角形是不是直角三角形,并输出此三角形的周长。可以根据需要加入自己的成员变量或成员函数。
要求:(1)输入三个点的坐标,输出周长并给出是否是直角三角形的信息。(2)注意程序的健壮性。
网上给出的有类似解析,但是看起来实在太乱而且不符合要求,所以在此手敲代码,判断非整形的数比较大小,就用两数相减然后绝对值小于某个数。
#include<iostream>
#include<math.h>
using namespace std;
class CPoint{
private:
double x;
double y;
public:
CPoint(){
}
CPoint(double a,double b):x(a),y(b){
};
void assign(double a,double b){
x=a;
y=b;
}
double distance(CPoint a){
return sqrt(pow(a.x-x,2)+pow(a.y-y,2));
}
CPoint operator-(CPoint a){
return CPoint(x-a.x,y-a.y);
}
void show(){
cout<<"横坐标为:"<<x<<endl<<"纵坐标为:"<<y<<endl;
}
};
class CTriangle{
private:
CPoint a,b,c;
public:
CTriangle(){
}
CTriangle(double ax,double ay,double bx,double by,double cx,double cy){
a.assign(ax,ay);
b.assign(bx,by);
c.assign(cx,cy);
}
double zhouchang(){
return a.distance(b)+a.distance(c)+b.distance(c);
}
bool right(){
return abs(pow(a.distance(b),2)+pow(a.distance(c),2)-pow(b.distance(c),2))<0.01||
abs(pow(a.distance(b),2)-pow(a.distance(c),2)-pow(b.distance(c),2))<0.01||
abs(pow(b.distance(c),2)+pow(b.distance(a),2)-pow(a.distance(c),2))<0.01;
}
};
int main(){
double ax,ay,bx,by,cx,cy;
CPoint a,b,c,temp;
// cout<<"请输入坐标x和坐标y,按回车键结束"<<endl;
// while(cin>>x>>y>>m>>n){
// a.assign(x,y);
// b.assign(m,n);
// cout<<"两点间的距离为:"<<a.distance(b)<<endl;
// c=a-b;
// c.show();
// }
while(1){
cin>>ax>>ay>>bx>>by>>cx>>cy;
CTriangle s(ax,ay,bx,by,cx,cy);
cout<<"周长是:"<<s.zhouchang()<<endl<<"是否是直角三角形:"<<s.right()<<endl;
}
}
第一个类为点类,第二个为计算三角形的,注释部分为第一题的输出,解答为第二题。