#include<iostream> #include<Cmath> using namespace std; class Cpoint //定义一个点类 { private: double x; double y; public: Cpoint(double xx=0,double yy=0); double distance(Cpoint p) const;//求两点间的距离 void input(); //输入点 void output();//输出点 }; class CTriangle //定义一个三角形类 { public: void setCTriangle(Cpoint &x,Cpoint &y,Cpoint &z); double perimeter(void);//求三角形的周长 double area(void);//求三角形的面积 bool isRightTriangle();//是否为直角三角形 bool isIsoscelesTriangle();//是否为等腰三角形 private: Cpoint A,B,C; }; Cpoint::Cpoint(double xx,double yy):x(xx),y(yy){} //输入坐标点 void Cpoint::input() { char ch; while(1) { cin>>x>>ch>>y; if(ch!=',') cout<<"格式出现错误!"<<endl; else break; } } void Cpoint::output() { cout<<"("<<x<<','<<y<<")"<<endl; } double Cpoint::distance(Cpoint p) const { return sqrt((x-p.x)*(x-p.x)+(y-p.y)*(y-p.y)); } void CTriangle::setCTriangle(Cpoint &x,Cpoint &y,Cpoint &z) { A=x; B=y; C=z; } double CTriangle::perimeter(void)//求周长 { double a=B.distance(C),b=C.distance(A),c=A.distance(B); return (a+b+c); } double CTriangle::area(void)//求面积 { double a=B.distance(C),b=C.distance(A),c=A.distance(B); double p=(a+b+c)/2; return sqrt(p*(p-a)*(p-b)*(p-c)); } bool CTriangle::isRightTriangle() { double a=B.distance(C),b=C.distance(A),c=A.distance(B); if((a*a+b*b-c*c)<(1e-6)||(c*c+b*b-a*a)<(1e-6)||(a*a+c*c-b*b)<(1e-6)) return true; else return false; } bool CTriangle::isIsoscelesTriangle() { double a=B.distance(C),b=C.distance(A),c=A.distance(B); if(((a-b)<1e-6)||((b-c)<1e-6)||((c-a)<1e-6)) return true; else return false; } void main(void) { CTriangle Tri1(Cpoint(4,0),Cpoint(0,0),Cpoint(0,4)); //定义三角形类的一个实例(对象) cout<<"该三角形的周长为:"<<Tri1.perimeter()<<endl; cout<<"该三角形的面积为:"<<Tri1.area()<<endl; cout<<"该三角形"<<(Tri1.isRightTriangle()?"是":"不是")<<"直角三角形"<<endl; cout<<"该三角形"<<(Tri1.isIsoscelesTriangle()?"是":"不是")<<"等腰三角形"<<endl; system("pause"); }
感悟:
感悟;在遇到函数调试不出来时,先把主函数中的函数调用一个一个注销掉,一个个找出错误来,否则一块找时,无从下手。或者有时尽是一个错误,就把所有的错误解决掉了。