CPU 用來暫存資料的變數

什麼叫做變數 (variable)

  1. 請參考並預習課本 page ???

  2. 程式裡的變數是電腦中的 CPU 存放一些數值或是資料的地方, 就好像你的腦袋, 他知道怎麼樣做加減乘除等運算, 可是如果給你 100 個數字要你加起來, 一般人會把這些數字用紙筆 "記下來" , 然後一個數字接著一個加起來, 運算的中間結果也是記錄在紙上, CPU 當然不是用紙筆, 它就是用變數記錄這 100 個數字。 原則上,一個變數裡可以放一個數字或是資料, 另外就像你寫在紙上的資料可以塗掉重寫一樣, 變數裡的資料也可以塗掉換成另一個資料, 而原來的資料就看不到了, 變數內的資料會被 CPU 改變這一點就是為什麼它叫做 "變數" 的原因了。

程式裡的變數和代數裡的變數有關係嗎?

數學裡的變數不是用在函式裡就是用在方程式裡: 用在函式時有所謂的自變數和因變數, 自變數有它的定義域, 也就是說自變數是一大堆數字中的一個; 用在方程式裡則是指某一些特定的數值, 基本上和程式裡的變數是無關的。

變數都有一個名稱:

為什麼變數要有名稱?

如果你在一張紙上記錄 100 個數字, 下個星期再回來看的話, 你知道哪一個數字代表什麼意義嗎? 所以通常你還會替每一個數字加上簡單的說明, 或是給他一個名稱, 在程式裡面的話也是一樣的, 程式設計者替每一個存放資料的變數取一個名字, 這樣 CPU 能根據變數的名字來使用它所記錄著的資料。 例如: 有一個程式 AddNumber.exe 它由鍵盤讀取 10 個整數資料, 把它們加起來再把結果列印出來, 請執行一下....

請你想一想, 這樣子的程式是不是會命令 CPU 做下面的一連串工作呢?

  1. 將一個累計的變數設為 0

  2. 重複下列兩個步驟 10 次
    1. 由鍵盤讀取一個數字記錄起來
    2. 把這個數字加到一個累計的變數裡

  3. 列印累計變數內存放的數值資料

在 1 中"累計的變數"就是本程式需要的一個變數, 2.a 中所謂 "記錄起來" 是本程式需要的第二個變數, 要重複 10 次的話又需要另一個變數來記錄目前 CPU 到底在做第幾次了, 這三個變數我會依序給它取名叫做 sum, inputNumber, count 。 你在取名字的時候一定要取一個能代表它所存放資料意義的名字, 千萬別偷懶叫它們是 a,b,c 或是 x,y,z。

如何使用變數呢?

假設有一個變數 x, C 程式的敘述

的意思就是在 x 這個變數裡記住 (存放) 10 這個數字。

的意思就是叫 CPU 看一下 x 這個變數現在記錄的數值是多少, 把這個數值加 1, 把這個結果再放進變數 x 裡面 (原來的資料會被蓋掉)。

如果你用代數的觀念來想 x = x + 1 這個敘述的話, 如果你覺得這個敘述是對的話, 你的數學老師都該要退休了。 以代數的眼光來看, 這個敘述當然是不對的。 還好,這不是代數。 請你回憶一下學習程式語言的方法, 你就別問 "為什麼這裡用的符號 'x' 、 '=' 、 '+' 都和代數裡頭一樣可是意義卻不一樣了?" 沒有什麼特殊原因, 因為在 C 語言中 x = x + 1 就是解釋為 "把 x 變數的內容拿出來加 1 以後再存回變數 x 之中"。

倒是可以告訴你有一種叫做 APL 的語言, 為了降低上述誤會的可能性, 把上面的動作以

表示, 應該有比較清楚吧!

在 PASCAL 中也是因為這樣, 所以用

來表示上面的動作。

好, 最後希望你看到 x = x + 1 的時候把它念成 "把變數 x 的內容拿出來加 1 以後再存回變數 x 中" 這樣你就會很清楚如何在 C 程式中使用 x = x + 1 這樣的敘述了。

變數的型態

變數都要在使用前先定義它所要存放資料的型態, 例如:int sum; 定義 sum 這個變數裡存放的資料是整數型態。 變數除了如前說都要有一個名稱之外, 還要先說清楚它裡面要放什麼樣子的資料。 你可以這麼想: 當你看到在紙上寫的 disque 或是 manuel 時, 你可能會想說這個英文是什麼意思啊? 可是你要是真的去查英文字典的話你大概會失望的, 應該是查不到的, 因為這是法文嘛! 你看,不跟你說的話你大概以為我拼錯了吧! 另外舉一個例子,如果你看到 1010 的話, 到底是十進位的壹千零壹拾呢, 還是二進位裡代表拾的數字呢? 在程式裡也是這樣子的, 如果你只說 number 是一個變數, 可以用來存放資料而不說資料是什麼樣格式的, 那麼程式裡在使用這資料的時候就會出現模稜兩可的狀況、 CPU 不知道你到底要做什麼,例如:

int x;
x + 1;
float x;
x + 1;

兩個情形下 CPU 在執行到 x+1 時加法動作是完全不一樣的。

C 程式裡有哪些型態可以用呢?

來撰寫上面的 AddNumber.c 程式吧!

  1. 寫一個 main() 函式的空殼子

  2. 重複做十次某些動作的話該用

  3. 宣告一個變數內存放的是整數資料的話要用 待會兒還有其它的變數......

  4. 由鍵盤讀取一個整數該用 記得變數要先宣告其型態, 還應該在最前面加上 來定義一下 scanf() 函式。

  5. "加到累計的變數裡"這句話應該先解釋為 "把變數裡的資料和新數字相加起來再存放到原變數中" 所以該用 記得再定義一個整數變數 sum。

  6. 把所有 10 個數字都加到 sum 裡看起來應該可以得到正確的結果, 可是在第一次執行 時會先讀出 sum 變數內的資料,這裡頭是什麼啊? (事實上什麼都有可能耶!) 所以我們應該用下面的敘述先放個 0 進去,

  7. 列印結果該用 前面已經加過 #include <stdio.h>了,所以這裡不用重複了。

  8. 哇!結束了,測試一下吧!

變數宣告的時機

一個變數在適當的時候宣告, 可以免除很多程式設計者的負擔, 有的人喜歡把所有程式使用到的變數都在程式一開始的時候宣告, 以避免不小心忘記宣告, 可是這樣子做的話所有的變數在程式裡都隨時保持可以更改的狀況, 萬一你程式出錯了, 你希望找出究竟某一個變數在什麼地方值出錯了, 那可就要整個程式都搜索一遍了。 因此如果保持需要用的時候再宣告的話, 可以得到較為清楚的程式。

變數的初始化

程式設計課程 首頁

製作日期: 09/13/2008 by 丁培毅 (Pei-yih Ting)
E-mail: pyting@mail.ntou.edu.tw TEL: 02 24622192x6615
海洋大學 電機資訊學院 資訊工程學系 Lagoon