新世代計算機概論 第14章 程式語言
14-1 程式語言的演進 指令 (instruction) 是指揮電腦完成一項基本任務的命令。 14-1 程式語言的演進 指令 (instruction) 是指揮電腦完成一項基本任務的命令。 程式 (program) 是一組有順序的指令集合。 程式語言 (program language) 是用來撰寫程式的語言。
14-1-1 第一代語言-機器語言 機器語言 (machine language) 的每個指令都是由0與1組合而成,包含了運算碼 (op-code) 與運算元 (operand) 兩個部分。 屬於機器相關語言,不具有可攜性。
14-1-2 第二代語言-組合語言 組合語言 (assembly language) 所撰寫的程式必須經過組譯程式 (assembler) 轉換成目的碼或機器語言,才能執行。 屬於機器相關語言,不具有可攜性。 機器語言和組合語言統稱為低階語言。 組譯程式 (assembler) 可以將由組合語言撰寫出來的程式轉換成目的碼,而目的碼包含了機器指令、資料值及這些項目的位址。
14-1-3 第三代語言-高階語言 語法近似於英文。 14-1-3 第三代語言-高階語言 語法近似於英文。 屬於機器無關語言,所撰寫的程式必須經過直譯程式 (interpreter) 或編譯程式 (compiler) 轉換成目的碼或機器語言,才能執行。 int COMPARE(int x, int y) { if (x < y) return -1; else{ if (x == y) return 0; else return 1; }
14-1-4 第四代語言-超高階語言 使用者只要在套裝軟體內選取工具、介面、資料庫或控制項,就可以快速完成程式的開發。
14-1-5 第五代語言-自然語言 自然語言允許使用者以多種方式來敘述同一件事情,主要應用在人工智慧方面。
14-2 程式語言典範
14-2-1 命令式典範 整個程式是由一連串的命令與程序所組成,只要逐步執行這些命令與程序,就可以得到結果。
FORTRAN是IBM公司於1954年所發展出來的高階程式語言,一開始應用於IBM 740電腦的科學計算,現在則廣泛應用於經濟分析、工程數學及科學研究。 C FORTRAN PROGRAM X = 0 1 IF (X .EQ. 10) GOTO 2 X = X + 1 GO TO 1 WRITE (6, 10) X 10 FORMAT(1X, ‘Value of X is ’, F6.2) STOP END
ALGOL是在1960年代所發展出來的程式語言,主要的用途是描述演算法。 BASIC是將FORTRAN加以簡化所創立的程式語言,接近人類的自然語言及數學運算式,學習容易。 COBOL是美國國防部成立的一個協會於1959年所發展出來的程式語言,主要的用途是從事大量的檔案處理、資料輸入/輸出與商業計算。
Pascal是承襲ALGOL的理念所發展出來的程式語言,一開始應用於校園的教學。 procedure swap(var x : integer; var y : integer); var z : integer; begin z := x; x := y; y := z; end;
Ada具有高度的可攜性與可讀性,適合用來撰寫即時系統或同步運算程式。 C是AT&T貝爾實驗室的Dennis Ritchie於1972年所發展出來的程式語言,以C語言撰寫出來的程式不僅具有可攜性,而且執行速度快 。
14-2-2 函數式典範 函數式型態程式語言有LISP、ML、Miranda、Gofer、Scheme、CLOS等。
函數式型態的觀念是將整個程式視為數個基本函數組合而成,例如: (define (length x)) (cond ((null? X) 0) (else (+ 1 (length (cdr x)))))) (define (append x z) (cond ((null? x) z) (else (cons (car x) (append (cdr x) z))))) (define (square n) (* n n)) (map square ‘(1 2 3 4 5))
14-2-3 邏輯式典範 邏輯式型態 (logic paradigm) 程式語言的代表首推PROLOG,具有邏輯推理性,主要的用途是搜尋資料庫、定義演算法、撰寫編譯器、開發專家系統等。
14-2-4 物件導向式典範 物件導向式型態程式語言有Simula、SmallTalk、C++、Java、C#等。
物件導向程式設計 (OOP) 物件 (object) 是資料與程式碼的組合 欄位 (field) 或屬性 (property) 是用來描述物件的特質 方法 (method) 是用來執行物件的動作 事件 (event) 是在某些情況下發生特定訊號警告您 類別 (class) 是物件的分類
物件導向程式設計的特點: 封裝 (encapsulation) 繼承 (inheritance) 多型 (polymorphism) 覆載 (overloading)
C++為AT&T貝爾實驗室承襲C語言的理念所發展出來的物件導向程式語言。 Java為Sun公司承襲C++ 的理念所發展出來的物件導向程式語言,除了有類似C和C++ 的語法,還提供了自動儲存裝置管理 (垃圾收集法)、例外處理、支援多執行緒 (multi-threads)、跨平台 (cross-platform) 等功能 。 C# 是從C/C++ 發展出來的一種簡單、現代化且具物件導向、型別安全的程式語言,由於C# 的語法類似C/C++,故熟悉C/C++ 的人可以快速學會C#。
網頁設計相關的程式語言 HTML XML、XSL CSS VRML DHTML XHTML Java Applet ActiveX Control 瀏覽器端script 伺服器端script
14-3 程式語言的設計 資料型別 (data type) 決定了資料將佔用的記憶體空間、能夠表示的範圍及程式處理資料的方式。
常數 列舉 結構 final float PI = 3.14159; struct card{ int pips; char suit; enum weekdays {sun, mon, tue, wed, thu, fri, sat}; 結構 struct card{ int pips; char suit; };
陣列
流程控制 (flow control) 決定了程式的執行方向。 第一種判斷結構 if (expression) statementA
第二種判斷結構 if (expression) statementA else statementB
第三種判斷結構 switch (expression){ case value1: statement1 case value2: statement2 … default: statementN }
第一種迴圈結構 while(expression) statementA
第二種迴圈結構 do statementA while(expression);
第三種迴圈結構 for(expression1, expression2, expression3) statementA
程序可以將一段具有某種功能的敘述區塊寫成一個獨立的程式單元,然後給予特定名稱,其優點如下: 具有可重複使用性。 程式碼變得更精簡。 程式碼的可讀性提高。 程式碼的邏輯和正確性提高,比較容易偵錯、修改或維護。
遞迴函數 :可以呼叫自己本身的函數。 int factorial(int n){ if (n <= 1) return 1; else return(n * factorial(n - 1)); }
傳值呼叫 (call by value) #include <stdio.h> int main(void){ int x = 1, y = 100; swap(x, y); printf(“%d %d\n”, x, y); /*會印出1 100*/ return 0; } void swap(int i, int j){ int temp; temp = i; i = j; j = temp;
傳址呼叫 (call by reference) #include <stdio.h> int main(void){ int x = 1, y = 100; swap(&x, &y); printf(“%d %d\n”, x, y); /*會印出100 1*/ return 0; } void swap(int *i, int *j){ int temp; temp = *i; *i = *j; *j = temp;
14-4 程式設計的過程 定義與分析問題 設計演算法 撰寫程式 偵錯與測試 維護與更新