序及第0章
程式設計學習路徑
大綱 0.1本書起源與目的 0.2本書簡介 0.3本書範例 0.4 作業系統的選擇 0.5 編譯器及整合開發環境的選擇 0.6本書光碟使用說明 0.7本書範例注意事項 0.8出版後記
0.1本書起源與目的 C/C++的重要性歷經二十年未曾改變過,雖然後來流行了Visual Basic、Java、Object Pascal等等程式語言,但始終無法撼動C/C++的重要地位。這並不是沒有原因的, 第一個重要的原因,當然是大多數資深程式設計師幾乎都會C/C++; 第二個原因則是C的速度僅次於組合語言; 第三個原因則是C++的物件導向支援種類,僅次於Ada; 最後一個原因則是C/C++可以跨越Linux/Windows/MS-DOS/Mac等多種平台,雖然它不如Java使用Virtual Machine達到這項功能,但卻由於編譯器的普及,使得在眾多平台上開發C/C++完全不是問題。 除此之外,對於專攻較低階硬體程式(例如驅動程式、8051等等)的工程師而言,除了學會組合語言外,使用C來開發程式也能夠加快程式開發時程。
0.1本書起源與目的 對於許多初學習程式設計的人來說,從文字模式(Console Mode)的C/C++程式設計開始學習,雖稱不上是最適當的選擇,但卻可以打下非常深厚的程式設計基礎。對於未來提升至視窗程式設計時,也非常有幫助。 為了滿足初學程式設計讀者的需求,本書除了使用大量範例解說C/C++,並且將範例區分為【觀念範例】與【實用範例】,在觀念範例中,我們將以解說C/C++語法為主,而在實用範例中,則會加入許多常見好用的程式,並且循序漸進地組合成一個完整功能強大的程式,例如我們會先設計一個樂透開獎程式,並且逐步地改良該程式,使得該程式具有更大的彈性。 同時在不同的章節中,我們將可能採用不同的方法來完成、增強或改寫同一個範例。讀者同樣應該培養相同的『程式設計』觀念-『程式設計沒有標準答案,只要能夠完成需求的方法,都算是正確的答案』。但重點是,初學者應該實際『撰寫』程式,而非用『看』程式的方式來學習。
0.2本書簡介 本書共分為17章(包含第0章),在第0章中,我們首先介紹本書起源與本書目的,並且提供閱讀本書所需要的檔案安裝方法(隨書光碟)。 剩餘16章的章節安排則主要來自多位老師依照教學經驗所提供的意見加以編排,並大略可以分為兩個單元,分別是C程式設計單元與C++程式設計單元。 附錄分為兩大部分,分別是書籍附錄與電子書附錄。 書籍附錄主要是記載一些編譯器的使用說明,包含GCC(g++、gcc)、Dev-C++、Borland C++ Builder、Microsoft Visual C++。除此之外,也包含了最常使用的ASCII字元表及本書的C/C++函式庫速查表。 電子附錄是為了補充額外的相關資料,包含名稱空間(namespace)的進階程式設計、Linux除錯器GDB的使用與參數說明、Linux的整合開發環境(RHIDE、Xwpe、KDevelop)、Linux的系統呼叫(system call)使用說明、C語言的文法、C++語言的文法等等。
0.2本書簡介 習題是本書的一項貼心設計,讀者可以從各章最後所附的習題中複習該章所學習的各項技術,在程式設計方面,由於程式設計並沒有一定的標準答案,讀者只要想盡各種辦法完成習題的要求即可,但由於習題皆經過精心設計,因此,會加入許多限制條件(例如不得引入某些函式庫),這是為了讓讀者能夠複習該章所學習到的技術。
0.2本書簡介 以下是本書章節簡介 第0章:本書導讀與隨書光碟 第一單元 C程式設計篇 第1章:計算機概論與C/C++簡介 第3章:基本的資料處理(資料型態與運算式) 第4章:基本的輸出與輸入 第5章:流程控制 第6章:陣列與字串 第7章:函式與巨集 第8章:指標與動態記憶體 第9章:變數等級 第10章:C語言進階
0.2本書簡介 第二單元 C++程式設計篇 第11章:物件導向C++程式設計(類別與物件) 第12章:從C到C++(C++相對於C的變革) 第13章:類別繼承和虛擬函式 第14章:運算子覆載 第15章:樣板(Template) 第16章:例外處理
0.2本書簡介 附錄 附錄A Linux的C++編譯器-GCC 附錄B 整合開發環境Dev-C++ 附錄C 整合開發環境BCB(Borland C++ Builder) 附錄D 整合開發環境Visual C++ 附錄E ASCII字元對應表 附錄F 本書C函式/C++物件速查表 附錄G 本書電子附錄檔列表及說明 電子附錄(說明請見附錄G) 電子附錄A 名稱空間 電子附錄B Linux 的GDB除錯器 電子附錄C Linux的整合開發環境(IDE) 電子附錄D Linux提供的System Call C文法 C++文法
0.3本書範例 本書的某些章節範例有『範例』、『觀念範例』、『實用範例』之分,範例一般出現在本書前幾章中,通常是非常簡單的範例,而觀念範例則是用來解說C/C++語言的某些特性,例如指標、運算子覆載等等。實用範例則將日常生活中的許多需求,使用程式設計來完成,例如設計一個樂透程式。 【註】:本書範例中的行號是為了說明方便起見所設定的,所有的實際程式內容都不應該含有這些行號。
0.4 作業系統的選擇 0.5 編譯器及整合開發環境的選擇 本書範例可以適用於所有的Windows平台以及大多數的Unix-like平台(例如Linux)。 0.5 編譯器及整合開發環境的選擇 您可以使用GCC 2.95、Dev-C++ 4.0、Borland C++ Builder 6、Microsoft Visual C++ 6(或更新版本)等編譯器或整合開發環境來編譯本書範例。如果您執意使用歷史悠久的Turbo C++及Borland C++來編譯本書範例,通常也不會發生錯誤(但可能必須修正名稱空間及標頭檔引入格式)。
0.6本書光碟使用說明 隨書光碟的內容: (1)『C_CPP』目錄:內含本書所有的範例。(唯讀檔案) (2)『C_CPP\exercise』目錄:存放各章習題所需要檔案。(唯讀檔案) (3)『C_CPP\tools』目錄:內含Linux的整合開發環境RHIDE,Xwpe之安裝檔(唯讀檔案),使用方式請見電子附錄。 (4)『C_CPP\E_Appendix』目錄:內含電子附錄檔(唯讀檔案),檔案內容請見附錄G之說明。 (5)根目錄:內含『C_CPP.exe』自動解壓縮執行檔,您可以在Microsoft Windows系統中執行,執行後會將範例安裝到預設目錄「C:\C_CPP\」(可修改解壓縮路徑)(解壓縮後的檔案並非唯讀檔,可直接作為練習之用)。 (6)根目錄:內含『C_CPP.tar.gz』壓縮打包檔,如果您是Linux/Unix的管理者或者可以取得Unix/Linux主機控制權的話,您可以在Linux/Unix系統中將之解壓縮,就可以安裝範例了(解壓縮後的檔案並非唯讀檔)。解壓縮過程如下示範:
0.6本書光碟使用說明 [root@localhost root]# mount /dev/cdrom /mnt/cdrom Step1:將書附光碟放入Linux主機的光碟機中,接著開始mount光碟機。 Step2:複製C_CPP.tar.gz到家目錄。 Step3:解壓縮。 Step4:完成後,您可以在家目錄下看到C_CPP子目錄,裡面放的就是本書的所有範例。 [root@localhost root]# mount /dev/cdrom /mnt/cdrom [root@localhost root]# cp /mnt/cdrom/C_CPP.tar.gz. [root@localhost root]# ls C_CPP* C_CPP.tar.gz [root@localhost root]# tar zxvf C_CPP.tar.gz [root@localhost root]# ls C_CPP* C_CPP C_CPP.tar.gz
0.7本書範例注意事項 由於Microsoft Windows與Unix-like的部分檔案系統對於換行字元會採用不同的儲存策略,因此當您將範例檔案放到Unix/Linux等系統並使用gcc、g++來編譯本書範例檔案時,可能會出現下列警告訊息,您可以不加理會;或者將檔案使用Unix/Linux上的編輯器(例如Vi、Vim)開啟後,立刻重新存檔(例如Vi、Vim的存檔指令為『:wq』)即可。 另外,本書範例採用最新版C++的名稱空間撰寫方式(詳見第12章及電子附錄之名稱空間說明),但對於某些舊版的編譯器而言,可能必須取消namespace或將C++標準函式庫的『.h』副檔名補足。因此若您在編譯範例時,發生錯誤訊息,透過下列幾種方式嘗試看看是否能夠解決錯誤,如果仍不能解決您的問題,請更換編譯器為附錄記載的任一種編譯器即可。 ch4_02.cpp:15:1: warning: no newline at end of file
0.7本書範例注意事項 /********************** 原始檔(ch3_01.cpp)。 檔名:ch3_01.cpp 功能:求圓面積 **********************/ #include <iostream> #include <stdlib.h> using namespace std; int main(void) { int r=3; const float pi=3.1416; float area=pi*r*r; cout <<"半徑為"<< r << "的圓面積為" << area <<"\n"; system("pause"); return 0; } 原始檔(ch3_01.cpp)。
0.7本書範例注意事項 /********************** 檔名:ch3_01.cpp 功能:求圓面積 **********************/ #include <iostream> #include <stdlib.h> //using namespace std; int main(void) { int r=3; const float pi=3.1416; float area=pi*r*r; cout <<"半徑為"<< r << "的圓面積為" << area <<"\n"; system("pause"); return 0; } 修正方式一(ch3_01.cpp)。
0.7本書範例注意事項 /********************** 檔名:ch3_01.cpp 功能:求圓面積 **********************/ #include <iostream.h> #include <stdlib.h> //using namespace std; int main(void) { int r=3; const float pi=3.1416; float area=pi*r*r; cout <<"半徑為"<< r << "的圓面積為" << area <<"\n"; system("pause"); return 0; } 修正方式二(ch3_01.cpp)。
0.7本書範例注意事項 /********************** 檔名:ch3_01.cpp 功能:求圓面積 **********************/ #include <iostream.h> #include <stdlib.h> using namespace std; int main(void) { int r=3; const float pi=3.1416; float area=pi*r*r; cout <<"半徑為"<< r << "的圓面積為" << area <<"\n"; system("pause"); return 0; } 修正方式三(ch3_01.cpp)。
0.8出版後記 本書將盡力取得各項編譯器及整合開發環境之個人及教學授權,並放入最新印刷之書附光碟中。 礙於篇幅所限,我們將部分較不常用或較為深入的資料挪作電子附錄檔, 電子附錄檔中補充的資料超過100頁,讀者可視需求決定是否列印,檔案格式為PDF檔(請安裝Adobe Acrobat Reader軟體)及DOC檔(請安裝Microsoft Office或OpenOffice等Word相容軟體)。 本書出版後若有補充資料,亦將製作為電子檔案格式,放置於金禾資訊的全球資訊網站中,供讀者下載。