輸入三角形三邊長 a, b, c,判斷能否構成三角形,若合法則使用海倫公式計算面積:
s = (a + b + c) / 2(半周長)
Area = √[s(s-a)(s-b)(s-c)]
a+b>c && a+c>b && b+c>a。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 | 小數邊長 |
s = (a+b+c)/2 若 a,b,c 為 int 會截斷,必須用 2.0 或定義為 double。sqrt 隱式聲明警告,鏈接時報 undefined reference。s(s-a)(s-b)(s-c) 產生負數(浮點誤差),建議用 long double 或 Kahan 求和優化。long double 提高精度:sqrtl、fabsl。a²+b² ? c²)。errno。海倫公式是計算三角形面積的經典算法,關鍵在於嚴格的輸入校驗(正數性 + 三角不等式)與浮點數精度控制。本文提供的模塊化代碼結構清晰,便於擴展與單元測試,是 C 語言基礎數學編程的優秀範例。