C 教材:浮點數型態的變數

現在,我們再介紹一個 C 的保留字:double。 它用來宣告雙精度浮點數 (簡稱「浮點數」) 的變數。 我們用它來計算華氏 70 度的攝氏度數。 所得的輸出應該是

70     21.1

#include <stdio.h>
 
/* 將華氏 70 度轉換成攝氏度數  (fahr-float.c) */
main() {
    double fahr, cels;
 
    fahr = 70;
    cels = 5*(fahr-32)/9;
    printf("%3.0f\t%.1f\n", fahr, cels);
}

double 是用 64 bits 記錄的浮點數。 在記憶體中,它佔據連續 8 個 bytes。

如果 C 看到一個四則運算符號的兩邊有一個是小數、或浮點數資料型態的變數, 則它以浮點數的方法做計算。所得的結果,也是浮點數。在

cels = 5*(fahr-32)/9;
這個指令裡,C 先計算 fahr-32。因為 fahr 是浮點數變數, 所以 fahr-32 的結果是浮點數 38.0; 然後計算 5*38.0 得到 190.0; 然後計算 190.0/9 得到 21.11111111111111 (在數學上,應該是 21.1 循環,但是浮點數的精確程度,只能得到十六個十進制的有效數字)。 最後,再將 cels 的值定義為 21.11111111111111

我們再介紹一種 printf() 的輸出格式。

%f 以雙精度浮點數解讀變數的值, 小數點下固定給 6 位。 最後一位如果必要的話,會四捨五入。整數部分以恰好的位數輸出
%7f 同上,但至少用 7 個字元輸出 (含負號與小數點), 若變數的值用不到 7 個字元,靠右邊排齊,左邊留空白
%-7f 同上, 但若變數的值不到 7 位,靠左邊排齊,右邊留空白
%.2f 以浮點數解讀變數的值, 小數點下固定給 2 位。 整數部分以恰好的位數輸出。最後一位如果必要的話,會四捨五入
%.0f 同上,但小數點下固定給 0 位, 也不輸出小數點,也就是四捨五入到整數位
%7.2f%.2f, 但至少用 7 個字元輸出, 若變數的值用不到 7 個字元,靠右邊排齊,左邊留空白。
%-7.2f%-7f 中的 - 號意義
上面說的 7 可以改成任何正的常數整數。實驗
double x;
x = 2.71828;
printf("|%f\n|%6f\n|%10f\n|%10.2f\n|%.0f\n",x,x,x,x,x);
得到
|2.718280
|2.718280
|  2.718280
|      2.72
|3

習題

  1. 如果將前面的第三個指令改寫成
    cels = (5/9)*(fahr-32);
    結果如何?

[BCC16-C]
單維彰 (2000/03/24) --- 03/04/26 (單)
[Prev] [Next] [Up]