6-2对象作为数据成员
来源:互联网 发布:香港大学 专业 知乎 编辑:程序博客网 时间:2024/05/16 17:32
/** 作 者: 霍雨佳* 完成日期:2014 年4月1日* 版 本 号:v1.0* 问题描述:本项目设计一个三角形类,其数据成员不再是三角形三条边的边长,而是三角形的三个顶点。* 利用设计的三角形类,输入三角形的三个顶点,求出其面积、周长,并判断其是否为直角三角形和等腰三角形。* 样例输出:* 问题分析:(1)这个问题需要用到两个类,顶点类参照项目1中的CPoint类;* (2)三角形类参考下面CTriangle类的声明;* (3)充分利用CPoint类中已有的代码实现;* (4)关于三条边的处理,可以增加三个私有属性,在初始化时求出来备用,也可以在需要时计算得到。*/#include <iostream>#include <cmath>#include <cstdlib>using namespace std;class CPoint{private: double x; // 横坐标 double y; // 纵坐标public: CPoint(double xx=0,double yy=0):x(xx),y(yy) {};//构造函数初始化 double Distance1(CPoint p) const; // 两点之间的距离(一点是当前点,另一点为参数p) void input(); //以x,y 形式输入坐标点 void output(); //以(x,y) 形式输出坐标点 void judge(CPoint X,CPoint Y,CPoint Z);//判断三点是否在同一直线上};void CPoint::input() //以x,y 形式输入坐标点{ char c; while(1) { cin>>x>>c>>y; if(c!=',') { cout<<"输入格式有误,请重新输入"<<endl; } else break; } x=x; y=y;}void CPoint::output() //以(x,y) 形式输出坐标点{ cout<<"("<<x<<","<<y<<")"<<endl;}double CPoint::Distance1(CPoint p) const // 两点之间的距离(一点是当前点,另一点为参数p){ double l; l=sqrt((p.x-x)*(p.x-x)+(p.y-y)*(p.y-y)); return l;}void CPoint::judge(CPoint X,CPoint Y,CPoint Z)//判断三点是否在同一直线上{ double k,b; k=(X.y-Y.y)/(X.x-Y.x); b=X.y-X.x*k; if(Z.y==(Z.x*k+b)) { cout<<"三点在同一直线上不能构成三角形,退出"<<endl; exit(1); }}class CTriangle{public: CTriangle(CPoint &X,CPoint &Y,CPoint &Z):A(X),B(Y),C(Z) {} //给出三点的构造函数!!!!!!!! CTriangle(double m=0,double n=0,double z=0):a(m),b(n),c(z) {};//构造函数初始化 void setTriangle(CPoint &X,CPoint &Y,CPoint &Z);//给三角形三边赋值 float perimeter(void);//计算三角形的周长 float area(void);//计算并返回三角形的面积 bool isRightTriangle(); //是否为直角三角形 bool isIsoscelesTriangle(); //是否为等腰三角形private: CPoint A,B,C; //三顶点 double a,b,c; //三条边};void CTriangle::setTriangle(CPoint &X,CPoint &Y,CPoint &Z)//给三角形三边赋值{ double d1,d2,d3; d1=X.Distance1(Y); d2=Y.Distance1(Z); d3=Z.Distance1(X); a=d1; b=d2; c=d3;}float CTriangle::perimeter(void)//计算三角形的周长{ int l; l=a+b+c; return l;}float CTriangle::area(void)//计算并返回三角形的面积{ int s,p; p=(a+b+c)/2; s=sqrt(p*(p-a)*(p-b)*(p-c)); return s;}bool CTriangle::isRightTriangle() //是否为直角三角形{ double max; bool f=0; max=a; if(max<b) { max=b; } if(max<c) { max=c; } if(max=a&&a*a==b*b+c*c) { f=1; } if(max=b&&b*b==a*a+c*c) { f=1; } if(max=c&&a*a+b*b==c*c) { f=1; } return f;}bool CTriangle::isIsoscelesTriangle() //是否为等腰三角形{ bool p=0; if(a==b||b==c||c==a) { p=1; } return p;}int main(){ CPoint p,q,v,r; CTriangle s; double l,s1; cout<<"请输入A B C三点的坐标x,y:"<<endl; p.input(); q.input(); v.input(); cout<<"A B C三点的坐标分别为:"<<endl; p.output(); q.output(); v.output(); s.setTriangle(p,q,v); r.judge(p,q,v); l=s.perimeter(); cout<<"三角形的周长为:"<<l<<endl;//计算三角形的周长 s1=s.area();//计算并返回三角形的面积 cout<<"三角形的面积为:"<<s1<<endl; while(s.isRightTriangle()) { cout<<"是直角三角形"<<endl; break; } while(s.isIsoscelesTriangle()) { cout<<"是等腰三角形"<<endl; break; } cout<<endl; return 0;}
运行结果:
开始时忽略了三点在一条直线上的可能,现在也不够完美,
构不成就直接退出了继续努力,使其构不成时可循环输入
0 0
- 6-2对象作为数据成员
- 6-2-对象作为数据成员
- 6-2-对象作为数据成员
- 对象作为数据成员
- 对象作为数据成员
- 对象作为数据成员
- 对象作为数据成员
- 对象作为数据成员
- 对象作为数据成员
- 对象作为数据成员
- 对象作为数据成员
- 对象作为数据成员
- 对象作为数据成员
- 对象作为数据成员
- 对象作为数据成员
- 对象作为数据成员
- 2-5-2 对象作为数据成员
- 项目2 - 对象作为数据成员
- 在c/c++内镶汇编语句
- Aoj 560 取石子
- AOJ 435 带小数高精度
- AOJ 401 Fibonacci & GCD
- POJ 2049 Finding Nemo
- 6-2对象作为数据成员
- POJ 1001 Exponentiation
- StringBuilder类的使用
- HDU 2492 PingPong
- POJ 3264 Balanced Lineup (RMQ问题)
- Android——扩大ImageButton的点击区域
- NOIP 2006 金明的预算方案(带条件的01背包)
- HDU 2955 Robberies
- HDU 1864 最大报销额