/* (程序头部注释开始)
* 程序的版权和版本声明部分
* Copyright (c) 2011, 烟台大学计算机学院学生
* All rights reserved.
* 文件名称:设计一个三角形类,能够输入三角形的三个顶点,求出其面积、周长,并判断其是否为直角三角形和等腰三角形。
* 作 者: 雷恒鑫
* 完成日期: 2012 年 03 月 26 日
* 版 本 号: V1.0
* 对任务及求解方法的描述部分
* 输入描述:
* 问题描述:
* 程序输出:
* 程序头部的注释结束
*/
#include<iostream> #include<cmath> using namespace std; class CPoint { private: double x; // 横坐标 double y; // 纵坐标 public: CPoint(double xx=0,double yy=0); float getx(); float gety(); }; class CTriangle { public: CTriangle(CPoint &X,CPoint &Y,CPoint &Z,int i=0):A(X),B(Y),C(Z),i(i){} //给出三点的构造函数 void setTriangle(CPoint &X,CPoint &Y,CPoint &Z); float perimeter(void);//计算三角形的周长 float area(void);//计算并返回三角形的面积 void isRightTriangle(); //是否为直角三角形 void isIsoscelesTriangle(); //是否为等腰三角形 void Distance(CPoint &p,CPoint &q) ; // 两点之间的距离(一点是当前点,另一点为参数p) float CTriangle::Distance1(CPoint &p,CPoint &q); private: CPoint A,B,C; //三顶点 float bian[3]; int i; }; void main() { CPoint c1(0,0),c2(0,1),c3(1,0); CTriangle m(c1,c2,c3); m.setTriangle(c1,c2,c3); m.Distance(c1,c2); m.Distance(c1,c3); m.Distance(c2,c3); cout<<"三角形的周长为:"<<m.perimeter()<<endl;//计算三角形的周长 cout<<"三角形的面积为:"<<m.area()<<endl;//计算并返回三角形的面积 m.isRightTriangle(); //是否为直角三角形 m.isIsoscelesTriangle(); //是否为等腰三角形 system("PAUSE"); } float CPoint::getx() { return x; } float CPoint::gety() { return y; } CPoint::CPoint(double xx,double yy) { x=xx; y=yy; } void CTriangle::Distance(CPoint &p,CPoint &q) { bian[i]=sqrt((p.getx()-q.getx())*(p.getx()-q.getx())+(p.gety()-q.gety())*(p.gety()-q.gety())); ++i; } float CTriangle::Distance1(CPoint &p,CPoint &q) { bian[i]=(p.getx()-q.getx())*(p.getx()-q.getx())+(p.gety()-q.gety())*(p.gety()-q.gety()); ++i; return bian[i-1]; } float CTriangle::perimeter(void)//计算三角形的周长 { float s=0; --i; s=s+bian[i]+bian[i-1]+bian[i-2]; return s; } float CTriangle::area(void) //计算并返回三角形的面积 { float s,m; int i=0; m=(bian[i]+bian[i+1]+bian[i+2])/2; s=sqrt(m*(m-bian[i])*(m-bian[i+1])*(m-bian[i+2])); return s; } void CTriangle::isRightTriangle() //是否为直角三角形 { i=0; float m,n,c; m=Distance1(A,B); n=Distance1(A,C); c=Distance1(B,C); // m=bian[i]; // n=bian[i+1]; // c=bian[i+2]; if((m+n)==c||(m+c)==n||(c+n)==m) { cout<<"此三角形为直角三角形"<<endl; } else { cout<<"此三角形不是直角三角形"<<endl; } } void CTriangle::isIsoscelesTriangle() //是否为等腰三角形 { float m,n,c; i=0; m=bian[i]; n=bian[i+1]; c=bian[i+2]; if(m==n||m==c||n==c) { cout<<"此三角形为等腰三角形"<<endl; } else { cout<<"此三角形不是等腰三角形"<<endl; } } void CTriangle::setTriangle(CPoint &X,CPoint &Y,CPoint &Z) { A=X; B=Y; C=Z; }
经验积累:
1.我学会了如何进行对象的常引用。
以下是改进的程序:
#include<iostream> #include<cmath> using namespace std; class CPoint { private: double x; // 横坐标 double y; // 纵坐标 public: CPoint(double xx=0,double yy=0); double getx(); double gety(); }; class CTriangle { public: CTriangle(CPoint &X,CPoint &Y,CPoint &Z,int i=0):A(X),B(Y),C(Z),i(i){} //给出三点的构造函数 void setTriangle(CPoint &X,CPoint &Y,CPoint &Z); float perimeter(void);//计算三角形的周长 float area(void);//计算并返回三角形的面积 void isRightTriangle(); //是否为直角三角形 void isIsoscelesTriangle(); //是否为等腰三角形 void Distance(CPoint &p,CPoint &q) ; // 两点之间的距离(一点是当前点,另一点为参数p) float CTriangle::Distance1(CPoint &p,CPoint &q); private: CPoint A,B,C; //三顶点 float bian[3]; int i; }; void main() { CPoint c1(1,1),c2(4,1),c3(1,5); cout<<"您为三角形的三个顶点赋的初值的初值为:"; cout<<"("<<c1.getx<<","<<c1.gety<<")"; cout<<"("<<c2.getx<<","<<c2.gety<<")"; cout<<"("<<c3.getx<<","<<c3.gety<<")"<<endl; CTriangle m(c1,c2,c3); m.setTriangle(c1,c2,c3); m.Distance(c1,c2); m.Distance(c1,c3); m.Distance(c2,c3); cout<<"三角形的周长为:"<<m.perimeter()<<endl;//计算三角形的周长 cout<<"三角形的面积为:"<<m.area()<<endl;//计算并返回三角形的面积 m.isRightTriangle(); //是否为直角三角形 m.isIsoscelesTriangle(); //是否为等腰三角形 system("PAUSE"); } double CPoint::getx() { return x; } double CPoint::gety() { return y; } CPoint::CPoint(double xx,double yy) { x=xx; y=yy; } void CTriangle::Distance(CPoint &p,CPoint &q) { bian[i]=sqrt((p.getx()-q.getx())*(p.getx()-q.getx())+(p.gety()-q.gety())*(p.gety()-q.gety())); ++i; } float CTriangle::Distance1(CPoint &p,CPoint &q) { bian[i]=(p.getx()-q.getx())*(p.getx()-q.getx())+(p.gety()-q.gety())*(p.gety()-q.gety()); ++i; return bian[i-1]; } float CTriangle::perimeter(void)//计算三角形的周长 { float s=0; --i; s=s+bian[i]+bian[i-1]+bian[i-2]; return s; } float CTriangle::area(void) //计算并返回三角形的面积 { float s,m; int i=0; m=(bian[i]+bian[i+1]+bian[i+2])/2; s=sqrt(m*(m-bian[i])*(m-bian[i+1])*(m-bian[i+2])); return s; } void CTriangle::isRightTriangle() //是否为直角三角形 { i=0; float m,n,c; m=Distance1(A,B); n=Distance1(A,C); c=Distance1(B,C); // m=bian[i]; // n=bian[i+1]; // c=bian[i+2]; if((m+n)==c||(m+c)==n||(c+n)==m) { cout<<"此三角形为直角三角形"<<endl; } else { cout<<"此三角形不是直角三角形"<<endl; } } void CTriangle::isIsoscelesTriangle() //是否为等腰三角形 { float m,n,c; i=0; m=bian[i]; n=bian[i+1]; c=bian[i+2]; if(m==n||m==c||n==c) { cout<<"此三角形为等腰三角形"<<endl; } else { cout<<"此三角形不是等腰三角形"<<endl; } } void CTriangle::setTriangle(CPoint &X,CPoint &Y,CPoint &Z) { A=X; B=Y; C=Z; }