c++程序设计实验报告6-4

/  * 程序的版权和版本声明部分 

      * Copyright (c) 2011, 烟台大学计算机学院学生

      * All rights reserved. .      

      * 文件名称: CTriangle.cpp 

      * 作 者: 计114-3 杨坛坛

      * 完成日期: 2012年 3 月 28日

      * 版 本 号: V C

.    * 对任务及求解方法的描述部分

    * 输入描述: 输入三角形的三个顶点

    * 问题描述:

  1)这个问题需要用到两个类,顶点类参照任务3中的CPoint类;

 2)三角形类参考下面CTriangle类的声明;

.3)充分利用CPoint类中已有的代码实现;

 4)关于三条边的处理,可以增加三个私有属性,在初始化时求出来备用,也可以在需要时计算得到。

   * 程序输出: 求出其面积、周长,并判断其是否为直角三角形和等腰三角形。

   * 程序头部的注释结束

    */

 

#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();  
	
};  

CPoint::CPoint(double xx ,double yy )  
{  
	x=xx;  
	y=yy;  
}  

double CPoint:: Distance(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 c;    
		cout<<"请按x,y的形式输入:";  
		
		while(1)  
			
		{  
			cin>>x>>c>>y;  
			
			if(c != ',')  
				
				cout<<"格式错误!重新输入"<<endl;  
			else  
				break;  
		}  
	}  
	
	void CPoint::output() //以(x,y) 形式输出坐标点     
	{    
		cout<<'('<<x<<','<<y<<')'<<endl;    
	}    
	
	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 isRightTriangle(); //是否为直角三角形  
		bool isIsoscelesTriangle(); //是否为等腰三角形  
		
	private:  
		
		CPoint A,B,C; //三顶点  
	};  
	
	void CTriangle::setTriangle(CPoint &X,CPoint &Y,CPoint &Z)  
	{  
		A=X;  
		
		B=Y;  
		
		C=Z;  
		
	}  
	double  CTriangle::perimeter(void)//计算三角形的周长  
	{  
		double a=B.Distance(C);  
		double b=C.Distance(A);  
		double c=A.Distance(B);  
		return (a+b+c);  
		
	}  
	
	double CTriangle::area(void)//计算并返回三角形面积
	{  
		double a=B.Distance(C);  
		
		double b=C.Distance(A);  
		double c=A.Distance(B);  
		double s=(a+b+c)/2;  
		return sqrt((s-a)*(s-b)*(s-c)*s);  
	}  
	bool CTriangle::isRightTriangle() //是否为直角三角形  
	{  
		double a=B.Distance(C);  
		double b=C.Distance(A);  
		double c=A.Distance(B);  
		if(abs(a*a+b*b-c*c)<1e-6||abs(b*b+c*c-a*a)<1e-6||abs(a*a+c*c-b*b)<1e-6)  
			return true;  
		else   
			return false;  
	}  
	bool CTriangle::isIsoscelesTriangle() //是否为等腰三角形  
	{  
		double a=B.Distance(C);  
		double b=C.Distance(A);  
		double c=A.Distance(B);  
		
		if(abs(a-b)<1e-6||abs(b-c)<1e-6||abs(a-c)<1e-6)  
			
			return true;  
		
		else   
			return false;  
	}  
	void main()  
	{  
		CTriangle Tri1(CPoint(2,5),CPoint(5,2),CPoint(1,1));  
		
		cout<<"该三角形的周长为:"<<Tri1.perimeter();  
		
		cout<<endl;  
		
		cout<<"该三角形的面积为:"<<Tri1.area();  
		
		cout<<endl;  
		
		cout<<(Tri1.isIsoscelesTriangle()? "是":"不是")<<"直角三角形"<<endl;  
		
		cout<<(Tri1.isRightTriangle()? "是":"不是")<<"等腰三角形"<<endl;
		return ;
	}
	


 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值