本書是一本通過編程實踐引導(dǎo)學(xué)生掌握C++程序開發(fā)的教材。在編寫過程中,我們組織了多位長期從事程序設(shè)計、數(shù)據(jù)結(jié)構(gòu)、面向?qū)ο蟪绦蛟O(shè)計和計算機算法設(shè)計課程教學(xué)的老師,其中部分老師是本校的ACM程序設(shè)計集訓(xùn)隊的教練和指導(dǎo)老師,他們都有著豐富的教學(xué)和編程經(jīng)驗。本書在編寫過程中力求將復(fù)雜的概念用簡潔、通俗的語言來描述,做到深入淺出、循序漸進(jìn),從而使學(xué)生能體會到學(xué)習(xí)編程的樂趣。
C++語言是目前最流行的面向?qū)ο蟪绦蛟O(shè)計語言之一。它既支持傳統(tǒng)的面向過程的程序設(shè)計方法,也支持的面向?qū)ο蟮某绦蛟O(shè)計方法。它是Linux和Unix下編程的最主要的語言之一,也是嵌入式開發(fā)最常用的編程語言。C++全面兼容C,對熟悉C的程序員僅需學(xué)習(xí)C++語言的面向?qū)ο筇卣,就可很快地用C++編寫程序。
本書是一本通過編程實踐引導(dǎo)學(xué)生掌握C++程序開發(fā)的教材。在編寫過程中,我們組織了多位長期從事程序設(shè)計、數(shù)據(jù)結(jié)構(gòu)、面向?qū)ο蟪绦蛟O(shè)計和計算機算法設(shè)計課程教學(xué)的老師,其中部分老師是本校的ACM程序設(shè)計集訓(xùn)隊的教練和指導(dǎo)老師,他們都有著豐富的教學(xué)和編程經(jīng)驗。本書在編寫過程中力求將復(fù)雜的概念用簡潔、通俗的語言來描述,做到深入淺出、循序漸進(jìn),從而使學(xué)生能體會到學(xué)習(xí)編程的樂趣。
傳統(tǒng)的程序設(shè)計教材和采用的教學(xué)模式多以學(xué)習(xí)計算機語言為主,多重視理論教學(xué),輕實踐教學(xué)環(huán)節(jié),編程能力低也導(dǎo)致了后續(xù)一些課程學(xué)習(xí)困難,不利于培養(yǎng)學(xué)生的算法思想、設(shè)計理論和創(chuàng)新意識,也就無法適應(yīng)當(dāng)今信息社會和知識經(jīng)濟對人才的要求。在這種情況下,我們改革程序設(shè)計類課程實踐教學(xué),突出計算機的實踐教育,培養(yǎng)學(xué)生分析問題和解決問題的創(chuàng)新能力。
近年,以培養(yǎng)和提高計算機編程能力的不同層次比賽應(yīng)運而生。如省級大學(xué)生計算機程序設(shè)計競賽、ACM國際大學(xué)生程序設(shè)計競賽等。因此,以程序設(shè)計競賽為依托,改革程序設(shè)計類課程教學(xué)體系和內(nèi)容,探討和創(chuàng)新程序設(shè)計類課程的實踐教學(xué)方法和手段,對加強程序設(shè)計類課程的教學(xué)和實踐環(huán)節(jié),提高學(xué)生們的編程能力,促進(jìn)計算機類創(chuàng)新人才培訓(xùn)和培養(yǎng)出符合社會需求的人才具有重要理論和實踐意義。
本書將ACM國際大學(xué)生程序設(shè)計競賽引進(jìn)到課程學(xué)習(xí)之中,使學(xué)生從編程入門開始就養(yǎng)成良好的編程習(xí)慣和編程思維,強化學(xué)生對實際問題分析能力和解決問題能力的培養(yǎng),激發(fā)學(xué)生對編程的興趣,達(dá)到以教學(xué)促競賽,以競賽強化教學(xué)的目的。
ACM國際大學(xué)生程序設(shè)計競賽(簡稱ACM-ICPC)是由國際計算機界具有悠久歷史的權(quán)威性組織ACM學(xué)會(Association for Computing Machinery)主辦,是世界上公認(rèn)的規(guī)模最大、水平最高、參與人數(shù)最多的大學(xué)生程序設(shè)計競賽,其宗旨是使大學(xué)生能通過計算機充分展示自己分析問題和解決問題的能力。現(xiàn)在各個高校都非常重視計算機程序設(shè)計競賽。
與本書配套的教材《C++程序設(shè)計教程習(xí)題答案和實驗指導(dǎo)》提供了本課程的實驗內(nèi)容、參考答案和模擬試卷。所有習(xí)題和程序均按照ACM國際大學(xué)生程序設(shè)計競賽要求進(jìn)行設(shè)計,并進(jìn)行了嚴(yán)格的測試,驗證了程序的正確性。
參與本書編寫的人員有:湖南師范大學(xué)的瞿紹軍、羅迅、劉宏、張麗霞、謝超和石堅老師,衡陽師范學(xué)院的李浪老師,吉首大學(xué)的王從銀和彭華老師,湖南文理學(xué)院的丁德紅老師,湖南農(nóng)業(yè)大學(xué)的張引瓊老師。
本書吸收了國內(nèi)外近幾年出版的同類教材的優(yōu)點,內(nèi)容豐富,特別適合用作計算機專業(yè)和相關(guān)專業(yè)的程序設(shè)計類課程的教材;作為ACM國際大學(xué)生程序設(shè)計競賽入門教材;也可作為各類考試培訓(xùn)和C++程序設(shè)計自學(xué)教材。
本教材的出版得到了湖南師范大學(xué)教學(xué)改革研究項目“程序設(shè)計類課程實踐教學(xué)體系、內(nèi)容、方法和手段改革的研究與實踐”的資助。
為方便教師的教學(xué)。本書配有豐富的電子資源和課件,您在使用過程中有任何疑問可發(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國際大學(xué)生程序設(shè)計競賽 31
1.4.1 ACM-ICPC簡介 31
1.4.2 競賽規(guī)則 32
1.4.3 自動評測系統(tǒng) 33
1.4.4 競賽學(xué)習(xí)資源—書籍推薦 34
習(xí)題一 38
第二章 C++語言編程基礎(chǔ) 39
2.1 C++語言詞法 39
2.1.1 注釋 39
2.1.2 標(biāo)識符 39
2.1.3 關(guān)鍵字 40
2.1.4 運算符 41
2.1.5 標(biāo)點符號 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 運算符與表達(dá)式 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 表達(dá)式的估值 51
2.4語句 52
2.4.1語句及三種結(jié)構(gòu) 52
2.4.2 表達(dá)式語句 52
2.4.3 復(fù)合語句 53
2.4.4 C++標(biāo)準(zhǔn)輸入輸出流(包括常用格式控制) 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 程序設(shè)計綜合舉例 66
2.5 ACM國際大學(xué)生程序設(shè)計競賽中的輸入輸出 69
習(xí)題二 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ù)組應(yīng)用舉例 82
3.5 字符串 89
3.5.1 C++原生字符串 89
3.5.2 原生字符串函數(shù) 90
3.5.3 C++ STL string 93
習(xí)題三 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ù)與默認(rèn)參數(shù)函數(shù) 113
4.7.1 重載函數(shù) 113
4.7.2 默認(rèn)參數(shù)函數(shù) 114
4.8 編譯預(yù)處理 114
4.8.1 文件包含 114
4.8.2 宏定義 115
4.8.3 條件編譯 116
習(xí)題四 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
習(xí)題五 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共用體變量的應(yīng)用 162
6.6枚舉類型 163
6.7用typedef定義 166
習(xí)題六 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
習(xí)題七 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
習(xí)題八 197
第九章 運算符重載 201
9.1 使用成員函數(shù)的運算符重載 201
9.2 友元運算符函數(shù) 205
9.3 重載關(guān)系運算符 209
9.4 進(jìn)一步考查賦值運算符 210
9.5 重載new和delete 213
9.6 重載[ ] 215
9.7 重載其他運算符 217
習(xí)題九 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
習(xí)題十 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
習(xí)題十一 248
第十二章 輸入輸出流 252
12.112.1 C++的輸入輸出 252
12.2 標(biāo)準(zhǔn)輸入輸出流 253
12.3文件流 254
12.4 字符串流 257
12.5 格式控制 259
12.5.1 流操縱符 259
12.5.2 流對象的成員函數(shù) 260
12.6 ACM中的文件輸入輸出 262
習(xí)題十二 265
第十三章 模板和標(biāo)準(zhǔn)庫 266
13.1函數(shù)模板 266
13.2 類模板 267
13.3 標(biāo)準(zhǔn)庫 268
13.3.1 順序容器 268
13.3.2 關(guān)聯(lián)容器 270
13.3.3 算法 272
13.3.4 迭代器 276
習(xí)題十三 277
附錄A:ASCII碼對照表 284
附錄B:C/C++與標(biāo)準(zhǔn)C++頭文件對照表 285
附錄C:Linux、Unix下編譯C++程序 286
附錄D:在Visual C++下調(diào)試程序 290
附錄E:Dev-C++調(diào)試 295
參考文獻(xiàn) 299