首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

三角形判斷與分類完整實作:C++ 類封裝版本

     編輯:關於C語言

給定三邊長 a, b, c(1 ≤ a,b,c ≤ 100),判斷能否構成三角形,並分類為等邊、等腰或不等邊三角形。本文提供完整的 C++ 類封裝實作,包含輸入驗證、邊長比較邏輯、互動式選單與錯誤處理,適合教學與工程參考。

三角形成立條件

必要且充分條件:任意兩邊之和大於第三邊。

a + b > c  &&  b + c > a  &&  c + a > b

若不滿足,無法構成三角形(退化或不可能)。

分類規則

類型條件回傳碼
等邊三角形a == b == c1
等腰三角形任意兩邊相等(但非三邊全等)2
不等邊三角形三邊互不相等3
非三角形不滿足兩邊和大於第三邊0

C++ 類封裝完整程式碼

#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() 負責分類,互不干擾。
  • 可擴充:未來新增周長、面積、外心等計算只需增加 public 方法,不影響既有介面。
  • 互動友善:迴圈選單、清屏、提示訊息完整,適合教學示範。

常見錯誤提醒

  1. 浮點比較:本題輸入為整數,直接用 == 安全;若為浮點輸入需引入 epsilon 比較。
  2. 邊界值:a+b == c 為退化三角形(面積為 0),題目通常視為「不構成」。
  3. 跨平台清屏:system("cls") 僅限 Windows;跨平台建議用 ANSI 轉義碼 cout << "\033[2J\033[H"。

總結

三角形判斷是幾何與邏輯結合的經典入門題。採用類封裝不僅程式碼清晰,更奠定物件導向設計基礎。理解「兩邊之和大於第三邊」的幾何意義,並能正確實作分類邏輯,是進階演算法幾何題的基石。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved