第六周项目2-对象作为数据成员

/* 
*程序的版权和版本声明部分: 
*Copyright(c)2014,烟台大学计算机学院学生 
*All rights reserved. 
*文件名称: 
*作者:张凯 
*完成日期:2014年 04月3号 
*版本号:v1.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;   // 两点之间的距离
  double distance2(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);//
  double perimeter(void);//计算三角形的周长
  double area(void);//计算并返回三角形的面积
  bool sfwsjx();
  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 s;
    s=sqrt((p.x-x)*(p.x-x)+(p.y-y)*(p.y-y));
    return s;
}
double Cpoint::distance2(Cpoint p) const
{
    double l;
    l=((p.x-x)*(p.x-x)+(p.y-y)*(p.y-y));
    return l;
}
void Cpoint::input()
{
    cin>>x>>y;
}
void Cpoint::output()
{
    cout<<"("<<x<<", "<<y<<")"<<endl;
}
void CTriangle::setTriangle(Cpoint &X,Cpoint &Y,Cpoint &Z)
{
    A=X;
    B=Y;
    C=Z;
}
double CTriangle::perimeter(void)
{
    double a=A.distance1(B);
    double b=B.distance1(C);
    double c=C.distance1(A);
    return (a+b+c);
}
double CTriangle::area(void)
{
    double a,b,c,p;
    a=A.distance1(B);
    b=B.distance1(C);
    c=C.distance1(A);
    p=(a+b+c)/2;
    return sqrt(p * (p - a) * (p - b) * (p - c));
}
bool CTriangle::sfwsjx()
{
        double a,b,c;
        a=A.distance1(B);
        b=B.distance1(C);
        c=C.distance1(A);
        if(a+b>c||a+c>b||b+c>a)
          return true;
        else
          return false;
}
bool CTriangle::isRightTriangle()
{
      double x,y,z;
        x=A.distance2(B);
        y=B.distance2(C);
        z=C.distance2(A);
     if(x+y==z||x+z==y||y+z==x)
        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||b==c||a==c)
      return true;
    else
      return false;
}
int main()
{
    Cpoint X,Y,Z;
    cout<<"请输入三个顶点A,B,C:"<<endl;
       X.input();
       Y.input();
       Z.input();
    CTriangle ct(X,Y,Z);
    cout<<"三角形的周长为:"<<ct.perimeter()<<endl;
    cout<<"三角形的面积为:"<<ct.area()<<endl;
    cout<<"输入的三点"<<(ct.sfwsjx()?"能":"不能")<<"构成三角形"<<endl;
    cout<<"该三角形"<<(ct.isRightTriangle()?"是":"不是")<<"直角三角形"<<endl;
    cout<<"该三角形"<<(ct.isIsoscelesTriangle()?"是":"不是")<<"等腰三角形"<<endl;
    return 0;
}


运行结果:

 

心得体会:  在判断是否为直角三角形时,没用精度,又定义了一个计算距离平方的函数,这样感觉更加精确。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值