码迷,mamicode.com
首页 > 其他好文 > 详细

对象作数据成员

时间:2015-04-07 13:55:31      阅读:133      评论:0      收藏:0      [点我收藏+]

标签:class   博客   cstring   算法   数据   

 输入代码:

/*
 * Copyright (c) 2014, 烟台大学计算机学院
 * All rights reserved.
 * 文件名称:sum123.cpp
 * 作    者:林海云
 * 完成日期:2015年4月7日
 * 版 本 号:v2.0
 *
 * 问题描述:本项目设计一个三角形类,其数据成员不再是三角形三条边的边长,而是三角形的三个顶点。
  利用设计的三角形类,输入三角形的三个顶点,求出其面积,周长,并判断其是否为直角三角形和等腰三角形。
 * 输入描述:输入三角形的三个顶点
 * 程序输出:输出其面积,周长,并判断是否为直角三角形和等腰三角形
 */
#include <iostream>
#include <cmath>
using namespace std;
class Cpoint
{
private:
    double x;                                //横坐标
    double y;                                //纵坐标
public:
    Cpoint(double xx=0,double yy=0);
    double Distance1(Cpoint p) const;        //两点之间的距离。
    void input();                            //以x,y形式输入坐标点。
    void output();                           //以(x,y)形式输出坐标点
};

class CTriangle
{
public:
    CTriangle(Cpoint &X,Cpoint &Y,Cpoint &Z):A(X),B(Y),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;                                               //三顶点
};
Cpoint::Cpoint(double xx,double yy)
{
    x=xx;
    y=yy;
}
double Cpoint::Distance1(Cpoint p) const
{
    double d;
    d=sqrt((p.x-x)*(p.x-x)+(p.y-y)*(p.y-y));
    return d;
}
void Cpoint::input()
{
    char ch;
    cout<<"请输入两点坐标(x,y):";
    while (1)
    {
        cin>>x>>ch>>y;
        if(ch==',')
            break;
        else
            cout<<"输入格式错误,请重新输入"<<endl;
    }
}
void Cpoint::output()
{
    cout<<"("<<x<<","<<y<<")"<<endl;
}
void CTriangle::setTriangle (Cpoint &X,Cpoint &Y,Cpoint &Z)
{
    A=X;
    B=Y;
    C=Z;
}
float CTriangle::perimeter()
{
    double a,b,c,p;
    a=A.Distance1(B);
    b=B.Distance1(C);
    c=C.Distance1(A);
    p=a+b+c;
    return p;
}
float CTriangle::area()
{
    double a,b,c,p,S;
    a=A.Distance1(B);
    b=B.Distance1(C);
    c=C.Distance1(A);
    p=(a+b+c)/2;
    S=sqrt(p*(p-a)*(p-b)*(p-c));
    return S;
}
bool CTriangle::isRightTriangle()
{

    double a,b,c,max;
    a=A.Distance1(B);
    b=B.Distance1(C);
    c=C.Distance1(A);
    max=a;
    if(b>max)
        max=b;
    if(c>max)
        max=c;
    if((max==a&&(a*a==b*b+c*c))||(max==b&&(b*b==a*a+c*c))||(max=c&&(c*c==a*a+b*b)))
        return true;
    else
        return false;
}
bool CTriangle::isIsoscelesTriangle()
{
    double a,b,c;
    a=A.Distance1(B);
    b=B.Distance1(C);
    c=C.Distance1(A);
    if(a==b||a==c||b==c)
        return true ;
    else
        return  false ;
}
int main()
{
    Cpoint X,Y,Z;
    cout<<"请分别输入三角形三边的坐标:"<<endl;
    cout<<endl;
    X.input();
    Y.input();
    Z.input();
    CTriangle Tri1(X,Y,Z);//调用构造函数
    cout<<"该三角形的周长为:"<<Tri1.perimeter()<<"    面积为:"<<Tri1.area()<<endl;
    if (Tri1.isRightTriangle()&&Tri1.isIsoscelesTriangle())
        cout<<"该三角形是等腰直角三角形."<<endl;
    else if (Tri1.isRightTriangle())
        cout<<"该三角形是直角三角形."<<endl;
    else if (Tri1.isIsoscelesTriangle())
        cout<<"该三角形是等腰三角形."<<endl;
    else
        cout<<"该三角形既不是等腰三角形也不是直角三角形."<<endl;
    return 0;

}


运行结果:

技术分享

 

对象作数据成员

标签:class   博客   cstring   算法   数据   

原文地址:http://blog.csdn.net/linhaiyun_ytdx/article/details/44918511

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!