Download presentation
Presentation is loading. Please wait.
Published byりさこ かみいしづ Modified 6年之前
1
第1章 程式語言與C語言的基礎 1-1 程式語言的基礎 1-2 程式設計技術的演進 1-3 C語言的基礎 1-4 程式是如何執行
2
1-1 程式語言的基礎 1-1-1 程式與軟體 1-1-2 程式語言的種類 1-1-3 低階語言 1-1-4 高階語言
3
1-1 程式語言的基礎 「程式語言」(Programming Languages)如同人與人之間溝通的語言,它是人類告訴電腦如何工作的一種語言,即人類與電腦之間進行溝通的語言,以技術角度來說,程式語言是一種將執行指令傳達給電腦的標準通訊技術。
4
1-1-1 程式與軟體-程式 「程式」(Programs)是使用指定程式語言所撰寫沒有混淆文字、數字和鍵盤符號組成的特殊符號,這些符號組合成指令和敘述,再進一步編寫成程式碼,程式碼可以告訴電腦解決指定問題的步驟。
5
1-1-1 程式與軟體-軟體 「軟體」(Softwares)是一種電腦執行的應用程式或作業系統,通常軟體是一個或多個程式的泛稱,或是一整套應用程式,「應用程式」(Applications)是一種處理指定工作的電腦程式,例如:數學計算分析、文書處理、試算表和程式語言整合開發工具等。
6
1-1-2 程式語言的種類 目前的程式語言相當多,程式語言隨著電腦科技的進步,已經延伸出龐大的族群,在程式語言的分類上,以發展的世代來分,如下表所示:
7
1-1-3 低階語言 低階語言(Low Level Languages)是一種偏向電腦容易了解的程式語言,屬於電腦看的懂的程式語言,執行效率高,但是使用者不易學習。 機器語言(Machine Language):程式是使用0和1二進位表示的程式碼,電腦可以直接執行程式,執行效率最高。 組合語言(Assembly Language):使用簡單符號的指令集代表機器語言0和1表示的二進位程式碼,需使用「組譯程式」(Assemblers)將它轉換成機器語言,在電腦上執行。
8
1-1-4 高階語言-說明 高階語言(High Level Languages)是一種接近人類語言的程式語言,可以稱為半英文(Half-english)的程式語言,因為電腦不能馬上看的懂,所以需要進一步翻譯,在轉換成機器語言後,其轉換出的程式碼通常比直接使用機器語言撰寫的冗長,所以效率較低,但是非常適合使用者學習。 目前常見的高階語言有C/C++、C#、Java、FORTRAN、COBOL、Pascal、BASIC和Borland Delphi等。
9
1-1-4 高階語言-編譯程式 編譯程式(Compilers)
C/C++和Java等程式語言屬於編譯語言,編譯程式需要檢查完整個程式檔案的程式碼,在完全沒有錯誤的情況下,才會翻譯成機器語言的程式檔案,其主要的功能有兩項,如下所示: 檢查程式錯誤。 將程式翻譯成機器語言的程式檔案。
10
1-1-4 高階語言-直譯程式 直譯程式(Interpreters)
早期的BASIC語言(例如:BASICA、QuickBasic等)和目前網頁技術的「腳本」(Scripts)語言,直譯程式並不會輸出檔案,而是直接一個指令一個動作,一列一列的執行程式碼,相對的其執行效率低,但是非常適合在系統開發階段的程式除錯。 例如:VBScript和JavaScript都屬於直譯語言。
11
1-2 程式設計技術的演進 1-2-1 非結構化程式設計 1-2-2 程序式與結構化程式設計 1-2-3 模組化程式設計
1-2-4 物件導向程式設計
12
1-2 程式設計技術的演進-說明 計算機科學的「軟體工程」(Software Engineering)是專注於研究如何建立正確、可執行和良好撰寫風格的程式碼,嘗試使用一些已經驗證過且可行的方法來解決程式設計的問題。 「程式設計」(Programming)是使用指定的程式語言,例如:C/C++語言,以指定的風格或技術來撰寫程式碼,在此所謂的風格或技術是電腦解決程式問題的程式設計方法。
13
1-2 程式設計技術的演進-程式設計風格 程式設計技術(Programming Techniques)是學習程式設計需要經歷數個學習過程,或稱為程式設計風格(Programming Styles),如下所示: 非結構化程式設計(Unstructured Programming)。 程序式程式設計(Procedural Programming)與結構化程式設計(Structured Programming)。 模組化程式設計(Modular Programming)。 物件導向程式設計(Object-Oriented Programming)。
14
1-2-1 非結構化程式設計 通常在初學程式設計時,都是使用非結構化程式設計。對於C語言來說,主要是指不論幾列的小程式或是數百列程式碼的大程式,都是置於一個main()主程式,程式碼是以線性方式的依序執行,如下圖所示:
15
1-2-2 程序式與結構化程式設計-說明 程序式程式設計是將程式中重複的程式片斷抽出成為「程序」(Procedures,或稱為Subroutine、Routine)或「函數」(Functions),即一段執行特定功能的程式碼。 程序式與結構化程式設計建立的程式,在主程式的程式碼只是依序呼叫不同程序的「程序呼叫」(Procedure Call),即依序執行各程序。程式是使用流程控制來連接程序,即目前程式設計最常使用的結構化程式設計,屬於程序式程式設計的子集。
16
1-2-2 程序式與結構化程式設計-圖例 程式分割成數個小程序,可以使用結構化程式設計的由上而下分析法來進行程式分割,使用循序、重複和條件結構連接各程序或程式區塊,如下圖所示:
17
1-2-3 模組化程式設計-說明 為了能夠重複使用程序式程式設計分割建立的程序,我們可以將相同功能的程序或函數結合在一起成為獨立的「模組」(Modules),模組是一個處理指定功能的子程式。 每一個模組包含處理的資料和程序函數,在主程式呼叫模組的函數時,可以將它視為呼叫「函式庫」(Libraries)中的函數,在功能上如同一個工具箱(Toolbox)。
18
1-2-3 模組化程式設計-圖例 C語言本身很小,大部分C語言的功能都是由函式庫提供,模組可以將實際處理的程式碼和資料隱藏起來,稱為「資訊隱藏」(Information Hiding)。
19
1-2-4 物件導向程式設計-說明 模組化程式設計是物件導向程式設計的前身,只是沒有提供繼承和多形等物件導向觀念。
物件導向程式設計是一種更符合人性化的程式設計方法,將原來專注於問題的分解,轉換成了解問題本質的資料,也就是「物件」(Object)。 程式是由物件組成,物件內含處理的資料和相關程序,物件是使用訊息來溝通,不同於模組化程式設計的模組,物件很容易擴充功能和重複使用,只需建立好物件後,由下而上就可以逐步擴充成為一個完善的物件集合來解決整個程式問題。
20
1-2-4 物件導向程式設計-圖例 C語言並不是物件導向程式語言,C++語言才是一種物件導向程式語言,它可以說是程序式語言C的擴充。
21
1-3 C語言的基礎 1-3-1 C語言的歷史 1-3-2 C語言的特點 1-3-3 C語言的版本
22
1-3-1 C語言的歷史 C語言是由Dennis Ritchie在1972年於貝爾實驗室設計的程式語言,之所以命名為C,因為很多C語言的特性是來自其前輩語言B(由Ken Thompson設計),B是一種源於Martin Richards設計的BCPL程式語言。 1980年代C語言成為一種非常普遍和重要的程式語言,用來設計作業系統和各種應用程式,更成為學習程式設計最常使用的程式語言之一。 在1980年代晚期,Bjarne Stroustrup和其它實驗室的同仁替C語言新增物件導向的功能,稱為C++,C++已經成為目前Windows作業系統各種應用程式主要的開發語言。
23
1-3-2 C語言的特點 C是一種結構化程式語言,擁有高階程式語言的撰寫風格,但也擁有低階程式語言。
C是一種非常普遍的程式語言,目前大多數的作業系統都提供C語言的編譯程式和標準函式庫,使用C語言開發的應用程式可以很容易移植到其它作業系統。 C語言建立的執行檔案很小,而且執行速度快,事實上,C本身就是很小的程式語言,C語言的功能是由C語言標準函式庫來提供。 C語言使用「前置處理器」(Preprocessor)處理相當多的工作。
24
1-3-3 C語言的版本-K&R C K&R C 1978年Ritchie和Brian Kernighan出版「The C Programming Language」(簡稱K&R)一書,此書描述的C語言版本通稱為K&R C版本,在此版本C語言新增的C語言特點,如下所示: struct自訂資料型態。 long int和unsigned int資料型態。 運算子=+改為+=。
25
1-3-3 C語言的版本-ANSI-C ANSI-C
在1983年「美國國家標準局」(American National Standards Institute,簡稱ANSI)設立X3J11委員會進行C語言的標準化,1989年第一個官方版本的C語言規格書ANSI X ”Programming Language C”制定完成,此版本即我們通稱的ANSI-C版本。 ANSI-C引用C++(C++是1980年代中期由Bjarne Stroustrup設計)的函數原型宣告,支援多國語言字碼集且定義C語言的標準函式庫。
26
1-3-3 C語言的版本-C99 C99 隨著C++語言的持續發展,ISO在1990年出版C語言更新標準ISO 9899:1999,此版本的C語言稱為C99,ANSI在2000年也採用此標準,C99新增的特點,如下所示: 支援C++的註解//。 新增long long int、boolean等資料型態。 採用C++可以在程式任意位置宣告變數。 可變長度陣列。
27
1-4 程式是如何執行-說明 不論高階或低階程式語言建立的程式最後都會編譯成電腦看的懂的機器語言,這些指令是CPU支援的指令集(Instruction Set),不同CPU支援不同的指令集,也就是其能執行的機器語言。 CPU執行程式的方式為: 電腦的主記憶體儲存機器語言的程式碼和資料。 CPU從記憶體依序取出一個個機器語言指令,然後執行它,CPU並非真正了解機器語言在作什麼?這只是CPU的例行工作,依序執行機器語言指令。
28
1-4 程式是如何執行-圖例
29
1-4 程式是如何執行-中央處理器(說明) 電腦CPU提供實際運算功能,目前個人電腦都使用單晶片的「IC」(Integrated Circuit),其主要的功能是使用「ALU」(Arithmetic and Logic Unit)的邏輯電路進行運算,以便執行機器語言的指令。 在CPU擁有很多組「暫存器」(Registers),暫存器是位在CPU中的記憶體,可以暫時儲存資料或機器語言指令,例如:執行加法指令需要2個運算元,這兩個運算元資料就是儲存在暫存器。
30
1-4 程式是如何執行-中央處理器(暫存器) CPU還擁有一些控制「取出和執行」(Fetch-and-execute)用途的暫存器,如下所示: 指令暫存器(Instruction Register,IR):儲存目前執行的機器語言指令。 指令計數暫存器(Instruction Counter,IC):儲存下一個執行指令的記憶體位址。 記憶體位置暫存器(Memory Address Register,MAR):儲存從記憶體取得資料的記憶體位址。 記憶體資料暫存器(Memory Data Register,MDR):儲存目前從記憶體取得的資料。
31
1-4 程式是如何執行-記憶體(說明) 當我們執行程式時,作業系統將儲存在硬碟或軟碟的執行檔案載入電腦主記憶體(Main Memory),這就是CPU執行的機器語言指令,CPU從記憶體依序載入指令和執行。 事實上,程式碼本身和使用的資料都是儲存在RAM(Random Access Memory),每一個儲存單位有數字編號稱為「位址」(Address)。如同大樓信箱,門牌號碼是位址,信箱內容是程式碼或資料,儲存資料佔用的記憶體空間大小,需視使用的資料型態而定。
32
1-4 程式是如何執行-記憶體(步驟) 當電腦的CPU中央處理器存取記憶體資料的主要步驟,如下所示:
Step 1:送出讀寫的記憶體位址:當CPU讀取程式碼或資料時,需要送出欲取得的記憶體位址,例如:記憶體位址4。 Step 2:讀寫記憶體儲存的資料:CPU可以從指定位址讀取記憶體內容,例如,位址4的內容是 ,換句話說,取得資料是 的二進位值,每一個0或1是一個「位元」(Bit),8個位元稱為「位元組」(Byte),這是電腦記憶體的最小儲存單位。
33
1-4 程式是如何執行-輸入/輸出裝置 電腦的輸入/輸出裝置是程式的窗口,可以讓使用者輸入資料和顯示程式的執行結果,目前而言,電腦最常用的輸入裝置是鍵盤和滑鼠;輸出裝置是螢幕和列表機。 在【記事本】使用鍵盤輸入英文字母和數字時,螢幕馬上顯示對應的英文或中文字。對於電腦來說,當在鍵盤按下大寫A字母時,傳給電腦的是「ASCII」(American Standard Code for Information Interchange)碼。 例如:大寫A是65,換句話說,電腦實際顯示和儲存的資料是數值65。
Similar presentations