关闭

《C++第六周实验报告5-1》---将任务4的解决用一个项目多个文件的方式实现

888人阅读 评论(0) 收藏 举报
//main.cpp
/* (程序头部注释开始)
* 程序的版权和版本声明部分
* 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>
#include "class.h"

using namespace std;

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;
}

//class.h
//点类
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) 形式输出坐标点
};
//三角形类
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.cpp
#include <iostream>
#include <cmath>
#include "class.h"

using namespace std;

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 << ")";
}

//CTriangle.cpp
#include <iostream>
#include <cmath>
#include "class.h"

using namespace std;

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);
}
/*
利用对文件对程序能够进行更好的管理。
*/

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:289559次
    • 积分:4332
    • 等级:
    • 排名:第7231名
    • 原创:151篇
    • 转载:4篇
    • 译文:0篇
    • 评论:97条
    最新评论