C/C++程式設計範例教本 P657 陳會安
第1章 程式語言與C語言的基礎 1-1 程式語言的基礎 1-2 程式設計技術的演進 1-3 程式是如何執行 1-4 C語言的基礎
1-1 程式語言的基礎 1-1-1 程式與軟體 1-1-2 程式語言的種類
1-1 程式語言的基礎 「程式語言」(Programming Languages)如同我們溝通的語言一般, 它是人類告訴電腦如何執行的一種語言, 也就是人類與電腦之間溝通的語言,以技 術角度來說,程式語言是一種將執行指令 傳達給電腦的標準通訊技術。
1-1-1 程式與軟體-程式 「程式」(Programs)是使用指定程式語 言所撰寫沒有混淆文字、數字和鍵盤符號 所組成的特殊符號,這些符號組合成指令 和敘述,再進一步編寫成程式碼,程式碼 可以告訴電腦解決指定問題的步驟。
1-1-1 程式與軟體-軟體 「軟體」(Softwares)是一種電腦執行的應用程式或作業系統,通常軟體是一個或多個程式的泛稱,或是一整套應用程式,「應用程式」(Applications)是一種處理指定工作的電腦程式,例如:數學計算分析、文書處理、試算表和程式語言開發工具等。
1-1-2 程式語言的種類-世代
1-1-2 程式語言的種類-低階語言 低階語言(Low Level Language):低階語言是一種偏向電腦容易了解的程式語言,因為屬於電腦看的懂的程式語言,所以執行效率高,例如: 機器語言(Machine Language):使用0和1二進位表示的程式碼,電腦可以直接執行程式,執行效率最高。 組合語言(Assembly Language):使用簡單的符號代表機器語言0和1表示的二進位程式碼,只需使用「組譯程式」(Assembler)將它轉換成機器語言在電腦上執行。
1-1-2 程式語言的種類-高階語言 高階語言(High Level Language):高階語言是一種接近人類語言的程式語言,可以說是一種半英文(Half-english)的程式語言,因為電腦不能馬上看的懂,需要進一步的翻譯,在轉換成機器語言後,因為轉換出來的程式碼通常比直接使用機器語言撰寫的冗長,所以效率較低,但是非常適合使用者學習。
1-1-2 程式語言的種類-高階語言 高階語言有Java、C/C++、BASIC和Borland Delphi等,高階語言需要進行翻譯,將程式碼轉譯成組合語言或機器語言的執行檔案後,才能在電腦上執行,翻譯的方式分為兩種,如下所示: 編譯程式(Compiler)。 檢查程式的錯誤。 將程式翻譯成機器語言的程式檔案。 直譯程式(Interpreter)。
1-2 程式設計技術的演進 1-2-1 非結構化程式設計 1-2-2 程序式與結構化程式設計 1-2-3 模組化程式設計 1-2-4 物件導向程式設計
1-2 程式設計技術的演進-說明 計算機科學的「軟體工程」(Software Engineering)是專注於研究如何建立正確、可執行和良好撰寫風格的程式碼,嘗試使用一些已經驗證過且可行的方法來解決程式的問題。 「程式設計」(Programming)是使用指定的程式語言,例如:C/C++語言,以指定的風格或技術來撰寫程式碼,在此所謂的風格或技術是電腦解決程式問題的程式設計方法。
1-2 程式設計技術的演進-種類 四種「程式設計技術」(Programming Techniques),或稱為「程式設計風格」(Programming Styles),如下所示: 非結構化程式設計(Unstructured Programming)。 程序式程式設計(Procedural Programming)與結構化程式設計(Structured Programming)。 模組化程式設計(Modular Programming)。 物件導向程式設計(Object-Oriented Programming)。
1-2-1 非結構化程式設計-說明 初學程式設計時,例如:早期的BASIC和組合語言都屬於非結構化程式設計。對於C語言來說,主要是指不論幾列的小程式或是數百列程式碼的大程式,程式都只擁有一個main()主程式,而且程式碼是以線性方式依序的執行,如下圖所示:
1-2-1 非結構化程式設計-問題 在開發大型程式時,非結構化程式設計就會產生嚴重的問題,如下所示: 程式碼以線性方式執行,如果需要重複操作,就需要在main()主程式重複相同的程式碼。 如果沒有複製多段程式碼,可以使用C語言的goto指令,可以跳到程式中的任何位置,但是亂跳的結果反而增加程式的複雜度,或產生一些無用的程式碼片斷,稱為「義大利麵程式碼」(Spaghetti Code),程式碼如同義大利麵一般的盤根錯節。 非結構化程式的所有程式碼處理的資料都屬於「全域」(Global)資料。
1-2-2 程序式與結構化程式設計-說明 程序式程式設計是將程式中重複的程式片斷抽出成為「程序」(Procedures,或稱為Subroutine、Routine)或「函數」(Functions),即一段執行特定功能的程式碼。 在主程式的程式碼只是依序呼叫各程序的「程序呼叫」(Procedure Call),即執行各程序。整個程式使用流程控制來連接各程序,即目前程式設計最常使用的結構化程式設計,屬於程序式程式設計的子集。
1-2-2 程序式與結構化程式設計-圖例
1-2-3 模組化程式設計-說明 為了能夠重複使用程序式程式設計所分割建立的程序,我們可以將相同功能的程序或函數結合在一起成為獨立的「模組」(Modules),模組是一個處理指定功能的子程式,如下圖所示:
1-2-3 模組化程式設計-函式庫 每一個模組包含處理的資料和程序函數, 在主程式呼叫模組的函數時,可以將它視 為呼叫「函式庫」(Libraries)中的函數, 在功能上如同一個工具箱(Toolbox),例 如:C語言本身很小,大部分C語言的功能 都是由函式庫提供。 模組可以將實際處理的程式碼和資料隱藏 起來,稱為「資訊隱藏」(Information Hiding)。
1-2-4 物件導向程式設計 物件導向程式設計是一種更符合人性化的程式設計方法,將原來專注於問題的分解,轉換成了解問題本質的資料,也就是「物件」(Object),如下圖所示:
1-3 程式是如何執行-說明
1-3 程式是如何執行-中央處理器(CPU) 電腦的CPU提供實際的運算功能,目前個 人電腦都使用單晶片的「IC」 (Integrated Circuit)。 CPU的主要功能是使用「ALU」 (Arithmetic and Logic Unit)的邏輯電 路進行運算,以便執行機器語言的指令。
1-3 程式是如何執行-記憶體(Memory) 電腦記憶體是「位元」(bits),每8個位元為一個「位元組」(Bytes)為單位所組成的龐大記憶空間,當我們執行程式,作業系統是將儲存在硬碟或軟碟的執行檔載入電腦的主記憶體(Main Memory),這就是CPU執行的機器語言指令,CPU從記憶體依序載入指令和執行。
1-3 程式是如何執行-輸入/輸出裝置(Input/Output Devices) 電腦的輸入/輸出裝置是程式的窗口,可以 讓使用者輸入資料和顯示程式的執行結果, 目前而言,電腦最普遍的輸入裝置是鍵盤 和滑鼠;輸出裝置是螢幕和列表機。
1-4 C語言的基礎-說明 C語言屬於「通用目的」(General- purposes)的程式語言,可以用來建立各 式各樣的應用程式。C語言是結構化程式語 言,其後繼者C++語言是一種物件導向程 式語言。
1-4 C語言的基礎-C語言的歷史 C語言是由Dennis Ritchie在1972年於貝爾實驗室設計的程式語言,它並不能算是一種很新的程式語言,之所以命名為C,這是因為很多C語言的特性是來自其前輩語言B(由Ken Thompson設計),B是一種源於Martin Richards設計的BCPL程式語言。 C語言的主要目的是為了設計UNIX作業系統,在1973年,所有UNIX作業系統的核心程式都已經改為使用C語言撰寫,這也是第一套使用高階語言所建立的作業系統。
1-4 C語言的基礎-C語言的特點 C程式語言的主要特點,如下所示: C語言建立的執行檔案很小,而且執行速度快,事實上,C本身只是一種很小的程式語言,相當多C語言的功能是由C標準函數庫提供。 C語言使用「前置處理器」(Preprocessor)處理相當多的工作。
1-4 C語言的基礎-C語言的版本 C語言最早的標準是K&R,1989年ANSI制定標 準C語言後,稱為ANSI-C,1999年參考C++語 言的語法而作了少許更新,稱為C99,如下所示: K&R C ANSI-C C99
1-5 C應用程式開發環境的建立 1-5-1 C語言的開發環境 1-5-2 下載與安裝Dev-C++整合開發環境
1-5-1 C語言的開發環境-說明 程式語言的「開發環境」(Development Environment)是一組工具程式用來建立、編譯和維護程式語言所建立的應用程式。目前高階程式語言大都擁有整合開發環境,稱為「IDE」(Integrated Development Environment),在同一個應用程式就可以編輯、編譯和執行特定語言的應用程式。
1-5-1 C語言的開發環境-C應用程式的開發步驟 編輯程式碼(Editing):程式碼檔案是一個標準的ASCII文字檔案,可以使用文字編輯工具輸入程式碼,稱為原始碼檔案(Source Files),C語言程式碼檔案的副檔名為.c,C++為.cpp。 編譯程式碼(Compiling):將原始程式碼檔案轉譯成指定CPU機器語言的目標檔(Object Files),其副檔名為.obj或.o。 連結函式庫(Linking):將函式庫和模組的目標檔連結到應用程式,以便建立可執行的執行檔,副檔名為.exe。 執行應用程式(Executing):在建立C應用程式的執行檔.exe後,就可以從作業系統載入C應用程式來執行。
1-5-1 C語言的開發環境-C語言的開發環境1 傳統MS-DOS或UNIX、Linux系統的使用者,或稱為「終端機」(Terminals),其程式執行環境輸入資料和輸出資料都是「命令列模式」(Command-line Interface),即文字模式的鍵盤輸入或單純文字內容的輸出,在此環境開發C語言應用程式需要使用多個工具程式來完成。 目前C語言應用程式開發提供整合開發環境,能夠在同一工具軟體編輯、編譯和除錯高階語言。
1-5-1 C語言的開發環境-C語言的開發環境2 常用的C語言整合開發環境,如下所示: Turbo C/C++、Borland C++:Borland公司在MS-DOS作業系統時代開發的C/C++語言整合開發環境。 Microsoft Visual C++:微軟公司的C++編譯程式,目前版本是Visual C++.NET。 Borland C++ Builder:Borland公司在Windows作業系統下的C++整合開發環境。 Dev-C++:Bloodshed Dev-C++是一套免費C/C++程式的整合開發環境。
1-5-2 下載與安裝Dev-C++整合開發環境-說明 Dev-C++是Bloodshed Software公司的產品,這是一套完整功能的C/C++語言整合開發環境,可以開發Windows和主控台應用程式(Console Applications),所謂主控台應用程式是在MS-DOS或命令提示字元執行的文字模式應用程式。 Dev-C++是使用Borland Delphi設計的應用程式整合開發環境,使用MinGW(Minimalist GNU for Windows,網址:http://www.mingw.org/)的C/C++編譯程式,這是UNIX系統GCC編譯程式的Windows版本。
1-5-2 下載與安裝Dev-C++整合開發環境-下載 Dev-C++是一套免費軟體,Bloodshed軟體公司提供完整的CD系統光碟,可以在該公司網站訂購,我們也可以在下載網頁免費下載Dev-C++,其網址如下所示: http://www.bloodshed.net/dev/devcpp.html
1-5-2 下載與安裝Dev-C++整合開發環境-安裝 Dev-C++整合開發環境可以安裝在Windows98/ME/2000/XP作業系統,其系統的最小需求,如下所示: Microsoft Windows 95/98/ME/NT/2000/XP作業系統。 8MB記憶體。 100 Mhz Intel相容的CPU。 30 MB硬碟空間。 Dev-C++整合開發環境建議的系統需求,如下: Microsoft Windows 2000/XP作業系統。 32MB記憶體。 400 Mhz Intel相容的CPU。 200 MB硬碟空間。