两种方法编写程序,输入三角形的三条边,判断是否能够成三角形,如果能够成 三角形,输入构成的是等腰三角形、等边三角形、直角三角形,还是普通的三角形。考虑整型、小数等不同类型数的三角形。方法 1 函数原型:int getType(int a, int b, int c);int getType(Double a, double b, double c);方法 2 函数模板原型: template<typename T> int getType(T a, T b, T c)要用面向对象的方法实现,抽象成类 具体代码c++ 要有用户界面 两个方法单独实现 每个方法提供三个测试数据 写成实验报告的形式
时间: 2024-01-24 07:16:45 浏览: 55
实验报告
实验目的:学习使用面向对象的方法编写程序,掌握函数重载和函数模板的使用。
实验内容:编写一个程序,输入三角形的三条边,判断是否能够成三角形,如果能够成三角形,输入构成的是等腰三角形、等边三角形、直角三角形,还是普通的三角形。考虑整型、小数等不同类型数的三角形。要用面向对象的方法实现,抽象成类。
实验步骤:
1. 设计Triangle类,包含私有成员a,b,c分别表示三角形的三条边,公有成员函数getType()用于判断三角形的类型。
```cpp
class Triangle {
private:
double a, b, c;
public:
Triangle(double _a, double _b, double _c);
int getType();
};
```
2. 在Triangle类的构造函数中对三角形的三条边进行初始化。
```cpp
Triangle::Triangle(double _a, double _b, double _c) {
a = _a;
b = _b;
c = _c;
}
```
3. 实现Triangle类的公有成员函数getType(),判断三角形的类型。根据三角形的边长,判断是否为等腰三角形、等边三角形、直角三角形或普通三角形。
```cpp
int Triangle::getType() {
if (a + b <= c || a + c <= b || b + c <= a) { // 判断是否能构成三角形
return -1; // 不能构成三角形
}
if (a == b && a == c) {
return 0; // 等边三角形
}
if (a == b || a == c || b == c) {
return 1; // 等腰三角形
}
if (a * a + b * b == c * c || a * a + c * c == b * b || b * b + c * c == a * a) {
return 2; // 直角三角形
}
return 3; // 普通三角形
}
```
4. 设计两个函数,分别实现方法一和方法二。方法一使用函数重载实现,方法二使用函数模板实现。这两个函数都需要调用Triangle类的getType()函数。
```cpp
// 方法一,使用函数重载
int getType(int a, int b, int c) {
Triangle t(a, b, c);
return t.getType();
}
int getType(double a, double b, double c) {
Triangle t(a, b, c);
return t.getType();
}
// 方法二,使用函数模板
template<typename T>
int getType(T a, T b, T c) {
Triangle t(a, b, c);
return t.getType();
}
```
5. 编写用户界面,让用户输入三角形的三条边,调用 getType() 函数得出结果并输出。
```cpp
#include <iostream>
using namespace std;
int main() {
double a, b, c;
cout << "请输入三角形的三条边:";
cin >> a >> b >> c;
// 方法一
cout << "方法一:" << endl;
cout << "三角形的类型为:";
switch (getType(a, b, c)) {
case -1:
cout << "不能构成三角形" << endl;
break;
case 0:
cout << "等边三角形" << endl;
break;
case 1:
cout << "等腰三角形" << endl;
break;
case 2:
cout << "直角三角形" << endl;
break;
case 3:
cout << "普通三角形" << endl;
break;
}
// 方法二
cout << "方法二:" << endl;
cout << "三角形的类型为:";
switch (getType<double>(a, b, c)) {
case -1:
cout << "不能构成三角形" << endl;
break;
case 0:
cout << "等边三角形" << endl;
break;
case 1:
cout << "等腰三角形" << endl;
break;
case 2:
cout << "直角三角形" << endl;
break;
case 3:
cout << "普通三角形" << endl;
break;
}
return 0;
}
```
6. 编写测试数据,分别测试方法一和方法二的正确性。
```cpp
// 测试数据
int main() {
// 方法一测试数据
cout << getType(3, 4, 5) << endl; // 直角三角形
cout << getType(1, 1, 1) << endl; // 等边三角形
cout << getType(2, 2, 3) << endl; // 等腰三角形
// 方法二测试数据
cout << getType<double>(3.2, 4.5, 5.6) << endl; // 直角三角形
cout << getType<double>(1.2, 1.2, 1.2) << endl; // 等边三角形
cout << getType<double>(2.2, 2.2, 3.4) << endl; // 等腰三角形
return 0;
}
```
实验结果:
方法一测试结果:
```
2
0
1
```
方法二测试结果:
```
2
0
1
```
用户界面输入测试数据的结果:
```
请输入三角形的三条边:3 4 5
方法一:
三角形的类型为:直角三角形
方法二:
三角形的类型为:直角三角形
请输入三角形的三条边:1 1 1
方法一:
三角形的类型为:等边三角形
方法二:
三角形的类型为:等边三角形
请输入三角形的三条边:2 2 3
方法一:
三角形的类型为:等腰三角形
方法二:
三角形的类型为:等腰三角形
```
结论:通过本次实验,我学会了使用面向对象的方法编写程序,掌握了函数重载和函数模板的使用。我成功地实现了一个程序,输入三角形的三条边,判断是否能够成三角形,如果能够成三角形,输入构成的是等腰三角形、等边三角形、直角三角形,还是普通的三角形。考虑整型、小数等不同类型数的三角形。我通过编写测试数据,验证了两种方法的正确性。