You are on page 1of 47

CH 16 程式語言應用與介紹

1
學習目標
1.認識程式語言的特性、使用模式、與應用

2.瞭解計算機程式語言的功能與特色

3.瞭解程式語言的結構, 包含資料型態、指令及流程控
制等組成

4.認識程式語言與其外圍組成環境, 包含程式庫與資訊
系統平台的關係

5.認識多種代表性語言與範例說明, 如 Fortran、C、
Basic、Java、Javascript、Perl、Python
2
大綱

• 16.1 程式語言簡介
• 16.2 各類程式語言的功能與特色
• 16.3 程式語言結構與組成
• 16.4 語言、平台、程式庫
• 16.5 代表性語言與範例

3
CH 16 程式語言簡介
• 人和電子計算機溝通, 必須取得協調, 電子計算機才會
依令行事, 這種電子計算機能夠了解的語言, 稱為電腦
語言;這種語言是一種程式結構, 所以又稱為程式語言
(Programming Language)。
• 不管電腦如何變化, 它的工作原理仍是靠簡單的0與1。
要電腦幫我們工作, 就必須給予電腦指令 (Instruction),
這些指令的集合就是程式 (Program)。
• 我們使用電腦來工作時, 所有的命令都必須變成程式送
進電腦處理。程式語言是電腦使用者與電腦溝通之橋
樑。

4
16.1 程式語言簡介
• 我們需要使用較近於人類思維的語言 (高階語言,
high level language), 藉由編譯器 (compiler) 或直譯
器 (interpreter) 的轉換, 成為計算機了解的機器語
言 (machine language), 如圖16.1。

5
16.1 程式語言簡介(續)
• 在程式執行前進行翻譯, 將之全部轉換成機械語言
的服務程序稱做編譯程序, 而將經編譯而可執行的
語言稱為編譯語言。
• 編譯後的內容, 會與事先準備好的四則運算或函式
計算等元件融合, 稱作連結。經過這個作業後, 即
成為可執行的程式。

6
16.1 語言在不同面向下之特性比較
• 依階層與發展過程:
1. 機器語言
2. 組合語言
3. 高階語言
• 依使用模式:
1. 直譯式程式語言
2. 編譯式程式語言
• 依應用:
1. 一般用途
2. 特殊用途

7
16.1 不同階層語言之特性比較(1)
• 發展過程:先有機器語言, 再有組合語言, 進而發
展出適合人類閱讀、學習的高階語言。
• 執行速度:以機器語言最快, 組合語言次之, 高階
語言較慢。
• 機器相關性:機器語言和組合語言受機器限制, 高
階語言不受機器限制。
• 翻譯程式:組合語言和高階語言必須有翻譯程式,
而機器語言不用翻譯即可執行。

8
16.1 不同階層語言之特性比較(2)
• 學前背景之比較:學習高階語言不必先了解機器
的特性, 而學習機器語言和組合語言必須對機器電
腦的結構有所了解。
• 程式編寫難易度:以高階語言最容易, 組合語言次
之, 機器語言最差。
• 程式的可讀性:以高階語言的可讀性最好, 組合語
言次之, 機器語言最差。
• 程式維護:以高階語言維護最容易, 組合語言次之,
機器語言最差。

9
16.1 程式語言之模式劃分
1. 直譯式程式語言
• 也稱為腳本語言 (script language) ,此種語言程式系
統可以將原始程式的指令逐一的翻譯並執行, 不需
要經過編譯, 如BASIC、LOGO、HTML等。
• 它的特點是修改程式及除錯, 較為簡單容易。
2. 編譯式程式語言
• 撰寫的原始程式, 需要經過編譯器編譯之後, 輸出
為電腦中直接執行的目的程式, 如C、C++、
PASCAL...等。
• 它的特點是再次使用只要執行目的程式, 無須重新
在編譯其原始程式。

10
16.1 程式語言之應用劃分
1. 一般用途程式語言
• 指用於一般範圍的通用程式語言。
• 如BASIC、PASCAL、C, Java...等。
2. 特殊用途的程式語言
• 應用於特殊領域的程式語言。
• 例如應用於商業的COBOL, 工程的FORTRAN,
網路的HTML, Javascrript, 資料庫系統的SQL,
人工智慧領域的程式語言如LISP, 網頁伺服程
式端的PHP, 管理系統與處理文字的Perl, 整合
不同語言的 Python..等。

11
16.1 程式語言簡介(續)
• 在程式執行前進行翻譯, 將之全部轉換成機械語言
的服務程序稱做編譯程序, 而將經編譯而可執行的
語言稱為編譯語言。
• 編譯後的內容, 會與事先準備好的四則運算或函式
計算等元件融合, 稱作連結。經過這個作業後, 即
成為可執行的程式。

12
16.2 各類程式語言的功能與特色
• 計算機已被廣泛地應用在許多不同的領域, 而由於
各個領域的需求, 也就產生各式各樣的程式語言。
• 有那麼多種不同的程式語言存在的原因是編寫程
式的用途、緣由、應用場景各不相同。
• 不同語言的學習曲線不同,許多強大功能的程式
語言對新手來說太難學。
• 不同程式之間的執行成本 (runtime cost) 各不相同。

13
16.2 各類程式常見的應用範疇
• 科學計算:最主要的目的是協助科學家計算複雜的工程數學,
這方面的應用講求的是計算效率。
• 商業應用:在商業上, 報表的製作及程式語言的文件都是較為
講究的, COBOL提供了較佳的界面, 因此應運而生了。
• 人工智慧:講求的是符號及邏輯思維的處理, 它需要更有彈性
的程式設計方式, LISP與Prolog可說是這方面的代表語言。
• 系統程式語言:系統應用語言必須與作業系統有緊密的關係,
才使用到系統所提供的軟體。C語言與UNIX作業系統, 被視為
是這方面的代表語言。 一些物件導向 (object-oriented) 程式語
言, 如C++, 也是系統程式語言的代表。
• 超高階程式語言 :泛指描述法較簡潔有力的一些程式語言, 諸
如UNIX系統的shell語言, 或是處理字串的awk語言, 或是perl語
言, 或是人機界面語言Tk/Tcl等都是這方面的代表語言。

14
16.3 程式語言結構與組成
• 16.3.1資料型態 (data type)
• 計算機藉由處理資料來求得我們所要的結果,
程式語言的資料如何表示是一項很重要的主題。
• 16.3.2 指令及流程控制
• 一旦資料被確定, 機器必須被告知如何對這些
資料進行處理。
• 16.3.3 副程式與函式
• 副程式可重複使用, 以方便維謢,讓程式變得
精簡與減少程式錯誤。

15
16.3.1資料型態 (data type)
• 程式中專門處理資料的系統被稱為程式語言的型
態系統 (type system);對型態系統的研究和設計
被稱為型態理論 (type theory)。
• 計算機藉由處理資料來求得我們所要的結果, 程式
語言的資料如何表示是一項很重要的主題。
• 程式語言中常見的資料型態:整數 (integer)、浮
點數 (floating-point)、字元 (character)、陣列
(array)、記錄 (record) 及指標 (pointer) 型態。

16
16.3.1資料型態 (data type)
• 整數型態:
• C語言最基本的整數資料型態是 “int” , 一般系統以4個bytes來表示,
若要確定它的大小, 可用 “sizeof ( int ) ” 求得。
• 它的值域在 4個bytes的情況下則為從 –2,147,483,648 至
+2,147,483,647 之間。
• 浮點數資料型態:浮點數型態是用來代表實數的, 它是以科學記號的
表示法來表示, 可以分為三部分:
(1) 符號 (sign) 部份:佔用1個bit, 表示該浮點數的正負符號。
(2) 精確度 (fraction) 部份:佔用若干個bit, 表示科學記號的定點數部
份。
(3) 指數 (exponent) 部份:佔用若干個bit, 表示科學記號的次方部份。
• 字符型態:通常以1個byte表示。
• 其表示方法則是使用美國國家標準局所製定的ASCII碼 。
• 在C語言中, 字符宣告char亦可視為一種整數型態, 其範圍為從-128
至+127之間。

17
16.3.1資料型態 (data type):陣列型態
• 陣列為一群具有相同資料型態的變數所組成, 例如100個整數或50個浮點數等。
它可以有許多型式:一維陣列, 二維陣列等等。
• 例如:

即宣告了A是由100個整數所組成的陣列 (如圖16.2);而B是一個30×40的二
維陣列。

18
16.3.1記錄型態
• 記錄型態記錄型態有時又稱為結構 (structure) 型態,
• 它所存放的是異類型的資料型態, 是由一群欄位 (field) 所結合而
成的, 而每個欄位都可以是不同的資料型態。
• 記錄型態也可與陣列相結合, 以形成更複雜的資料結構。
• 圖16.3是一個C語言中陣列型態與記錄型態相結合的範例。

19
16.3.1指標型態
• 指標型態所存放的值是位址。
• 它在很多語言都扮演重要的角色, 不僅可達到動態的資料結構, 並
且可以使記憶體的管理達到更有效的利用。
• 藉由指標的特性, 加上動態的記憶體配置, 可以完成鏈結串列
(linked list)、樹狀結構 (tree)、堆疊 (stack)、佇列 (queue) 等資料
結構。
• 圖16.4是指標型態的一個範例。。

20
16.3.2 指令及流程控制
• 較簡單的指令可以使用關鍵字或定義好的語法結
構來完成。不同的語言利用序列系統來取得或組
合這些語句。
• 語言中的其他指令也可以用來控制處理的過程
(例如分支、迴圈等)。
• 流程控制 (flow control) 決定了程式的執行方向。

21
16.3.2流程控制:判斷結構(1)

22
16.3.2流程控制:判斷結構(2)

23
16.3.2流程控制:迴圈結構

24
16.3.3 副程式與函式
• 當一個程式執行到一半時,停下來呼叫另一個子程
式來執行, 執完時, 再返回主程式中斷的地方, 然後
繼續往下執行。
• 這個被呼叫的程式被使用到的次數比較頻繁時, 我
們可以將這個程式建立成一個副程式。
• 我們在主程式中利用call指令就可以呼叫它, 而不
用一再重複的重寫副程式的內容。

25
16.3.3 使用副程式的好處
1. 程序可重複使用, 以方便維謢與程式除錯。
2. 程序可以讓其他方案或專案使用。
3. 程序的邏輯簡單、明確, 可以讓程式變得精簡
且可讀性高。
4. 程序具有模組化的功能, 讓不同的程式設計師
分別撰寫獨立不同功能的程序, 並以團隊開發,
加快應用程式開發的時間。

26
16.3.3 副程式的引數傳遞方式
1. 呼叫程式後面所接的引數串列稱為實引數。
2. 被呼叫程式的程序所設定的引數串列稱為虛引數。
3. 呼叫與被呼叫之函式名稱必需相同, 但兩者的引
數名稱可以不相同。
4. 若程序的虛引數宣告為傳值呼叫, 則呼叫程式的
實引數與被呼叫程式的虛引數是佔用不同記憶體。
5. 呼叫程式的實引數與被呼叫程序的虛引數兩者佔
用同一位址的記憶體就是參考呼叫 ; 也就是說在
做參數傳遞時, 呼叫程式中的實引數是將自己本
身的記憶體位址傳給被呼叫程式的虛引數。
6. 程式敘述可以再呼叫自已本身的程序, 我們稱為
遞迴程序 (Recursive Procedure)。

27
16.4 語言、平台、程式庫
• 16.4.1 平台
• 軟體系統、作業系統、硬體架構。
• 16.4.2 語言
• 但不同編譯器對語言規範的在不同平台上解釋
有所差異。在針對不同系統進行構建之前, 程
式就得加以考慮。
• 16.4.3 跨平台的程式庫
• 為某個特定平台所開發的程式不一定能在別的
平台上重新編譯之後就能執行。為達到這個目
的, 我們需要一組跨系統平台的程式庫。

28
16.4 語言、平台、程式庫
• 16.4.1 平台
• 軟體系統、作業系統、硬體架構。
• 16.4.2 語言
• 但不同編譯器對語言規範的在不同平台上解釋
有所差異。在針對不同系統進行構建之前, 程
式就得加以考慮。
• 16.4.3 跨平台的程式庫
• 為某個特定平台所開發的程式不一定能在別的
平台上重新編譯之後就能執行。為達到這個目
的, 我們需要一組跨系統平台的程式庫。

29
16.4 語言、平台、程式庫
• 16.4.1 平台
• 軟體系統、作業系統、硬體架構。
• 16.4.2 語言
• 但不同編譯器對語言規範的在不同平台上解釋
有所差異。在針對不同系統進行構建之前, 程
式就得加以考慮。
• 16.4.3 跨平台的程式庫
• 為某個特定平台所開發的程式不一定能在別的
平台上重新編譯之後就能執行。為達到這個目
的, 我們需要一組跨系統平台的程式庫。

30
16.4.1 平台
• 計算機系統最普及常見的作業系統大致有 Windows、
Linux 與 Solari、FreeBSD、Mac OS、Android 等。
• 這些不同的作業系統大致皆可支援多種硬體架構 (CPU) 例
如 Sun Solaris 可支援 x86 (INTEL, AMD, NVIDIA, VIA)、
Sun Sparc…等等。
• 支援多種作業系統的軟體有很多, 像是資料庫管理系統
(DBM) 中的 MySQL 系統和 Oracle 系統;網站伺服器
(Web server) 系統、應用程式伺服器中的 Apache 與 Tomcat
網站伺服器, 這些系統大致都支援不同的多種作業系統; 也
支援不同的多種作業系統如:Linux、FreeBSD、Solaris、
AIX、Windows等。
• 這些跨軟體甚至是硬體架構平台之軟體系統之所以能夠在
不同平台通行無阻的主要原因是因為這些整個計算機系統
當初在設計發展時就運用了整組的跨平台架構的想法。

31
16.4.2 語言(跨平台)
• 程式語言理論上是跨平台的, 但不同編譯器對語言規
範的解釋常有所差異。在針對不同系統進行構建之前,
程式的撰寫就需加以考慮。
• 如Java這樣的語言, 從一開始就意識到要在各個平台
下運行, 所以跨平台在其平台的本地語言環境中已經
實現。
• Java 為了提供跨平台的用戶圖形介面 GUI, 就利用了
Swing程式庫在許多平台下的實現。各種跨平台問題,
都需要各自的本地庫來解決。
• 一些開放原始檔軟體允許用戶自己來編譯目的碼
(object code), 以達較佳的跨平台效果。

32
16.4.3 跨平台的程式庫
• 許多API (應用程式介面) 是與平台相關的。開發的程式不
一定能在別的平台上執行。
• 跨系統平台的程式庫:一個程式庫針對各個主要平台萃取
出一個共通的程式庫, 就可以解決這個問題。如OpenGL因
為不依賴於任何特定的作業系統、CPU構架圖形設備, 可
以看作是跨平台的。
• 特定平台的API可以在其他系統上作為兼容層而新建, 例如
WINE程式庫使得 Windows程式可以在UNIX系統上運行。
• 許多程式語言還有跨平台的擴展以及中介元件, 這樣的原
始碼, 只要進行一點小修改, 就可以在不同平台下編譯/運
行。
• 網頁如果可以由任何瀏覽器正常瀏覽, 就可以被認為是跨
平台的, 或者跨瀏覽器的。這需要一些專業知識, 幫忙克服
網路標準上的差異。

33
16.5 代表性語言與範例
• 16.5.1 FORTRAN語言
• 16.5.2 COBOL語言
• 16.5.3 BASIC語言
• 16.5.4 C語言
• 16.5.5 JavaScript和VBScript語言
• 16.5.6 Java語言
• 16.5.7 LISP語言
• 16.5.8 Perl語言
• 16.5.9 Python語言
34
16.5.1 FORTRAN語言
• FORTRANⅠ是在1955年時開始製作的, 直到
1957年時才正式推出, 目前已進展到
FORTRAN90了 (如圖16.6)。
• 早期FORTRAN語言有人把它直譯為福傳語言,
其實它當初的目的是用來作為數學式子轉換系
統 (Mathematical FORmula TRANslating
System), 圖16.7是一個FORTRAN語言所寫成的
程式, 。

35
16.5.2 COBOL語言
• COBOL語言 (Common Business Language) 是1960年時所推出
的, 它曾被廣泛地用來處理商業檔案, 它是由FLOW-MATIC語
言所改進而來的, 對稍後的PL/I語言的設計也有所影響。其特
色是輸出入的界面描述得很詳盡;而另一特色是極為冗長。

36
16.5.3 BASIC語言
• 主要是用來教授初學者練習程式語言, 稍後發展出的
Quick BASIC及Visual BASIC也很著重易學易懂的這項
特色 (如圖16.9)。圖16.10是QuickBASIC語言所寫成的
程式。

37
16.5.4 C語言
• C語言是Dennis Ritchie 在
1972年時所推出的程式語
言, 它講求程式的簡單性及
可攜性 (Portability) 。
• 在1989年時, 美國國家標準
局 製做了 ANSI C, 希望能
一統江山, 但它仍與一些C
語言, 如Turbo C等有些許
的差異。
• 圖16.11是C語言的沿革, 圖
16.12是C語言所寫成的程

38
16.5.4 C語言

39
16.5.5 JavaScript和VBScript語言
• 瀏覽器視窗特效多半是利用JavaScript程式做出來的。
• JavaScript是網景通訊和昇陽所共同制訂的一種腳本語言 。
• JavaScript的語法與C程式語言相類似, 不過與C程式語言不
同, JavaScript是一種以物件為基礎程式語言。

40
16.5.6 Java語言
• Java是昇陽公司所發展出來的一套物件導向程式語言。
• Java是一個與C++ 非常類似的物件導向高階程式語言, 由許多
的類別 (class) 組織而成的。一個類別可以繼承另外一個類別
的特性與行為。利用繼承機能, 透過這樣的程式碼重複使用
(code reuse) , 程式發展的效能因而大大地提高。
• Java程式在執行之前, 必須先編譯 (compile) 成位元指令碼
(byte code) , 是昇陽公司所制訂的一種具有嚴謹規範的Java虛
擬機器 (Java virtual machine) 指令碼。
• 大多瀏覽器都附有這個解譯器(interpreter)用來執行Java Applet,
這意味著Java程式所編譯成的位元指令碼可以在不同的電腦
上執行, 而不像其他的電腦程式需要經過重新編譯。
• Java技術非常適合用於設計網頁上的應用程式。

41
16.5.6 Java語言

42
16.5.7 LISP語言
• LISP (LIST Processing) 語言是 John
McCarthy 在1959年時所推出, 其後進而發展
為Scheme及COMMON LISP語言 (如圖16.17)。
• 它的特色是一切都以函數來描述, 而基本的
資料結構則為串列 (list)。圖16.18是LISP所
寫成的程式。

43
16.5.8 Perl語言
• Perl是一種腳本語言。 最初的設計者為 Larry Wall, 它於
1987年12月18日發表。Perl借取了C、sed、awk、shell
scripting 以及很多其他程式語言的特性。
• 最重要的特性是他內部集成了正規表示式的功能, 以及巨
大的第三方程式庫 CPAN 。

44
16.5.9 Python語言
• Python, 是一種物件導向、直譯式電腦程式語言, 也是一種功能
強大而完善的通用型語言。
• Python的創始人為Guido van Rossum, 作為ABC語言的一種繼承,
受到了Modula-3 的影響, 並且結合了Unix shell和C的習慣。
• 很多人使用 Python 將其他語言編寫的程式進行整合和封裝。
在 Google 內部的很多專案使用 C++ 編寫性能要求極高的部分,
然後用Python呼叫相應的模組。

45
課後練習
1. 請比較圖16.6 (FORTRAN程式範例) 與圖16.11 (C語言程式
範例)。
2. 請以C語言寫一程式, 它可輸入n個數, 然後輸出其中的最大
值及最小值。
3. 請比較陣列型態與記錄型態的差異。
4. 請解釋下列的C語言宣告:

5. 請以 Perl 語言寫一程式可將輸入的串列做倒轉 (reverse)。

46
課後練習
6. 請以Javascript製作一個簡單的計算器
(calculator)。
7. 何謂遞迴程序? 你能夠用C寫出一個使用遞迴
呼叫的副程式嗎?
8. 試說明語言、平台與程式庫之間的關係, 並說
明跨平台程式語言的特性。
9. 試說明直譯式程式語言 (腳本語言) 與編譯式
程式語言的區別, 並請說明二者適用的時機、
環境與他們所扮演的角色。
10. 試說明程式設計時利用語言所提供的副程式
(函式) 流程所能帶來的好處為何?

47

You might also like