本程式讀入三角形三邊長,使用海倫公式計算面積。原始碼存在公式錯誤(半周長計算錯誤),本文提供修正版並詳細解析。
三角形三邊 a, b, c,半周長 s = (a+b+c)/2,面積 A = √[s(s-a)(s-b)(s-c)]。
// 原始錯誤碼 s = 1.0/2 * (a * b * c); // ❌ 錯誤:這是體積相關公式,非半周長 area = sqrt(s * (s-a) * (s-b) * (s-c));
1.0/2 * (a*b*c) 計算的是邊長乘積的一半,完全錯誤。
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
int main() {
float a, b, c, s, area;
printf("請輸入三角形三邊長:");
if (scanf("%f %f %f", &a, &b, &c) != 3) {
fprintf(stderr, "輸入錯誤\n");
return 1;
}
// 三角形不等式檢查
if (a + b <= c || a + c <= b || b + c <= a) {
printf("無法構成三角形(任意兩邊之和必須大於第三邊)\n");
return 1;
}
s = (a + b + c) / 2.0f; // 正確半周長
area = sqrtf(s * (s - a) * (s - b) * (s - c));
printf("a = %.2f, b = %.2f, c = %.2f\n", a, b, c);
printf("半周長 s = %.2f\n", s);
printf("面積 = %.2f\n", area);
return 0;
}
s = (a+b+c)/2sqrtf:單精度版本,匹配 float 變數scanf 返回值%.2f 保留兩位小數float 精度足夠一般用途s*(s-a)... 溢位,可用 double 或對數運算規避0.25 * sqrt((a+b+c)(-a+b+c)(a-b+c)(a+b-c)) 形式這個簡單練習包含「公式正確性、邊界檢查、資料類型選擇、輸入驗證」四大工程實務要素,是優質入門題目。