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

C 語言三角形面積計算:Heron 公式、輸入驗證、編譯警告修復完整版

     編輯:C 語言問答

C 語言三角形面積計算:Heron 公式、輸入驗證、編譯警告修復完整版

修復原代碼的頭文件缺失、格式字符串錯誤、邏輯順序錯誤、語法錯誤、float/double 精度警告等問題。

原代碼問題清單

  1. 缺 `` → `printf/scanf` 隱式聲明警告
  2. `scanf("%f,%f,%f")` 要求逗號分隔,用戶通常輸入空格
  3. 面積計算在驗證之前,可能對非三角形開方 (負數) → 域錯誤
  4. 判斷條件用 `||` 應為 `&&` (三條邊均需滿足)
  5. `else` 後缺分號 `;`
  6. `float` 接收 `sqrt` 返回 `double` → 精度損失警告

修正版代碼 (嚴格 C99)

#include <stdio.h>
#include <math.h>

int main(void) {
    double a, b, c, s, area;

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

    // 先驗證能否構成三角形
    if (a + b > c && a + c > b && b + c > a) {
        s = (a + b + c) / 2.0;
        area = sqrt(s * (s - a) * (s - b) * (s - c));
        printf("三角形面積 = %.4f\n", area);
    } else {
        printf("無法構成三角形:任意兩邊之和必須大於第三邊\n");
    }

    return 0;
}

編譯運行演示

$ gcc -std=c99 -Wall -Wextra -o triangle triangle.c
$ ./triangle
請輸入三角形三邊長 (空格分隔): 3 4 5
三角形面積 = 6.0000

$ ./triangle
請輸入三角形三邊長 (空格分隔): 3 3 7
無法構成三角形:任意兩邊之和必須大於第三邊

關鍵修正說明

問題修正原因
頭文件`#include `標準庫函數需聲明
scanf 格式`"%lf %lf %lf"`匹配空白分隔,`%lf` 讀 double
驗證先行判斷在 sqrt 前避免 sqrt(負數) 域錯誤
邏輯運算符`&&` 替換 `||`三條件必須同時成立
類型一致全用 `double`消除精度損失警告,精度更高
語法完整`else` 後無分號C 語法規則

進階擴展

  • 判斷三角形類型:銳/直/鈍、等腰/等邊/不等邊
  • 坐標法面積:給定三點座標用行列式/向量叉積
  • 誤差分析:極扁三角形 Heron 公式數值不穩,改用 Kahan 公式
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved