logo

Wednesday 23rd of May 2012

廣告

廣告贊助商

首頁 C語言教學 C語言教學 電腦運作的原理
電腦運作的原理 PDF 列印 E-mail
作者是 Victor   
週三, 11 二月 2009 23:53

電腦的記憶

電腦是一部會按照我們要求做事的機器,它由記憶、以及執行或計算的能力構成,它的記憶可以想成是一張很長的紙條,紙條劃分成一個一個的格子,每個格子都有個編號,想像一下電腦的記憶體就像是下面的這張紙條一樣

  1. (空白)
  2. (空白)
  3. (空白)
  4. (空白)
  5. (空白)
  6. (以下省略....)

 

上面所表示的,我們就想成是完全空白的一張紙條,當然,這樣的紙條長度並不是沒有限制,也就是電腦的記憶體是有限的

程式語言

空白的紙條或記憶並沒有什麼實質的意義,為了能讓人和電腦溝通,所以人類發明程式語言來和電腦進行溝通,而程式語言可以填入這張紙條的語言,電腦會依照這紙條上的指示,一步一步的往下照著做,除此之外,紙條的空格也可以拿來儲存資料,我們先用口語話的方式來寫一個簡單的程式

 

  1. 格子4 的數字 加上格子5 的數字後,擦掉原本格子5的值重新填入格子5
  2. 格子4 的數字 +1 後,擦掉原本的值重新填入格子4
  3. 如果格子4的數值比11小,就跳到格子1往下執行,否則結束程式
  4. 數值 1 (用來存放遞增數值的格子,一開始是1)
  5. 數值 0 (用來存放總合數值的格子,一開始是0)

 

請拿出紙和筆來,想像你是一部電腦,實際的跟步驟一步一步地執行,請問當此程式結束時格子5的數值是多少?

以下我們列出整個程式執行的過程

(格子4 + 格子5) 填寫到 格子5格子5= 1
(格子4 + 1) 填寫到 格子4格子4= 2
格子4 = 2 比11小,跳到格子1繼續往下執行

 

(格子4 + 格子5) 填寫到 格子5格子5= 3
(格子4 + 1) 填寫到 格子4格子4= 3
格子4 = 3 比11小,跳到格子1繼續往下執行

 

(格子4 + 格子5) 填寫到 格子5格子5= 6
(格子4 + 1) 填寫到 格子4格子4= 4
格子4 = 4 比11小,跳到格子1繼續往下執行

 

(格子4 + 格子5) 填寫到 格子5格子5= 10
(格子4 + 1) 填寫到 格子4格子4= 5
格子4 = 5 比11小,跳到格子1繼續往下執行

 

(格子4 + 格子5) 填寫到 格子5格子5= 15
(格子4 + 1) 填寫到 格子4格子4= 6
格子4 = 6 比11小,跳到格子1繼續往下執行

 

(格子4 + 格子5) 填寫到 格子5格子5= 21
(格子4 + 1) 填寫到 格子4格子4= 7
格子4 = 7 比11小,跳到格子1繼續往下執行

 

(格子4 + 格子5) 填寫到 格子5格子5= 28
(格子4 + 1) 填寫到 格子4格子4= 8
格子4 = 8 比11小,跳到格子1繼續往下執行

 

(格子4 + 格子5) 填寫到 格子5格子5= 36
(格子4 + 1) 填寫到 格子4格子4= 9
格子4 = 9 比11小,跳到格子1繼續往下執行

 

(格子4 + 格子5) 填寫到 格子5格子5= 45
(格子4 + 1) 填寫到 格子4格子4= 10
格子4 = 10 比11小,跳到格子1繼續往下執行

 

(格子4 + 格子5) 填寫到 格子5格子5= 55
(格子4 + 1) 填寫到 格子4格子4= 11
格子4= 11 等於11,結束程式

終於算完了,相當煩人,你剛剛做的事情正是電腦做事情的方式,一個命令一個動作,加上記憶體的幫忙,可以做很多事情,上面這個給人類執行的程式,其實做的工作就是計算

1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10

的結果,或許你覺得沒什麼,以一般人的計算方式計算這個都相當簡單和快速,那...如果是這樣呢?

1 + 2 + ... +  9999

以人肉電腦執行上面的程式可能算一整天,而且很容易出錯,可是這種重覆有規則的工作,正是電腦的專長,人類要計算相當久的東西,電腦可以在很短的時間內做完,而且電腦幾乎不會疲勞或出錯,除非程式的本身是錯的,以上這個程式我們用C語言改寫

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    // 計數器變數 i,功用和格子4是一樣的
    int i;

    // 加總變數,功用和格子5是一樣的
    unsigned int sum = 0;

    // 將 i初始設為 1,執行 9999次,每執行1次i遞增1
    for(i = 1; i <= 9999; ++i) {
        // 將加總變數加上i後覆蓋加總變數,和格子1的功用是一樣的
        sum += i;
    }
    printf("Sum : %d\n", sum);
    system("PAUSE");
    return 0;
}

上面這個C語言程式在我電腦執行了0.109秒就算出了答案,或許你會說,我們有公式可以用,事實上電腦一樣也可以用公式解,那如果是沒有公式的解呢? 例如質數的計算,又或著是其它的工作,例如寄信給公司的10000位有客戶,每張信件的格式都一樣,只是名稱不同 ? 重覆有規則的工作,正是電腦的強項,而電腦工作的方式,就如我們上面所示範的,由程式設計師,寫出程式,存放到電腦的記憶體中,然後由電腦的執行單元,一步一步去做,由於現在的電腦每秒鐘可以做幾兆次這樣一步的工作,因此對人類很繁重的計算,電腦通常只要一眨眼就算完了,而且不會出錯,人類可能要花一輩子才算得完的東西,電腦或許幾秒鐘就算完了,這正是電腦的優勢,但如你所見的,其實電腦很笨,更談不上有什麼智慧,它只是一台計算速度很快的機器而已,抽像思考等能力才是人類的強項,因此我們才需要把不善長的事情丟給電腦執行,當你學會程式語言,就可以運用你善長的思考、專長,配合電腦來幫你完成你想做的事

 

核心是 Joomla!. Designed by: Free Joomla Theme, whois protect. Valid XHTML and CSS.