推介:| 英語課程 | Causeway Bay order food | 職業英語 | 化妝課程 | Wedding Photography | 天窗卷布更換維修 |

發新話題
打印

[檔案] 計算機概論整理

計算機概論整理

一. 計算原理

1.資料(data)為資訊(information)的一種表示方式,資料必須經過處理翻譯後,才能成為有意義的資訊。
2.演算法(algorithm)為使用某種特殊的技巧或方式對工作處理或問題解決的步驟所做的描述。
3.模組(module)為一個可替換(interchangeable)的程式基本單位,通常具有一種特定的功能,並且和它所在的環境也有固定的關聯。例如副程式便可視為一個模組。
4.界面(interface)是指模組與模組,或模組與其環境間連繫的方法。例如參數的傳遞與流程的控制等。
5.一個數字中的最高位位數(digit)稱為most significant digit。例如數字123中,最左邊的位數1便是most significant digit。相對的,最低位位數(如上例中的3)便稱為least significant digit。
6.字元碼(character code)是字元的一種編碼方式。常見的有ASCⅡ(美國標準資訊交換碼,American Standard Code for Infomation Interchange)、BCD(二進數字碼,Binary coded decimal,又稱為packed decimal numbers)等。
7.同位位元(parity bit)是一種自我檢查碼,可用來做為傳遞資料時偵錯之用。它的做法是加進一個位元到每筆資料中,使得每筆資料中位元1的數目均保持一種特定的關係。如果是將這個數目保持為偶數,則稱為even parity,如果是保持為奇數,則稱為odd parity。但是必須注意的是,使用parity方式檢查出錯誤時,不一定是資料出錯,也有可能是parity bit出錯。
8.基本資料結構:
•靜態(staic)資料結構 -- 字串(string)、陣列(array)等。
•動態(dynamic)資料結構 -- 堆疊(stack)、佇列(queue)、鏈結串列(linkde list)、樹(tree)等。
9.運算式表示法:
•中序法(infix) -- 運算子在運算元中間,如 A + B 。
•前序法(prefix) -- 又稱為Polish notation,其運算子是放在運算元的前面,如 +AB。
•後序法(Postfix)-- 又稱為Reversed Polish notation,其運算子是放在運算元的後面,如 AB+。
通常電腦內部比較適合處理前序法或後序法。

[ 本帖最後由 花之慶次 於 2006-8-16 12:39 PM 編輯 ]


相關搜索目錄: 電腦

TOP

10.整數表示法:
•sign and magnitude -- 以最高位元表示正負,而其他位元表示大小。例如:

+13 = 01101
-
-13 = 11101
-

其中劃底線的位元是用來表示正負的。
•2's complement -- 除了各位元有大小外,最高位元還表示正負。例如:

-32 16 8 4 2 1
---------------------
0 1 1 1 1 1 = 31
0 0 0 0 0 0 = 0
1 1 1 1 1 1 = -32+31 = -1
1 0 0 0 0 0 = -32

K個位元所能表示的整數範圍為-2^K到2^K-1。將正數變成負數的方法是將各位元反相後(即0變1,1變0)再加1便是。例如:

-32 16 8 4 2 1
---------------------
19 = 0 1 0 0 1 1
反相 1 0 1 1 0 0
加 1 + 1
---------------------
1 0 1 1 0 1 = -19

將負數變成正數的方法也是一樣。2's complement是目前運用最廣的整數表示法。
•1's complement -- 各位元均有大小,但是最高位元的大小少了1,並具有正負的關係,例如:

-31 16 8 4 2 1
---------------------
0 1 1 1 1 1 = 31
0 0 0 0 0 0 = 0
1 1 1 1 1 1 = -31+31 = 0
1 0 0 0 0 0 = -31

K個位元所能表示的整數範圍為-2^K+1到2^K-1。正負數轉變的方法是將各位元反相即可。例如:

-31 16 8 4 2 1
---------------------
20 = 0 1 0 1 0 0
反相 1 0 1 0 1 1 = -20

11.浮點數字表示法 -- 將數字分成小數部份(mantissa)和指數部份(exponent)兩種,即類似科學記號的方式,成為mantissa*2^exponent,其中mantissa必須小於1而大於等於1/2。mantissa和exponent的表示方法可用上述的整數表示方法。例如(sign and magnitude):

(mantissa) (exponent)
sign 1/2 1/4 1/8 1/16 1/32 1/64 1/128 ︱ sign 8 4 2 1
-----------------------------------------------︱------------------
1 1 0 1 0 0 0 0 ︱ 0 1 1 0 0

+1100 12
= -0.1011 x 10 = -11/16 x 2 = -2816

TOP

12.數字基底轉換方法:
•10進制轉成其他進制 -- 將10進位數字除以所要轉成數字的基底,得到一個商和餘數,餘數便是目前的位數值,商便是前一位的位數值。如果商仍大於其基底,則繼續用同樣的方法往前推進。例如將數字297變成8進制數字:

279 → 37 1 → 4 5 1
(商)(餘數)(商)(餘數)

因此,297 = 451 。
10 8

•其他進制轉成10進制 -- 以各位數數值乘上各位數所在位置的大小,相加後即得。例如8進制的451要轉成10進制數字,則:

2 1 0
451 = 4 x 8 + 5 x 8 + 1 x 8 = 256 + 40 + 1 = 297
8 10

13.整數相加時進位(carry)與溢位(overflow)的問題 -- 只需檢查最高位數從下一位數進位進來的數字(carry in)是否等於最高位數進位出去的數字(carry out),便可知道是否有溢位產生。例如2's complement的加法:

-32 16 8 4 2 1
---------------------
0 1 1 0 0 1 = 25
+ 0 1 0 0 1 0 = 18
----------------------------
1 0 1 0 1 1 = -21
----------------------------
0 1
(carry out)(carry in)

因為carry out≠carry in,因此有overflow發生。但必須注意的是,因為1's complement兩數相加時,必須在相加後加上carry out的值才能得到正確答案(這種技巧稱為wrap-around carry),因此必須等到加上carry out之後,才能做overflow的判斷。例如:

-31 16 8 4 2 1
---------------------
1 1 1 1 1 1 = -0
+ 1 0 0 0 0 0 = -31
----------------------------
carry out 0 1 1 1 1 1 = 31
∥─────┐
1 + └───→1
------------------------------
1 0 0 0 0 0 = -31
------------------------------
1 1
(carry out)(carry in)

因為carry out=carry in,因此沒有overflow發生。

TOP

14.布林邏輯運算定律:

=
(1)雙重反相律: A = A
(2)結合律: (A + B) + C = A + (B + C)
(A * B) * C = A * (B + C)
(3)分配律: A + (B * C) = (A + B) * (A + C)
A * (B + C) = (A * B) + (A * C)
(4)吸收律: A * A = A
A + A = A
----- - -
(5)笛莫根定律: A + B = A * B
----- - -
A * B = A + B

-
其中 A 表示 not A,A + B表示A or B,A * B表示A and B。

二. 電腦硬體

1.channel(又稱為highway或bus)為資料、位址、以及控制訊號在傳送時所經過的孔道。control switch則是用來控制channel中資料傳送的方向。
2.decoder是一種邏輯線路,依照輸入資料碼來選擇一條輸出線路。
3.flip-flop是一種邏輯線路,可用來儲存資料。它的種類包括RS flip-flop(又稱為bistable),JK flip-flop等。這些都是組成暫存器(register)的基本元件。
4.所謂16-bit processor,是指其運作時皆以16個位元長度為單位,而內部資料的傳送,亦以16個位元為單位。
5.一般電腦的硬體架構可區分為控制單元(control unit,簡稱CU)、算術邏輯單元(arithmetic and logic unit,簡稱ALU)、記憶單元(memory unit),輸出入單元(input/output unit)等。
6.記憶單元的組成:
•memory address register(MAR)-- 用來儲存欲存取的記憶體位址。
•memory buffer register(MBR) -- 用來暫時儲存剛從記憶體取出的資料,
或是正要寫入記憶體中的資料。
•address decorder -- 將位址的碼解譯成對應記憶體所在的地方。
•main store -- 資料的儲存區。
7.記憶體的分類:
(1)RAM(random access memory)-- 可做讀寫動作之記憶體。它的硬體線路可分為兩種,一種為靜態(static),另一種為動態(dynamic)。這兩種之間的差別是,動態記憶體內的資料會隨著時間而逐漸消失,因此必須每隔一段時間做一次重現的動作(reflesh),而靜態的RAM則不會。RAM中的資料在關機後便會消失掉。
(2)ROM(read-only memory)-- 只准讀取而不准寫入。ROM在燒錄成了之後便不能再改變它的資料,但是另外有一種PROM(programmable read-only memory)則可以藉著特殊的方式來改變記憶體中的資料。ROM 記憶體內的資料在關機之後均不會消失。
8.算術邏輯單元的組成:
•累積器(accumulator)-- 做為運算時的工作區域,以儲存各種不同的處理資料。
•邏輯線路(logic circuit)-- 用來執行真正的算術與邏輯運算。
•結果暫存器(result register)-- 用來暫時儲存邏輯線路運算後的結果。
•條件狀態碼(condition code或program status bits)-- 用來指示運算後的一些狀態,包括零(zero)、負數(negative)、進位(carry)、溢位(overflow)等位元旗標。


相關搜索目錄: 電腦 Switch

TOP

9.控制單元的組成:
•程式計數器(program counter或location counter)-- 用以指示目前要執行的程式指令所在的位置。
•指令暫存器(instruction register)-- 用以儲存目前要執行的指令碼。
•時鐘脈衝產生器(clock pulse generator)-- 用來控制整個處理器(processor)的計時。
•指令解譯器 -- 用來解譯欲執行的指令碼。
•堆疊指標(stack pointer)-- 用來指示目前系統堆疊頂端所在的位址。
•索引暫存器 -- 用來提供索引定址模式之用,即做為資料的索引。
10.中央處理單元(central processor unit,簡稱 CPU)是由算術邏輯單元(ALU)和控制單元(CCU)所組成的。
11.常見的定址模式:
(1)絕對定址(absolutely addressing或directly addressing)
(2)索引定址(index addressing)
(3)間接定址(indirectly addressing)
(4)相對定址(relative addressing)
(5)立即式(immediate operand)
12.指令週期(instruction cycle)是指要執行一個機器指令時所需的動作順序。
13.DMA(Direct Memory Access)是一種輸出入方式,允許週邊裝置藉著擷取CPU執行週期的方式(稱為cycle stealing)來直接與記憶體做存取的動作。
14.cache store(或稱為slave store)為一種高速的記憶體裝置。associative store(或稱為content-addressable memory)也是一種記憶體裝置,不過它是用來找尋某項資料所在的記憶體位址。
15.pipeline是一種改善處理器執行速度的技巧。它是將指令的每個動作分割成一連串的循序功能單元,各單元之間均由一個緩衝區來連繫資料的傳遞。如此指令便不需要等待前一個指令的完成,而可以緊跟在前一個指令之後進入各功能單元開始執行。
16.除了parity check外,其他常用的資料傳輸檢驗方法還有check sums、block sums、Hamming codes、以及cyclic redundancy check(CRC)等。

三. 電腦軟體

1.組合語言比機器語言的好處:
(1)助記憶的運算碼(mnemonic operation codes)
(2)可使用符號定址(symbolic address)
(3)可自動做資料轉換(automatic data conversion)
(4)另外提供了虛擬指令(pseudo-operations或directives)
(5)可做巨集指令展開(macro expanssion)
2.高階語言是以問題做導向的(problem oriented),而低階語言則以機器做導向(machine oriented)。
3.所謂變數的scope,是指這個變數在程式中所能使用的範圍。可分為局部的(local)和全域的(global)兩種。
4.高階語言的翻譯(translation)方式:
(1)編譯器(compiler)-- 直接將高階語言轉變成可執行的機器目的碼(object code)存起,以做為進一步的處理。也可能需要與其他分割出來的程式目的碼做連結(link),以產生可執行檔。
(2)直譯器(interpreter)-- 每次只分析一個程式敘述,然後馬上執行,不產生目的碼。
5.編譯的步驟:
(1)字彙分析(lexical analysis)。
(2)語意分析(syntax analysis),即parsing。
(3)產生目的碼(code generation)。
6.電腦作業的種類:
(1)批次處理(batch processing)-- 將許多程式組合在一起,當成一個集團來執行。
(2)多元程式規劃(multiprogramming)-- 允許許多程式同時進入記憶體內執行,而CPU在某個時間內只執行一個程式(但沒有全部執行完),因此各程式的完成度均有不同。
(3)多元處理(multiprocessing)-- 為電腦中同時由許多處理器(processor)來執行程式,可能有一個或多個程式。
(4)即時處理(real-time processing)-- 為在某些情況下,電腦必須儘速而且在一定時間內處理完某些事情。通常是電腦用來控制其他的裝置或儀器時,才會有這種處理。


相關搜索目錄: 電腦 語言

TOP

7.作業系統(Operating System,簡稱 OS)為一個或一群程式,用以驅動電腦硬體,管理電腦資源(resource),並提供較高階層的電腦軟體使用環境。
8.作業系統的主要目的:
(1)使電腦資源能夠儘量有效率的運用。
(2)使電腦能夠更容易使用。
9.解決大程式在小記憶體中執行的問題之方法:
(1)覆疊(overlay)-- 將被呼叫的副程式載入到目前不被使用的程式空間。例如副程A呼叫了副程式B之後,再呼叫副程式C,則程式載入過程便如下圖所示:

┌────┐ ┌────┐ ┌────┐
│ A │ │ A │ │ A │
├────┤ ├────┤ ├────┤
│ │ ==> │ B │ ==> │ C │
│ │ │ │ ├────┤
│ │ │ │ │////│
│ │ ├────┤ ├‥‥┤
│ │ │ │ │ │

執行副程式A A 呼叫 B A 呼叫 C

(2)虛擬記憶體(virtual memory)-- 編譯時以邏輯位址指定給各變數和敘述,而在執行時再載入轉換對應到實際的位址。但一次只載入一單位的程式,當參用到不在記憶體內的指令時,再載入所需的指令所在的程式單位(可能蓋過了其他的程式單位)。常見的方式有demand paging和segmentation等,前者程式單位為固定長度,而後者程式單位為變動長度。
10.Spooling全名為Simultaneous Peripheral Operation On-line,是一種改善輸出入效率的方式。它的做法是將較慢的輸出入裝置如讀卡機、印表機等,以較高速的輸出入裝置做為他們與電腦之間的界面裝置。例如欲印表的程式在執行時,其輸出均暫存到磁碟中,等到程式執行完畢而且列表機有空時再加以印出。
11.死結(dead lock)為作業系統中常見的一個問題,也就是有兩個以上的工作元(process)相互之間都在等待對方所持有的資源才能完成工作,但是由於一直得不到,而使得這些工作元成為膠著的狀態,無法完成其工作。
12.結構化程式設計的三種邏輯結構:
(1)循序結構(sequence)
(2)選擇結構(selection)
(3)反複結構(Iteration或Repetition)
13.演算法(algorithm)的五個條件:
(1)輸入(input)
(2)輸出(output)
(3)明確性(definiteness)
(4)限次性(finiteness)
(5)有效性(effectiveness)
14.Coroutine為數個副程式相互呼叫,但每次呼叫時都是從上一次呼叫離開時的下一個指令開始執行。
15.Conroutine為在電腦系統中同時執行的幾個副程式。
16.Open subroutine call為呼叫時將副程式碼插入到程式中,一般都是在編譯階段發生的,如巨集呼叫(macro call)。
17.Close subroutine call為呼叫時將控制權交給被呼叫的副程式,一般都是在執行階段發生的,如一般的副程式呼叫。


相關搜索目錄: 電腦 作業系統

TOP

四. 電腦應用

1.記錄(record)為組成檔案的資料基本單位,記錄中的各項資料集合便稱為欄位(field)。
2.常見的檔案結構:
(1)串列檔案(serial file)-- 記錄在檔案中並沒有特定的順序。
(2)循序檔案(sequential file)-- 記錄在檔案中是以一個或多個欄位做為鍵值,循序排列而成的。
(3)索引循序檔案(index sequential file)-- 為循序檔案再加上一個或多個索引檔案。
(4)隨機檔案(random file)-- 記錄在檔案中的排列是以某種公式來計算而得,而這個公式則是由使用者所自行設計的。
3.資料庫(database)為一個系統中所有程式所處理的資料之集結(collection)。而管理資料庫資料的系統便稱為資料庫管理系統(Database management system,簡稱DBMS)。
4.資料庫依其資料模式的結構可分為網路資料庫(network database)和關聯資料庫(relational database)兩種。
5.資料通訊(data communication)中控制資料傳輸方向的三種方式:
(1)Simplex communication -- 資料傳輸只能固定為一種方向。
(2)Half duplex communication -- 資料允許可以雙向傳輸,但同一時間內只能使用一種方向。
(3)Full duplex communication -- 資料在任何時刻均可以雙向傳輸。
6.鮑率(baud rate)為資料傳輸的一種測量單位,表示每秒鐘可以傳送多少位元。
7.通訊協定(communication protocol)為兩種裝置在傳輸資料時的界面定義,亦即傳輸方式之定義。
8.離散處理(distributed processing)為一個工作元(process)在網路的許多地方被分別處理完成。這個網路可能是由許多處理機(processor)所組成的。
9.調變解調器(modem)為一種通訊信號轉換設備,用來將數位信號轉變成聲頻信號,以便透過電話網路傳送該信號。

五. 副程式參數傳遞的方式

1.Call-by-reference(又稱為call-by-address,或Call-by-location):呼叫程式傳送一個位址值(稱為l-value)給被呼叫的副程式,而這個位址值便是真正參數值(稱為r-value)所存放的位置。如果所傳送的參數是一個表示式,如A+B時,則將其計算結果置於一個新的位置,並將位置的位址傳送給被呼叫的副程式。
2.Call-by-value:真正參數(actual parameter,即argument)首先被計算成值,然後將這個值傳送給被呼叫副程式的形式參數(formal parameter)。當副程式執行完畢後,並不將參數的結果值傳回給呼叫程式。
3.Call-by-value and copy-restore:方式和Call-by-value相同,但副程式執行完畢後,會將參數的結果值傳回主程式。
4.Call-by-name:將參數的名字(或字串)傳給被呼叫的副程式,當副程式需要用它時,才把這個名字代入使用,並根據最近的一個scope來取得它的值。副程式執行完時,並不傳回參數的結果值,因為形式參數根本不存在。

至於如何辨別一個程式語言是採用那個方式的參數傳遞,可以利用下面的程式來做測試:

procedure SUB(i,j)
begin
i=i+1;
print(x);
i=i+j;
print(i);
end;

program TEST;
begin
x=1;
y=2;
SUB(x,x+y);
print(x);
end;

結果:

Call-by-reference 2,5,5
Call-by-value 1,5,1
Call-by-value and copy-restore 1,5,5
Call-by-name 2,6,6


相關搜索目錄: 電腦 Database 語言

TOP

六. 遞迴

很多高階語言的都有一項重要的特性-遞迴(recursive call)。所謂遞迴,便是利用程式自己呼叫自己的方式來完成工作。遞迴程式的製作,大都以下列方式來完成:

首先是考慮什麼時候程序不會呼叫自己,亦即考慮boundary的問題。其次便是考慮如何呼叫自己來完成工作,這時必須假想呼叫自己的部份已經完成了它所需完成的工作。當依上述步驟完成了演算法之後,接下來便是檢驗的工作了。檢驗的方式通常是假想輸入不同的輸入值(最好取boundary兩端、及其他罕見的輸入值為主,再取一個正常的輸入值),然後看看是否輸出的答案正確,以及有否造成永久迴路的現象等。前者的錯誤是表示第二個步驟有問題,後者的錯誤,則表示第一個步驟有問題。

並非每種程式語言都有遞迴呼叫的結構,因此有時我們必須將遞迴呼叫結構改成非遞迴呼叫結構。這邊舉一個最常見的例子如下:

題目:試分別寫出漢諾依塔(Tower of Hanoi)問題的recursive和non-recursive algorithm。Tower of Hanoi的問題定義如下:

有三根柱子A,B,C和n個環,n是任意正整數。n個環的直徑都不相等。開始時,柱A上已套好n個環,直徑大的在下,直徑小的在上,由小而大,柱B和柱C是空的。現在要把套在柱A的n個環,搬套到柱B上,但是有兩個條件:
(1)每一次只能從一條柱子的頂端拿走一個環套到另一條柱子的頂端。
(2)一環套到一柱頂端時,此環直徑必須小於柱頂環之直徑。
例如n=3時,搬移的順序為:
A→B, A→C, B→C, A→B, C→A, C→B, A→B

答:

(1) recursive algorithm:

Procedure HANOI(A,B,C,n) // 將n個環從A移到B //
if n<=0 then print("error")
else if n=1 thin print(A,"→",B)
else [call HANOI(A,C,B,n-1);
print(A,"→",B);
call HANOI(C,B,A,n-1)]
end

設計的主要觀念為:
1.將A柱中前n-1個環搬到C柱中暫置。(呼叫自己)
2.將A柱中剩下最大的環搬到B柱中。
3.將C柱中的n-1個環搬到B柱中。(呼叫自己)

(2)將recursive改成non-recursive的做法有很多種。如果已經知道recursive algorithm的話,最正統的方法便是直接將它化成non-recursive的形式。由recursive algorithm化成non-recursive algorithm的方法如下:

1.在程式開頭處標上一個label。
2.在每個呼叫自己的敘述的下一個敘述前,各標上一個label。
3.把每個呼叫自己的敘述代換成一個將目前狀態push到stack的敘述,以及將程式參數改變的敘述,然後跳回程式的開頭。
4.將每個返回敘述變成檢查stack的敘述,只有在stack為空時才能返回,否則必須pop出以前的狀態,然後跳到應返回的位置繼續執行。

上述的方法其實是在模擬程序遞迴呼叫的方式,label的記錄則是要得知其返回位址。因此本題的non-recursive algorithm便可以化成:

Procedure HANOI(A,B,C,n) // 將n個環從A移到B //
step 1: if n<=0 then print("error")
else if n=1 then print(A,"→",B)
else [push(A,B,C,n-1,2);
(A,B,C,n)←(A,C,B,n-1);
goto step 1;
step 2: print(A,"→",B);
push(A,B,C,n-1,3);
(A,B,C,n)←(C,B,A,n-1);
goto step 1;
]
step 3: if stack not empty then
[pop(A,B,C,n,ret_step);
goto ret_step]


相關搜索目錄: 語言

TOP

這個方法所得出的algorithm雖然不是最佳的,但是卻保證一定正確。當然您也可以利用程式技巧將它化簡成沒有label的結構化程式。另外一種方式是要靠靈感的,可說是可遇而不可求。例如上述algorithm,其實可以寫成:

Procedure HANOI(A,B,C,n) // 將n個環從A移到B //
step 1: if n<=0 thin print("error")
else if n=1 thin print(A,"→",B)
else [Push(C,B,A,n-1);
Push(A,B,C,1);
Push(A,<C,B,n-1)]
if stack not empty then
[pop(A,B,C,n);
goto step 1]
end

使用三個push敘述來模擬三次搬運,相當簡潔。這是從觀察它的呼叫方式和stack的關係所發覺的,並無規則可循。雖然這個algorithm相當簡潔,但是執行速度並不是最好的。主要的原因是在於模擬recursice call的stack push和pop次數太多,因而減低了執行的速度。如果我們所要求的是速度的話,則必須儘量不要用stack的結構來模擬,應該從分析該問題non-recursive關係著手。這種過程一般都相當冗煩,而且不一定能夠做得到。這裡我們只列舉別人研究的成果供讀者參考,並做為以後您將來寫程式時的一個目標。Hanoi塔問題的non-recursive關係如下:

1.當n為奇數時,最小的環依順時針方向在三個柱子之間搬運,搬運後剩下的兩根柱子只有一種搬運方法。例如n=3時,搬運方式為:

A→B (最小) A ────→ B
A→C (次小) │ │
B→C (最小) ┴ C ┴
A→B (最大) ↑ │ │
C→A (最小) └─ ┴ ←┘
C→B (次小)
A→B (最小)

2.當n為偶數時,最小的環依逆時針方向在三個柱子之間搬運,搬運後剩下的兩根柱子只有一種搬運方法。例如n=4時,搬運方式為:

A→C (最小) A ←──── B
A→B (次小) │ │
C→B (最小) ┴ C ┴
A→C (次大) │ │ ↑
B→A (最小) └→ ┴ ─┘
B→C (次小)
A→C (最小)
A→B (最大)
C→B (最小)
C→A (次小)
B→A (最小)
C→B (次大)
A→C (最小)
A→B (次小)
C→B (最小)


相關搜索目錄: 搬運

TOP

七. 結構化程式設計

PASCAL語言最為人稱譽的,莫過於它的結構化程式撰寫方式了。什麼是結構化的程式呢?簡單地說,就是每個流程控制的命令均只有一個入口和一個出口。這些流程控制命令的組成大致可分為下列三種:

1.循序結構(sequence)
2.選擇結構(selection)
3.重複結構(repetition或iteration)

任何程式均可由這三種結構來組成。循序結構是最簡單也最常見的一種結構,它是按照敘述的先後次序來逐步執行,這些敘述可能是個副程式的呼叫命令,或是普通的變數值指定敘述等等。選擇結構是依某種條件來選擇執行結構內某個部份的程式,最常見的形式便是IF THEN ELSE敘述。另外還有一種CASE敘述其格式如下:

case <var> of
<exp 1> : <program 1>;
<exp 2> : <program 2>;
: :
<exp n> : <program n>;
else <program else>;
end;

它的意思是說看看<var>的值是什麼,如果是<exp 1>、<exp 2>...<exp n>其中的一種,則執行它後面所對應的程式,否則便執行<program else>的程式。基本上我們也可以使用多重的IF THEN ELSE敘述來達到此一功能:

if <var> = <exp 1> then <program 1>
else if <var> = <exp 2> then <program 2>
:
else if <var> = <exp n> then <program n>
else <program else>

重複結構是指依某種條件來反複執行結構內的程式,它的形式包括FOR NEXT迴圈、WHILE WEND迴圈、以及REPEAT UNTIL迴圈。REPEAT UNTIL迴圈的格式如下:

repeat
<program>
until <expression>

它的意思是說反複執行<program>中的程式,直到<expression>為真時才離開。REPEAT UNTIL和WHILL WEND的差異是,前者的程式部份至少執行一次以上,且當條件成立時才離開,而後者的程式部份則可能不執行到,而且是當條件不成立時才離開。


相關搜索目錄: 語言

TOP

本文是整理給未接觸過計算機概論的新手看的, 既然是概論, 看看了解就好, 不用去"背"下來. 不過裡面和程式語言比較有關的, 有下列幾個部份, 最好能完全"理解", 因為在寫程式時會常常碰到.

1. 數值表示法
2. 布林運算式
3. 遞迴
4. 結構化程式設計


相關搜索目錄: 語言

TOP

多謝先 得閒要入尼增值 

TOP

溫故知新... 謝謝

TOP

好文章
入門精讀

TOP

Gd information, thank you!

TOP

good, thx for sharing

TOP

Thank for the tutorials

TOP

提示: 作者被禁止或刪除 內容自動屏蔽

TOP

應做精華啦

TOP

發新話題


重要聲明:本討論區是以即時上載留言的方式運作,本網站對所有留言的真實性、完整性及立場等,不負任何法律責任。而一切留言之言論只代表留言者個人意見,並非本網站之立場,用戶不應信賴內容,並應自行判斷內容之真實性。於有關情形下,用戶應尋求專業意見(如涉及醫療、法律或投資等問題)。由於本討論區受到「即時上載留言」運作方式所規限,故不能完全監察所有留言,若讀者發現有留言出現問題,請聯絡我們。本討論區有權刪除任何留言及拒絕任何人士上載留言,同時亦有不刪除留言的權利。切勿撰寫粗言穢語、誹謗、渲染色情暴力或人身攻擊的言論,敬請自律。本網站保留一切法律權利。


Copyright 1997- Xocat. All Right Reserved.