/* (程序头部注释开始) * 程序的版权和版本声明部分 * 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; } /* 这个题目更深度的体现了对象。 并将一个对象与另一个对象相联系。 两个对象的方法巧妙的结合,灵活调用。 能实现很好的功能。 类,是个好东西。 得好好学啊。哈哈、、、 */