頭文件:
shengming.h
class CPoint
{
private:
double x; // 橫座標
double y; // 縱座標
public:
CPoint(double xx=0,double yy=0);
double Distance(CPoint p) const; // 兩點之間的距離(一點是當前點,另一點爲參數p)
double Distance0() const; // 到原點的距離
void input(); //以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 isRightTriangle(); //是否爲直角三角形
bool isIsoscelesTriangle(); //是否爲等腰三角
private:
CPoint A,B,C; //三頂點
};
成員函數的聲明文件
CPoint.cpp
#include<iostream>
#include<cmath>
#include"shengming.h"
using namespace std;
CPoint::CPoint(double xx,double yy):x(xx),y(yy){}
// 兩點之間的距離(一點是當前點,另一點爲參數p)
double CPoint::Distance(CPoint p) const
{
return(sqrt((x - p.x) * (x - p.x) + (y - p.y) * (y - p.y)));
}
triangle.cpp
#include<iostream>
#include<cmath>
#include"shengming.h"
using namespace std;
void CTriangle::setTriangle(CPoint &X,CPoint &Y,CPoint &Z)//
{
A = X;
B = Y;
C = Z;
}
//計算三角形的周長
double CTriangle::perimeter(void)
{
double a,b,c;
a = B.Distance(C);
b = A.Distance(C);
c = A.Distance(B);
return(a + b + c);
}
//計算並返回三角形的面積
double CTriangle::area(void)
{
double a,b,c,s;
a = B.Distance(C);
b = A.Distance(C);
c = A.Distance(B);
s = (a + b + c) / 2;
return(sqrt((s - a) *(s - b) * (s - c) * s));
}
//是否爲直角三角形
bool CTriangle::isRightTriangle()
{
double a,b,c;
a = B.Distance(C);
b = A.Distance(C);
c = A.Distance(B);
if(abs(a * a + b * b - c * c) < 1e-6 || abs(a * a + c * c - b * b) < 1e-6 ||abs(c * c + b * b - a * a) < 1e-6)
{
return true;
}
else
{
return false;
}
}
//是否爲等腰三角形
bool CTriangle::isIsoscelesTriangle()
{
double a,b,c;
a = B.Distance(C);
b = A.Distance(C);
c = A.Distance(B);
if(abs(a + b - c) < 1e-6 || abs(a + c - b) < 1e-6 ||abs(c + b - a) < 1e-6)
{
return true;
}
else
{
return false;
}
}
主函數main.cpp
/* (程序頭部註釋開始)
* 程序的版權和版本聲明部分
* Copyright (c) 2011, 煙臺大學計算機學院學生
* All rights reserved.
* 文件名稱: 三角形類
* 作 者: 114-3 張宗佳
* 完成日期: 2012 年 3 月 28 日
* 版 本 號: vc.n
* 對任務及求解方法的描述部分
* 輸入描述:設計一個三角形類,能夠輸入三角形的三個頂點,
* 問題描述:(1)這個問題需要用到兩個類,頂點類參照任務3中的CPoint類;
(2)三角形類參考下面CTriangle類的聲明;
(3)充分利用CPoint類中已有的代碼實現;
(4)關於三條邊的處理,可以增加三個私有屬性,在初始化時求出來備用,也可以在需要時計算得到。
* 程序輸出:求出其面積、周長,並判斷其是否爲直角三角形和等腰三角形。
* 程序頭部的註釋結束
*/
#include<iostream>
#include"shengming.h"
//#include"CPoint.cpp"
//#include"triangle.cpp"
using namespace std;
void main()
{
CTriangle Tri1(CPoint(0,3),CPoint(3,0),CPoint(0,0));
cout << "此三角形的周長是:" << Tri1.perimeter() << endl;
cout << "此三角形的面積是:" << Tri1.area() << endl;
cout << "此三角形" << (Tri1.isRightTriangle()?"是":"不是") << "直角三角形" << endl;
cout << "此三角形" << (Tri1.isIsoscelesTriangle()?"是":"不是") << "等腰三角形" << endl;
system("pause");
return;
}
實驗結果:
經驗積累:
1.在寫源文件的時候,一定不要忘記將其他要用到的文件包含進去
2.由於double是浮點型,不精確,在判斷直角三角形和等腰三角形時不能用a*a+b*b-c*c==0來計算,而可以用絕對值小於10的-6次方,可以認爲是true
上機感言:
這次任務有點難啊.....有一些看不懂了,主要是不知道怎麼運用...不過老師講過之後明白了,像以對象作爲成員函數的參數等等