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

C 語言計算三角形面積:海倫公式與合法性校驗完整實現

     編輯:Java 相關知識

問題描述

輸入三角形三邊長 a, b, c,判斷能否構成三角形,若合法則使用海倫公式計算面積:

s = (a + b + c) / 2(半周長)

Area = √[s(s-a)(s-b)(s-c)]

核心邏輯

  1. 邊長合法性:每邊必須 > 0。
  2. 三角形不等式:任意兩邊之和 > 第三邊,即 a+b>c && a+c>b && b+c>a。
  3. 計算面積:調用 math.h 中的 sqrt()。

完整代碼(含註釋優化版)

#include 
#include 

/** 校驗單邊長是否為正數 */
int isPositive(double side) {
    return side > 0 ? 1 : 0;
}

/** 校驗三邊能否構成三角形 */
int isTriangle(double a, double b, double c) {
    // 任意兩邊之和大於第三邊(嚴格大於,退化三角形面積為0通常視為不合法)
    if (a + b <= c) return 0;
    if (a + c <= b) return 0;
    if (b + c <= a) return 0;
    return 1;
}

int main(void) {
    double a, b, c;
    printf("請輸入三角形三邊長 (a b c): ");
    if (scanf("%lf %lf %lf", &a, &b, &c) != 3) {
        printf("輸入格式錯誤!\n");
        return 1;
    }

    // 1. 邊長合法性
    if (!isPositive(a) || !isPositive(b) || !isPositive(c)) {
        printf("錯誤:邊長必須為正數。\n");
        return 1;
    }

    // 2. 三角形不等式
    if (!isTriangle(a, b, c)) {
        printf("錯誤:輸入的三邊無法構成三角形(任意兩邊之和必須大於第三邊)。\n");
        return 1;
    }

    // 3. 海倫公式計算面積
    double s = (a + b + c) / 2.0;
    double area = sqrt(s * (s - a) * (s - b) * (s - c));

    printf("三角形三邊: %.2f, %.2f, %.2f\n", a, b, c);
    printf("半周長 s = %.2f\n", s);
    printf("面積 = %.4f\n", area);

    return 0;
}

編譯與運行

gcc triangle_area.c -o triangle_area -lm
./triangle_area

注意:Linux 下需鏈接數學庫 -lm。

測試用例

輸入預期輸出說明
3 4 5面積 = 6.0000經典直角三角形
1 1 1面積 = 0.4330等邊三角形
1 2 3錯誤:無法構成三角形1+2=3 不滿足嚴格大於
-1 2 3錯誤:邊長必須為正數負數邊長非法
0.5 0.6 0.7面積 ≈ 0.1470小數邊長

常見錯誤與避坑

  1. 整數除法:s = (a+b+c)/2 若 a,b,c 為 int 會截斷,必須用 2.0 或定義為 double。
  2. 未引入 math.h:導致 sqrt 隱式聲明警告,鏈接時報 undefined reference。
  3. 精度問題:極扁三角形(如 1e9, 1e9, 2e-9)會導致 s(s-a)(s-b)(s-c) 產生負數(浮點誤差),建議用 long double 或 Kahan 求和優化。
  4. scanf 返回值未檢查:非數字輸入導致變量未初始化,引發 UB。

擴展思考

  • 使用 long double 提高精度:sqrtl、fabsl。
  • 判斷三角形類型:銳角、直角、鈍角(勾股定理比較 a²+b² ? c²)。
  • 通用多邊形面積:鞋帶公式。
  • 異常處理:C 語言無異常機制,採用返回錯誤碼或設置全局 errno。

總結

海倫公式是計算三角形面積的經典算法,關鍵在於嚴格的輸入校驗(正數性 + 三角不等式)與浮點數精度控制。本文提供的模塊化代碼結構清晰,便於擴展與單元測試,是 C 語言基礎數學編程的優秀範例。

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