給定三邊長 a, b, c(1 ≤ a,b,c ≤ 100),判斷能否構成三角形,並分類為等邊、等腰或不等邊三角形。本文提供完整的 C++ 類封裝實作,包含輸入驗證、邊長比較邏輯、互動式選單與錯誤處理,適合教學與工程參考。
必要且充分條件:任意兩邊之和大於第三邊。
a + b > c && b + c > a && c + a > b
若不滿足,無法構成三角形(退化或不可能)。
| 類型 | 條件 | 回傳碼 |
|---|---|---|
| 等邊三角形 | a == b == c | 1 |
| 等腰三角形 | 任意兩邊相等(但非三邊全等) | 2 |
| 不等邊三角形 | 三邊互不相等 | 3 |
| 非三角形 | 不滿足兩邊和大於第三邊 | 0 |
#include <iostream>
#include <cstdlib> // system()
using namespace std;
class Triangle {
private:
float a_, b_, c_;
// 內部判斷三角形成立性
bool isValid() const {
return (a_ + b_ > c_) && (b_ + c_ > a_) && (c_ + a_ > b_);
}
// 分類邏輯:1=等邊, 2=等腰, 3=不等邊
int classify() const {
if (a_ == b_ && b_ == c_) return 1;
if (a_ == b_ || b_ == c_ || c_ == a_) return 2;
return 3;
}
public:
Triangle() : a_(0), b_(0), c_(0) {}
Triangle(float a, float b, float c) : a_(a), b_(b), c_(c) {}
// 公開介面:0=非三角形, 1/2/3=分類代碼
int identify() const {
return isValid() ? classify() : 0;
}
};
int main() {
int a, b, c, choice = 1;
while (choice) {
system("cls"); // Windows 清屏;Linux/Mac 用 system("clear")
cout << "請輸入三角形三邊長:" << endl;
cout << "a = "; cin >> a;
cout << "b = "; cin >> b;
cout << "c = "; cin >> c;
Triangle tri(a, b, c);
switch (tri.identify()) {
case 1: cout << "可構成等邊三角形。"; break;
case 2: cout << "可構成等腰三角形。"; break;
case 3: cout << "可構成不等邊三角形。"; break;
default: cout << "無法構成三角形。";
}
cout << endl << "繼續請輸入 1,結束輸入 0:";
cin >> choice;
}
cout << "程式結束。" << endl;
return 0;
}
private,判斷邏輯內聚於類內,對外僅暴露 identify()。isValid() 負責合法性,classify() 負責分類,互不干擾。== 安全;若為浮點輸入需引入 epsilon 比較。a+b == c 為退化三角形(面積為 0),題目通常視為「不構成」。system("cls") 僅限 Windows;跨平台建議用 ANSI 轉義碼 cout << "\033[2J\033[H"。三角形判斷是幾何與邏輯結合的經典入門題。採用類封裝不僅程式碼清晰,更奠定物件導向設計基礎。理解「兩邊之和大於第三邊」的幾何意義,並能正確實作分類邏輯,是進階演算法幾何題的基石。