C 教材:整數型態的變數

請自行編輯、編譯、執行以下程式。執行的結果應該在螢幕上看到一列

The answer is -40
眾所周知,華氏與攝氏的溫度指標,在零下 40 度時相等。
#include <stdio.h>
 
/* 將華氏 -40 度轉換成攝氏度數  (fahr-int.c) */
main() {
    int fahr, cels;
 
    fahr = -40;
    cels = 5*(fahr-32)/9;
    printf("The answer is %d\n", cels);
}

首先,在這個程式的第一個指令,我們看到一個 C 的保留字:int。 它的意思是,宣告 (declare) 兩個變數名:fahrcels, 並且告訴 C,這兩個變數的值屬於整數資料型態。 所謂整數資料型態就是以 32 bits、二補數的解讀方式,來記錄整數資料。 它可以記錄從 -231 到 231-1 之間 (含) 的所有整數。

第二個指令,將 fahr 的值定義成 -40。 第三個指令,先計算 = 右邊的 5*(fahr-32)/9,再將計算結果定義成 cels 的值。 第四個指令,在螢幕上輸出答案。 然後,main 函式結束了,這整個程式也就結束了。

我們先注意 - * / 這三個符號。非常直覺地,它們就是四則運算的 減、乘、除符號。在此缺席的是加號:+。 而一對 ( ) 表示裡面的語句要先執行,這也是很符合習慣的。 這些其實都不需要解釋。

或許,需要解釋的是 = 號。 它只是採藉了數學裡面的等號,但是在意義上並不相同。 通常 = 號的左邊會是一個變數名, 右邊是一個語句。C 必須先執行 = 號右邊的語句, 再將 = 號左邊變數的值,定義成計算的結果。

基於這個認識,以後我們會看到類似

n = n + 1;
這樣在數學上荒謬的語句。 這句話的意思,是先計算 n+1,再將 n 的值定義成計算的結果。 所以,如果 n 在這個指令執行以前的值是 5, 那麼在這個指令執行以後的值就是 6。

關於這個程式,我們還有三點要說明。 留到下面三節詳談。 最後我們要提醒讀者的是,fahrcels 在此分別代表華氏和攝氏度數。 為了方便,您當然可以將這兩個變數命名為 FC 甚至於 xy。 但是,「命名守則第一條」就是說

盡量選擇對讀原始碼的人類來說,容易認出意義的變數名稱
順便附贈「命名守則第二條」:
盡量避免使用小寫英文字母 l、大小寫英文字母 O 和 o
因為中文 Big-5 碼有許多不在 ANU 集合內,所以不能用中文當做 C 的變數名稱。

習題

  1. 考慮以下三個指令
    int n;
    n = 7;
    n = 2*n-13;
    執行過後,n 的值應該是多少?
[BCC16-C]
單維彰 (2000/03/24) ---
[Prev] [Next] [Up]