輸入三邊長 a, b, c(實數),判斷能否構成三角形。能則用海倫公式計算面積,否則輸出 No Triangle!。
原始碼判斷條件:
if ((a+b>c) || (a+c>b) || (b+c>a)) // 錯誤!應為 &&(且)
三角形不等式要求任意兩邊之和大於第三邊,三個條件必須同時成立,應用 && 而非 ||。
#include <stdio.h>
#include <math.h>
int main()
{
float a, b, c, t, area = 0;
printf("請輸入三角形三邊長 a, b, c: ");
scanf("%f %f %f", &a, &b, &c);
// 正確判斷:三個條件皆須成立
if (a+b>c && a+c>b && b+c>a) {
t = (a + b + c) / 2.0; // 半周長
area = sqrt(t * (t-a) * (t-b) * (t-c)); // 海倫公式
printf("三角形面積: %.4f\n", area);
} else {
printf("No Triangle!\n");
}
return 0;
}
半周長 s = (a+b+c)/2,面積 A = √[s(s-a)(s-b)(s-c)]。
僅需三邊長,不需高度或角度,極適合程式計算。
(s-c) 極小,浮點誤差大A = 0.25 * √[(a+(b+c))(c-(a-b))(c+(a-b))(a+(b-c))](Kahan 公式)double 並檢查引數非負| a | b | c | 結果 |
|---|---|---|---|
| 3 | 4 | 5 | 面積 6.0000(直角三角形) |
| 1 | 1 | 3 | No Triangle! |
| 2 | 2 | 2 | 面積 1.7321(正三角形) |