本書是一本通過編程實踐引導學生掌握C++程序開發(fā)的教材。在編寫過程中,我們組織了多位長期從事程序設計、數(shù)據(jù)結(jié)構(gòu)、面向?qū)ο蟪绦蛟O計和計算機算法設計課程教學的老師,其中部分老師是本校的ACM程序設計集訓隊的教練和指導老師,他們都有著豐富的教學和編程經(jīng)驗。本書在編寫過程中力求將復雜的概念用簡潔、通俗的語言來描述,做到深入淺出、循序漸進,從而使學生能體會到學習編程的樂趣。
C++語言是目前最流行的面向?qū)ο蟪绦蛟O計語言之一。它既支持傳統(tǒng)的面向過程的程序設計方法,也支持的面向?qū)ο蟮某绦蛟O計方法。它是Linux和Unix下編程的最主要的語言之一,也是嵌入式開發(fā)最常用的編程語言。C++全面兼容C,對熟悉C的程序員僅需學習C++語言的面向?qū)ο筇卣,就可很快地用C++編寫程序。
本書是一本通過編程實踐引導學生掌握C++程序開發(fā)的教材。在編寫過程中,我們組織了多位長期從事程序設計、數(shù)據(jù)結(jié)構(gòu)、面向?qū)ο蟪绦蛟O計和計算機算法設計課程教學的老師,其中部分老師是本校的ACM程序設計集訓隊的教練和指導老師,他們都有著豐富的教學和編程經(jīng)驗。本書在編寫過程中力求將復雜的概念用簡潔、通俗的語言來描述,做到深入淺出、循序漸進,從而使學生能體會到學習編程的樂趣。
傳統(tǒng)的程序設計教材和采用的教學模式多以學習計算機語言為主,多重視理論教學,輕實踐教學環(huán)節(jié),編程能力低也導致了后續(xù)一些課程學習困難,不利于培養(yǎng)學生的算法思想、設計理論和創(chuàng)新意識,也就無法適應當今信息社會和知識經(jīng)濟對人才的要求。在這種情況下,我們改革程序設計類課程實踐教學,突出計算機的實踐教育,培養(yǎng)學生分析問題和解決問題的創(chuàng)新能力。
近年,以培養(yǎng)和提高計算機編程能力的不同層次比賽應運而生。如省級大學生計算機程序設計競賽、ACM國際大學生程序設計競賽等。因此,以程序設計競賽為依托,改革程序設計類課程教學體系和內(nèi)容,探討和創(chuàng)新程序設計類課程的實踐教學方法和手段,對加強程序設計類課程的教學和實踐環(huán)節(jié),提高學生們的編程能力,促進計算機類創(chuàng)新人才培訓和培養(yǎng)出符合社會需求的人才具有重要理論和實踐意義。
本書將ACM國際大學生程序設計競賽引進到課程學習之中,使學生從編程入門開始就養(yǎng)成良好的編程習慣和編程思維,強化學生對實際問題分析能力和解決問題能力的培養(yǎng),激發(fā)學生對編程的興趣,達到以教學促競賽,以競賽強化教學的目的。
ACM國際大學生程序設計競賽(簡稱ACM-ICPC)是由國際計算機界具有悠久歷史的權(quán)威性組織ACM學會(Association for Computing Machinery)主辦,是世界上公認的規(guī)模最大、水平最高、參與人數(shù)最多的大學生程序設計競賽,其宗旨是使大學生能通過計算機充分展示自己分析問題和解決問題的能力,F(xiàn)在各個高校都非常重視計算機程序設計競賽。
與本書配套的教材《C++程序設計教程習題答案和實驗指導》提供了本課程的實驗內(nèi)容、參考答案和模擬試卷。所有習題和程序均按照ACM國際大學生程序設計競賽要求進行設計,并進行了嚴格的測試,驗證了程序的正確性。
參與本書編寫的人員有:湖南師范大學的瞿紹軍、羅迅、劉宏、張麗霞、謝超和石堅老師,衡陽師范學院的李浪老師,吉首大學的王從銀和彭華老師,湖南文理學院的丁德紅老師,湖南農(nóng)業(yè)大學的張引瓊老師。
本書吸收了國內(nèi)外近幾年出版的同類教材的優(yōu)點,內(nèi)容豐富,特別適合用作計算機專業(yè)和相關(guān)專業(yè)的程序設計類課程的教材;作為ACM國際大學生程序設計競賽入門教材;也可作為各類考試培訓和C++程序設計自學教材。
本教材的出版得到了湖南師范大學教學改革研究項目“程序設計類課程實踐教學體系、內(nèi)容、方法和手段改革的研究與實踐”的資助。
為方便教師的教學。本書配有豐富的電子資源和課件,您在使用過程中有任何疑問可發(fā)郵件與我們聯(lián)系(Email:powerhope@163.com)。
編者
2015年12月于長沙岳麓山
目 錄
內(nèi)容簡介 2
前 言 3
第一章 C++語言概述 10
1.1 C++語言簡介 10
1.1.1 C++語言的發(fā)展 10
1.1.2 C++語言的特點 10
1.2 C++程序基本結(jié)構(gòu) 11
1.3 C++程序的開發(fā)環(huán)境 12
1.3.1 Visual C++ 12
1.3.2 Visual Studio 2010 17
1.3.3 Dev-C++ 22
1.3.4 CodeBlocks 25
1.4 ACM國際大學生程序設計競賽 31
1.4.1 ACM-ICPC簡介 31
1.4.2 競賽規(guī)則 32
1.4.3 自動評測系統(tǒng) 33
1.4.4 競賽學習資源—書籍推薦 34
習題一 38
第二章 C++語言編程基礎 39
2.1 C++語言詞法 39
2.1.1 注釋 39
2.1.2 標識符 39
2.1.3 關(guān)鍵字 40
2.1.4 運算符 41
2.1.5 標點符號 41
2.1.6 常量 41
2.2 基本數(shù)據(jù)類型 42
2.2.1 整型 42
2.2.2 浮點型 43
2.2.3 字符型 44
2.2.4 布爾型 45
2.2.5 寬字符類型 45
2.2.6 字符串常量 45
2.3 運算符與表達式 45
2.3.1 變量的定義 45
2.3.2 算術(shù)運算符 46
2.3.3 關(guān)系運算符 47
2.3.4 邏輯運算符 47
2.3.5 位運算符 48
2.3.6 移位運算符 48
2.3.7 賦值運算符 49
2.3.8 條件運算符 50
2.3.9 逗號運算符 50
2.3.10 類型轉(zhuǎn)換運算 50
2.3.11 自增運算符和自減運算符 50
2.3.12 表達式的估值 51
2.4語句 52
2.4.1語句及三種結(jié)構(gòu) 52
2.4.2 表達式語句 52
2.4.3 復合語句 53
2.4.4 C++標準輸入輸出流(包括常用格式控制) 53
2.4.5 選擇語句 58
2.4.6 循環(huán)語句 62
2.4.7 break語句和continue語句 65
2.4.8 goto語句 66
2.4.9 程序設計綜合舉例 66
2.5 ACM國際大學生程序設計競賽中的輸入輸出 69
習題二 71
第三章 數(shù)組與字符串 77
3.1 數(shù)組的概念 77
3.2 數(shù)組的定義 77
3.2.1 數(shù)組的定義 77
3.2.2 數(shù)組的初始化 79
3.2.3 二維數(shù)組 81
3.4 數(shù)組應用舉例 82
3.5 字符串 89
3.5.1 C++原生字符串 89
3.5.2 原生字符串函數(shù) 90
3.5.3 C++ STL string 93
習題三 95
第四章 函數(shù) 103
4.1 函數(shù)與程序結(jié)構(gòu)概述 103
4.2 函數(shù)的定義與聲明 104
4.2.1 函數(shù)的定義 104
4.2.2 函數(shù)聲明與函數(shù)原型 105
4.3 函數(shù)參數(shù)和函數(shù)返回值 106
4.3.1 函數(shù)形式參數(shù)和實際參數(shù) 106
4.3.2 函數(shù)的返回值 107
4.3.3 函數(shù)調(diào)用 108
4.4 函數(shù)的嵌套與遞歸調(diào)用 108
4.4.1 函數(shù)的嵌套調(diào)用 108
4.4.2 遞歸調(diào)用 109
4.5 變量作用域和存儲類型 110
4.5.1 局部與全局變量 110
4.5.2 動態(tài)存儲和靜態(tài)存儲 110
4.6 內(nèi)聯(lián)函數(shù) 112
4.7 重載函數(shù)與默認參數(shù)函數(shù) 113
4.7.1 重載函數(shù) 113
4.7.2 默認參數(shù)函數(shù) 114
4.8 編譯預處理 114
4.8.1 文件包含 114
4.8.2 宏定義 115
4.8.3 條件編譯 116
習題四 116
第五章 指針 121
5.1 指針的概念 121
5.2 指針變量 121
5.2.1指針定義 121
5.2.2指針運算符 122
5.2.3 引用變量 123
5.2.4 多級指針與指針數(shù)組 125
5.2.5指針與常量限定符 126
5.3 指針與數(shù)組 127
5.3.1指針與一維數(shù)組 127
5.3.2指針與二維數(shù)組 131
5.3.3指針與字符數(shù)組 133
5.3.4指針與函數(shù) 134
5.4 指針運算 138
5.5 動態(tài)存儲分配 140
5.5.1 new操作符 140
5.5.2 delete操作符 141
習題五 142
第六章 結(jié)構(gòu)體與共用體 147
6.1 結(jié)構(gòu)體 147
6.l.1 結(jié)構(gòu)體的聲明 147
6.1.2結(jié)構(gòu)體變量的引用及初始化賦值 149
6.2 嵌套結(jié)構(gòu)體 150
6.3 結(jié)構(gòu)體數(shù)組 151
6.3.1結(jié)構(gòu)體數(shù)組的定義和初始化 151
6.3.2結(jié)構(gòu)體數(shù)組成員的引用 152
6.4 結(jié)構(gòu)體指針 153
6.4.1指向結(jié)構(gòu)體變量的指針 153
6.4.2指向結(jié)構(gòu)體數(shù)組的指針 155
6.4.3用結(jié)構(gòu)體變量和指向結(jié)構(gòu)體變量的指針作為函數(shù)參數(shù) 156
6.4.4內(nèi)存動態(tài)管理函數(shù) 158
6.5共用體 159
6.5.1共用體的概念 159
6.5.2 共用型變量的定義 160
6.5.3共用型變量的引用 160
6.5.4共用體類型數(shù)據(jù)的特點 161
6.5.5共用體變量的應用 162
6.6枚舉類型 163
6.7用typedef定義 166
習題六 167
第七章 類與對象及封裝性 170
7.1 類的抽象 170
7.2 類的定義與對象的生成 170
7.3 構(gòu)造函數(shù)和析構(gòu)函數(shù) 175
7.4 構(gòu)造函數(shù)的重載 178
7.5 對象指針 180
習題七 181
第八章 類的深入 183
8.1 友元函數(shù) 183
8.2 對象傳入函數(shù)的討論 187
8.3 函數(shù)返回對象的討論 190
8.4 拷貝構(gòu)造函數(shù) 193
8.5 this關(guān)鍵字 196
習題八 197
第九章 運算符重載 201
9.1 使用成員函數(shù)的運算符重載 201
9.2 友元運算符函數(shù) 205
9.3 重載關(guān)系運算符 209
9.4 進一步考查賦值運算符 210
9.5 重載new和delete 213
9.6 重載[ ] 215
9.7 重載其他運算符 217
習題九 221
第十章 繼承性 223
10.1 繼承性的理解 223
10.2 類的繼承過程 224
10.3 基類訪問控制 225
10.4 簡單的多重繼承 230
10.5 構(gòu)造函數(shù)/析構(gòu)函數(shù)的調(diào)用順序 231
10.6 給基類構(gòu)造函數(shù)傳遞參數(shù) 232
10.7 訪問的許可 234
10.8 虛基類 235
習題十 238
第十一章 多態(tài)性 241
11.1基類的指針及引用 241
11.2 虛函數(shù) 242
11.3 繼承虛函數(shù) 243
11.4 多態(tài)性的優(yōu)點 244
11.5 純虛函數(shù)和抽象類 246
習題十一 248
第十二章 輸入輸出流 252
12.112.1 C++的輸入輸出 252
12.2 標準輸入輸出流 253
12.3文件流 254
12.4 字符串流 257
12.5 格式控制 259
12.5.1 流操縱符 259
12.5.2 流對象的成員函數(shù) 260
12.6 ACM中的文件輸入輸出 262
習題十二 265
第十三章 模板和標準庫 266
13.1函數(shù)模板 266
13.2 類模板 267
13.3 標準庫 268
13.3.1 順序容器 268
13.3.2 關(guān)聯(lián)容器 270
13.3.3 算法 272
13.3.4 迭代器 276
習題十三 277
附錄A:ASCII碼對照表 284
附錄B:C/C++與標準C++頭文件對照表 285
附錄C:Linux、Unix下編譯C++程序 286
附錄D:在Visual C++下調(diào)試程序 290
附錄E:Dev-C++調(diào)試 295
參考文獻 299