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

C 語言華氏轉攝氏溫度:整數除法陷阱與修正

     編輯:程式設計疑難解答

錯誤代碼

c = 5 / 9 * (f - 32); // 結果永遠是 0

原因

C 語言中 整數除法向零截斷。5 和 9 均為 int,5 / 9 = 0,乘以任何數仍為 0。

修正方案(任選一)

// 1. 至少一個運算元改為浮點常量
c = 5.0 / 9 * (f - 32);        // 推薦:清晰表達浮點運算
c = 5 / 9.0 * (f - 32);        // 同理
c = (float)5 / 9 * (f - 32);   // 強制轉型,略顯繁瑣

// 2. 調整運算順序(不推薦,精度損失大)
c = 5 * (f - 32) / 9;          // 先乘後除,但仍為整數運算,誤差大

完整可運行示例

#include <stdio.h>

int main() {
    float f, c;
    printf("請輸入華氏溫度 f = ");
    scanf("%f", &f);
    c = 5.0 / 9 * (f - 32);   // 關鍵修正
    printf("對應攝氏溫度 c = %.2f 度\n", c);
    return 0;
}

延伸:避免整數除法陷阱的習慣

  • 浮點運算常量帶 .0 或 f 後綴(5.0 / 5.0f)。
  • 變量參與除法時,若需浮點結果,顯式轉型 (float)a / b。
  • 開啟編譯器警告 -Wconversion (GCC/Clang) 或 /W4 (MSVC) 可捕獲隱式整數截斷。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved