代碼截圖顯示使用 int 類型計算半周長 p = (a+b+c)/2,導致整數除法截斷小數部分。例如邊長 3,4,5 時 p=6 正確;但邊長 2,3,4 時 p=4(實際 4.5),後續 p-c = 0 導致面積為 0。
int a, b, c, p;
p = (a + b + c) / 2; // 整數除法
double s = sqrt(p * (p-a) * (p-b) * (p-c));
double a, b, c, p; // 全部改為 double
p = (a + b + c) / 2.0; // 強制浮點除法
double s = sqrt(p * (p-a) * (p-b) * (p-c));
int / int → int,截斷向零取整printf("%.2f", s) 控制精度遇到數值異常優先打印中間變量(p、p-a 等),定位精度丟失位置。