《C/C++程序設計》(第2版)針對初學者的特點,采取“提出問題—分析問題—解決問題—歸納提高”的教學模式,突出對學習者計算思維、編程實踐能力的培養與訓練。本書共12章,全面系統地介紹了C/C++語言的基本概念、語法及程序設計方法,詳細地講解了C/C++中的的數據類型、運算符與表達式、基本控制語句、數組、函數、指針、類和對象、繼承和派生、多態性、虛函數、輸入輸出流等內容。本書定位準確、結構合理、例題豐富,符合學習者的認知規律,適合作為高校C/C++程序設計基礎課的教材,也可作為工程技術人員、自學人員及參加全國計算機等級考試(二級C/C++語言程序設計)人員的參考書。
程序設計是高等學校計算機基礎教育的重要內容和入門課程,C/C++語言以功能豐富、表達能力強、應用面廣等特點,在整個計算機基礎教育課程設計中占有重要地位。2013年,根據教育部《關于進一步加強高等學校計算機基礎教學的意見》的要求,參考《高等學校計算機基礎教學發展戰略研究報告暨計算機基礎課程教學基本要求》,我們編寫了《C/C++程序設計》第1版。
本書第1版在使用過程中受到廣大讀者的廣泛好評,但在實際教學中我們發現內容編排上存在一定的問題,導致學生對一些知識的理解出現困難和偏差。針對上述問題,第2版進行了修訂,在內容與順序上進行了調整、改進和補充,并針對參加程序設計等級考試的讀者增加了重點章節的課后習題,具體調整如下。
1. 第1版的“第1章緒論”拆分成“C++概述”和“算法”兩章重要的知識點單獨成章,每章內容相對獨立,與其他知識點關聯少,條理清楚,易于初學者掌握。
2. 部分章節順序調整數組和指針的順序問題。一般教材都是先講數組,再講指針。帶來的問題就是無法對數組名進行解釋,于是產生了“數組名是一個地址”的錯誤說法,實際上數組名在多數情況下都是一個指針。在不介紹指針的情況下,很難把數組一章的內容講清、講透,不易于學生理解。
數組和函數的順序問題。一般教材都是把函數放在數組之后講解,原因是便于把數組名作為參數放在函數一章中。看起來似乎恰當,但是這樣一來就掩蓋了函數一章的重點。函數一章最應該教給學生的是如何把函數設計得當,以便于其他函數調用,只要突出這一重點就可以了。
綜上所述,最合適的順序安排應是指針、函數、數組、指針總結。
3.化繁為簡、化整為零對第1版的第10章和第11章的內容進行整合、優化,合成一章。
本書注重對學生編程實踐和問題求解能力的培養,以Visual C++為平臺,在學習C/C++語言基礎知識的同時,通過大量精選的例題和習題將程序設計的基本思想和方法介紹給學生。全書共分12章,涉及C/C++的基本數據類型、運算符和表達式、程序控制結構、數組和字符串處理、函數和模塊化程序設計、指針、結構體和共用體、面向對象程序設計基礎等。第1~10章以面向過程程序設計方法為出發點,介紹了C/C++語言和程序設計的基礎知識。第11、12章是面向對象程序設計方法基礎,介紹了C/C++語言中類和對象、繼承和派生以及C++流類庫等知識。全書在內容安排上實現了從結構化程序設計方法到面向對象程序設計方法的過渡,注重知識的系統性和連貫性。
本書由宋曉宇主編,趙艷平擔任副主編,其中楊艷春編寫了第1~3章,趙艷平編寫了第4、5、8章及附錄部分,宋曉宇編寫了第6、10、12章,李世偉編寫了第7、9章,張潔編寫了第11章。在本書的編寫過程中,蘭州交通大學電信學院軟件工程系的教師們給予了大力支持與幫助,在此表示衷心的感謝!
因編者水平有限,書中難免有錯誤和不妥之處,敬請專家和讀者提出寶貴意見。
編 者2017年6月
目 錄
前言
教學建議
第1章 C++概述1
1.1 程序設計語言概述1
1.1.1 機器語言1
1.1.2 匯編語言 1
1.1.3 高級語言2
1.2 程序設計方法3
1.2.1 結構化程序設計方法3
1.2.2 面向對象程序設計方法4
1.2.3 兩種程序設計方法的比較4
1.3 C++語言的發展及特點5
1.3.1 C++語言的發展5
1.3.2 C++語言的特點6
1.4 C++語言程序6
1.4.1 C++語言程序舉例6
1.4.2C++語言程序的構成9
1.5 C++語言集成開發環境10
1.5.1 C++語言程序的調試步驟10
1.5.2 在Visual C++ 6.0環境中開發C++語言程序10
1.5.3 Visual C++ 6.0程序調試常見錯誤15
習題16
第2章 算法20
2.1 什么是算法20
2.2 簡單的算法舉例21
2.3 算法的特點22
2.4 算法的表示方法22
2.4.1 自然語言表示法22
2.4.2 流程圖表示法22
2.4.3 N-S流程圖表示法25
2.4.4 用計算機語言實現算法26
習題27
第3章 C++語言基礎知識29
3.1 C++語言的字符集與詞匯29
3.1.1 C++語言的字符集29
3.1.2 C++語言的詞匯29
3.2 C++語言的數據類型30
3.3 變量與常量31
3.3.1 變量31
3.3.2 常量33
3.4 運算符與表達式37
3.4.1 算術運算符與算術表達式39
3.4.2 關系運算符與關系表達式41
3.4.3 邏輯運算符與邏輯表達式41
3.4.4 逗號運算符與逗號表達式43
3.4.5 條件運算符與條件表達式44
3.4.6 賦值運算符與賦值表達式45
3.4.7 其他運算符45
3.5 數據類型轉換46
3.5.1 隱式類型轉換47
3.5.2 顯式類型轉換47
3.5.3 賦值轉換48
習題48
第4章 順序結構程序設計55
4.1 C++語言的語句55
4.2 數據的輸入與輸出55
4.2.1 輸入輸出流的基本操作56
4.2.2 輸入輸出流的格式控制58
4.3 順序結構程序舉例61
習題64
第5章 選擇結構程序設計68
5.1 if語句68
5.1.1 if語句的省略格式68
5.1.2 if-else語句格式69
5.1.3 if-else if-else語句格式71
5.1.4 if語句的嵌套 75
5.1.5 if語句與條件表達式的關系78
5.1.6 if語句程序舉例79
5.2 switch語句 81
5.2.1 switch語句格式81
5.2.2 switch語句程序舉例 82
5.2.3 if語句與switch語句的比較86
習題86
第6章 循環結構程序設計95
6.1 while語句95
6.2 do-while語句100
6.3 for語句102
6.3.1 for語句的基本形式102
6.3.2 for循環程序舉例104
6.3.3 3種循環語句的比較108
6.3.4 3種循環語句的選擇109
6.4 break語句和continue語句109
6.4.1 break語句109
6.4.2 continue語句111
6.5 循環的嵌套112
習題117
第7章 指針129
7.1 指針和地址129
7.1.1 指針變量的定義130
7.1.2 指針變量的初始化130
7.1.3 指針變量的引用130
7.1.4 幾種特殊的指針133
7.2 指針的運算134
7.3 二級指針135
習題136
第8章 函數與編譯預處理138
8.1 函數138
8.1.1 函數的定義139
8.1.2 函數的調用 140
8.1.3 函數的參數141
8.1.4 函數的返回值 141
8.1.5 對被調函數的聲明142
8.2 參數傳遞方式142
8.2.1 值傳遞143
8.2.2 地址傳遞143
8.2.3 引用參數145
8.3 函數程序舉例145
8.4 函數的嵌套調用 146
8.5 函數的遞歸調用 147
*8.6 內聯函數150
*8.7 函數的重載150
*8.8 函數模板152
*8.9 帶默認參數的函數153
8.10 指針函數和函數指針154
8.10.1 指針函數154
8.10.2 函數指針155
8.11 變量的作用域和存儲類別 156
8.11.1局部變量 156
8.11.2 全局變量 158
8.11.3 變量的存儲類別 159
8.12 編譯預處理163
8.12.1 宏定義163
8.12.2 文件包含168
8.12.3 條件編譯 169
習題171
第9章 數組184
9.1 一維數組184
9.1.1 一維數組的定義184
9.1.2 一維數組元素的引用185
9.1.3 一維數組的初始化186
9.1.4 一維數組的存儲187
9.1.5 一維數組程序舉例187
9.2 二維數組192
9.2.1 二維數組的定義192
9.2.2 二維數組元素的引用192
9.2.3 二維數組的初始化193
9.2.4 二維數組程序舉例194
9.3 字符數組196
9.3.1 字符數組的定義196
9.3.2 字符數組的初始化196
9.3.3 字符數組元素的引用197
9.3.4 字符數組的輸入輸出197
9.3.5 字符串處理函數199
9.4 數組和指針202
9.4.1 數組和指針變量的運算202
9.4.2 通過指針變量訪問數組元素203
9.5 利用字符指針處理字符串207
9.6 指針數組208
9.7 數組和函數參數209
習題213
第10章 自定義數據類型224
10.1 結構體類型與結構體變量的定義224
10.1.1 結構體類型的聲明224
10.1.2 結構體變量的定義225
10.2 結構體變量的初始化與引用225
10.3 結構體數組226
10.4 指向結構體變量的指針227
10.5 鏈表228
10.5.1 new、delete運算符228
10.5.2 鏈表的概念229
10.5.3 創建鏈表229
10.5.4 插入鏈表節點230
10.5.5 刪除鏈表節點231
10.6 共用體和枚舉類型231
10.6.1 共用體類型231
10.6.2 枚舉類型232
10.7 類型定義符typedef 233
10.7.1 用typedef定義數據類型233
10.7.2 用typedef定義函數指針類型234
習題235
第11章 面向