《C++第六周实验报告4-1》---设计一个三角形类,能够输入三角形的三个顶点,求出其面积、周长,并判断其是否为直角三角形和等腰三角形。

/* (程序头部注释开始)
* 程序的版权和版本声明部分
* Copyright (c) 2011, 烟台大学计算机学院学生 
* All rights reserved.
* 文件名称:    CTriangle.cpp            
* 作    者:    计114-3 王兴锋             
* 完成日期:   2012年  3  月  26  日
* 版 本 号:    V 1.0

* 对任务及求解方法的描述部分
* 输入描述: 输入三角形的三个顶点
* 问题描述:
(1)这个问题需要用到两个类,顶点类参照任务3中的CPoint类;
(2)三角形类参考下面CTriangle类的声明;
(3)充分利用CPoint类中已有的代码实现;
(4)关于三条边的处理,可以增加三个私有属性,在初始化时求出来备用,也可以在需要时计算得到。
* 程序输出: 求出其面积、周长,并判断其是否为直角三角形和等腰三角形。
* 程序头部的注释结束
*/
#include <iostream>
#include <cmath>

using namespace std;

class CPoint
{
private:
	float x;  // 横坐标
	float y;  // 纵坐标
public:
	CPoint(float xx = 0, float yy = 0);
	float Distance(CPoint p) const;   // 两点之间的距离(一点是当前点,另一点为参数p)
	void input();  //以x,y 形式输入坐标点
	void output(); //以(x,y) 形式输出坐标点
};

CPoint::CPoint(float xx, float yy)
{
	x = xx, y = yy;
}
float CPoint::Distance(CPoint p) const
{
	return sqrt((p.x-x)*(p.x-x) + (p.y-y)*(p.y-y));
}
void CPoint::input()
{
	char ch;

	do{
		cout << "请输入点的坐标(例:x,y):" << endl;

		cin >> x >> ch >> y;
	}while(ch != ',');
}
void CPoint::output()
{
	cout << "(" << 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; //三顶点
};
void CTriangle::setTriangle(CPoint &X, CPoint &Y, CPoint &Z)
{
	A = X, B = Y, C = Z;
}
float CTriangle::perimeter(void)
{
	return (A.Distance(B) + B.Distance(C) + C.Distance(A));
}
float CTriangle::area(void)
{
	float AB = A.Distance(B), BC = B.Distance(C), AC = A.Distance(C);

	float p = (AB + BC + AC)/2;

	return (sqrt(p * (p-AB) * (p-BC) * (p-AC)));
}
bool CTriangle::isRightTriangle()
{
	float AB = A.Distance(B), BC = B.Distance(C), AC = A.Distance(C);

	return (AB*AB + BC*BC == AC*AC || AB*AB +  AC*AC== BC*BC || AC*AC + BC*BC == AB*AB);
}
bool CTriangle::isIsoscelesTriangle()
{
	float AB = A.Distance(B), BC = B.Distance(C), AC = A.Distance(C);

	return (AB == AC || AB == BC || AC == BC);
}

int main()
{
	CPoint a(0, 0), b(1, 1), c(0, 2);//定义三个点
	CTriangle ct(a, b, c);

	a.output(), b.output(), c.output();
	cout << "构成的三角形:" << endl;
	cout << "周长为:" << ct.perimeter() << endl;
	cout << "面积为:" << ct.area() << endl;
	cout << (ct.isRightTriangle() ? "是" : "不是") << "直角三角形。" << endl;
	cout << (ct.isIsoscelesTriangle() ? "是" : "不是") << "等腰三角形。" << endl;

	cout << endl;
	CPoint a2(0, 0), b2(0, 3), c2(4, 0);//定义三个点
	CTriangle ct2(a2, b2, c2);

	a2.output(), b2.output(), c2.output();
	cout << "构成的三角形:" << endl;
	cout << "周长为:" << ct2.perimeter() << endl;
	cout << "面积为:" << ct2.area() << endl;
	cout << (ct2.isRightTriangle() ? "是" : "不是") << "直角三角形。" << endl;
	cout << (ct2.isIsoscelesTriangle() ? "是" : "不是") << "等腰三角形。" << endl;

	system("PAUSE");
	return 0;
}
/*
这个题目更深度的体现了对象。
并将一个对象与另一个对象相联系。
两个对象的方法巧妙的结合,灵活调用。
能实现很好的功能。
类,是个好东西。
得好好学啊。哈哈、、、
*/
《C++第六周实验报告4-1》---设计一个三角形类,能够输入三角形的三个顶点,求出其面积、周长,并判断其是否为直角三角形和等腰三角形。_第1张图片

你可能感兴趣的:(C++)