C/C++程式設計範例教本

P657
C/C++程式設計範例教本
陳會安
第1章 程式語言與C語言的基礎





1-1
1-2
1-3
1-4
1-5
程式語言的基礎
程式設計技術的演進
程式是如何執行
C語言的基礎
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 程式語言的種類-世代
世代
程式語言
第一世代
機器語言(Machine Languages)
第二世代
組合語言(Assembly Languages)
第三世代
高階語言(High Level Languages)
第四世代
應用程式產生的語言(Application-Generation Languages)或
查詢語言(Query Languages)
第五世代
邏輯導向語言(Logic-Oriented Languages)
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 語 言 屬 於 「 通 用 目 的 」 ( Generalpurposes)的程式語言,可以用來建立各
式各樣的應用程式。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語言建立的執行檔案很小,而且執行速度快,事實上,
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),所謂主控台應用程式是在MSDOS或命令提示字元執行的文字模式應用程式。
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硬碟空間。