本書(shū)是一本通過(guò)編程實(shí)踐引導(dǎo)學(xué)生掌握C++程序開(kāi)發(fā)的教材。在編寫(xiě)過(guò)程中,我們組織了多位長(zhǎng)期從事程序設(shè)計(jì)、數(shù)據(jù)結(jié)構(gòu)、面向?qū)ο蟪绦蛟O(shè)計(jì)和計(jì)算機(jī)算法設(shè)計(jì)課程教學(xué)的老師,其中部分老師是本校的ACM程序設(shè)計(jì)集訓(xùn)隊(duì)的教練和指導(dǎo)老師,他們都有著豐富的教學(xué)和編程經(jīng)驗(yàn)。本書(shū)在編寫(xiě)過(guò)程中力求將復(fù)雜的概念用簡(jiǎn)潔、通俗的語(yǔ)言來(lái)描述,做到深入淺出、循序漸進(jìn),從而使學(xué)生能體會(huì)到學(xué)習(xí)編程的樂(lè)趣。
C++語(yǔ)言是目前最流行的面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言之一。它既支持傳統(tǒng)的面向過(guò)程的程序設(shè)計(jì)方法,也支持的面向?qū)ο蟮某绦蛟O(shè)計(jì)方法。它是Linux和Unix下編程的最主要的語(yǔ)言之一,也是嵌入式開(kāi)發(fā)最常用的編程語(yǔ)言。C++全面兼容C,對(duì)熟悉C的程序員僅需學(xué)習(xí)C++語(yǔ)言的面向?qū)ο筇卣,就可很快地用C++編寫(xiě)程序。
本書(shū)是一本通過(guò)編程實(shí)踐引導(dǎo)學(xué)生掌握C++程序開(kāi)發(fā)的教材。在編寫(xiě)過(guò)程中,我們組織了多位長(zhǎng)期從事程序設(shè)計(jì)、數(shù)據(jù)結(jié)構(gòu)、面向?qū)ο蟪绦蛟O(shè)計(jì)和計(jì)算機(jī)算法設(shè)計(jì)課程教學(xué)的老師,其中部分老師是本校的ACM程序設(shè)計(jì)集訓(xùn)隊(duì)的教練和指導(dǎo)老師,他們都有著豐富的教學(xué)和編程經(jīng)驗(yàn)。本書(shū)在編寫(xiě)過(guò)程中力求將復(fù)雜的概念用簡(jiǎn)潔、通俗的語(yǔ)言來(lái)描述,做到深入淺出、循序漸進(jìn),從而使學(xué)生能體會(huì)到學(xué)習(xí)編程的樂(lè)趣。
傳統(tǒng)的程序設(shè)計(jì)教材和采用的教學(xué)模式多以學(xué)習(xí)計(jì)算機(jī)語(yǔ)言為主,多重視理論教學(xué),輕實(shí)踐教學(xué)環(huán)節(jié),編程能力低也導(dǎo)致了后續(xù)一些課程學(xué)習(xí)困難,不利于培養(yǎng)學(xué)生的算法思想、設(shè)計(jì)理論和創(chuàng)新意識(shí),也就無(wú)法適應(yīng)當(dāng)今信息社會(huì)和知識(shí)經(jīng)濟(jì)對(duì)人才的要求。在這種情況下,我們改革程序設(shè)計(jì)類課程實(shí)踐教學(xué),突出計(jì)算機(jī)的實(shí)踐教育,培養(yǎng)學(xué)生分析問(wèn)題和解決問(wèn)題的創(chuàng)新能力。
近年,以培養(yǎng)和提高計(jì)算機(jī)編程能力的不同層次比賽應(yīng)運(yùn)而生。如省級(jí)大學(xué)生計(jì)算機(jī)程序設(shè)計(jì)競(jìng)賽、ACM國(guó)際大學(xué)生程序設(shè)計(jì)競(jìng)賽等。因此,以程序設(shè)計(jì)競(jìng)賽為依托,改革程序設(shè)計(jì)類課程教學(xué)體系和內(nèi)容,探討和創(chuàng)新程序設(shè)計(jì)類課程的實(shí)踐教學(xué)方法和手段,對(duì)加強(qiáng)程序設(shè)計(jì)類課程的教學(xué)和實(shí)踐環(huán)節(jié),提高學(xué)生們的編程能力,促進(jìn)計(jì)算機(jī)類創(chuàng)新人才培訓(xùn)和培養(yǎng)出符合社會(huì)需求的人才具有重要理論和實(shí)踐意義。
本書(shū)將ACM國(guó)際大學(xué)生程序設(shè)計(jì)競(jìng)賽引進(jìn)到課程學(xué)習(xí)之中,使學(xué)生從編程入門開(kāi)始就養(yǎng)成良好的編程習(xí)慣和編程思維,強(qiáng)化學(xué)生對(duì)實(shí)際問(wèn)題分析能力和解決問(wèn)題能力的培養(yǎng),激發(fā)學(xué)生對(duì)編程的興趣,達(dá)到以教學(xué)促競(jìng)賽,以競(jìng)賽強(qiáng)化教學(xué)的目的。
ACM國(guó)際大學(xué)生程序設(shè)計(jì)競(jìng)賽(簡(jiǎn)稱ACM-ICPC)是由國(guó)際計(jì)算機(jī)界具有悠久歷史的權(quán)威性組織ACM學(xué)會(huì)(Association for Computing Machinery)主辦,是世界上公認(rèn)的規(guī)模最大、水平最高、參與人數(shù)最多的大學(xué)生程序設(shè)計(jì)競(jìng)賽,其宗旨是使大學(xué)生能通過(guò)計(jì)算機(jī)充分展示自己分析問(wèn)題和解決問(wèn)題的能力。現(xiàn)在各個(gè)高校都非常重視計(jì)算機(jī)程序設(shè)計(jì)競(jìng)賽。
與本書(shū)配套的教材《C++程序設(shè)計(jì)教程習(xí)題答案和實(shí)驗(yàn)指導(dǎo)》提供了本課程的實(shí)驗(yàn)內(nèi)容、參考答案和模擬試卷。所有習(xí)題和程序均按照ACM國(guó)際大學(xué)生程序設(shè)計(jì)競(jìng)賽要求進(jìn)行設(shè)計(jì),并進(jìn)行了嚴(yán)格的測(cè)試,驗(yàn)證了程序的正確性。
參與本書(shū)編寫(xiě)的人員有:湖南師范大學(xué)的瞿紹軍、羅迅、劉宏、張麗霞、謝超和石堅(jiān)老師,衡陽(yáng)師范學(xué)院的李浪老師,吉首大學(xué)的王從銀和彭華老師,湖南文理學(xué)院的丁德紅老師,湖南農(nóng)業(yè)大學(xué)的張引瓊老師。
本書(shū)吸收了國(guó)內(nèi)外近幾年出版的同類教材的優(yōu)點(diǎn),內(nèi)容豐富,特別適合用作計(jì)算機(jī)專業(yè)和相關(guān)專業(yè)的程序設(shè)計(jì)類課程的教材;作為ACM國(guó)際大學(xué)生程序設(shè)計(jì)競(jìng)賽入門教材;也可作為各類考試培訓(xùn)和C++程序設(shè)計(jì)自學(xué)教材。
本教材的出版得到了湖南師范大學(xué)教學(xué)改革研究項(xiàng)目“程序設(shè)計(jì)類課程實(shí)踐教學(xué)體系、內(nèi)容、方法和手段改革的研究與實(shí)踐”的資助。
為方便教師的教學(xué)。本書(shū)配有豐富的電子資源和課件,您在使用過(guò)程中有任何疑問(wèn)可發(fā)郵件與我們聯(lián)系(Email:powerhope@163.com)。
編者
2015年12月于長(zhǎng)沙岳麓山
目 錄
內(nèi)容簡(jiǎn)介 2
前 言 3
第一章 C++語(yǔ)言概述 10
1.1 C++語(yǔ)言簡(jiǎn)介 10
1.1.1 C++語(yǔ)言的發(fā)展 10
1.1.2 C++語(yǔ)言的特點(diǎn) 10
1.2 C++程序基本結(jié)構(gòu) 11
1.3 C++程序的開(kāi)發(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國(guó)際大學(xué)生程序設(shè)計(jì)競(jìng)賽 31
1.4.1 ACM-ICPC簡(jiǎn)介 31
1.4.2 競(jìng)賽規(guī)則 32
1.4.3 自動(dòng)評(píng)測(cè)系統(tǒng) 33
1.4.4 競(jìng)賽學(xué)習(xí)資源—書(shū)籍推薦 34
習(xí)題一 38
第二章 C++語(yǔ)言編程基礎(chǔ) 39
2.1 C++語(yǔ)言詞法 39
2.1.1 注釋 39
2.1.2 標(biāo)識(shí)符 39
2.1.3 關(guān)鍵字 40
2.1.4 運(yùn)算符 41
2.1.5 標(biāo)點(diǎn)符號(hào) 41
2.1.6 常量 41
2.2 基本數(shù)據(jù)類型 42
2.2.1 整型 42
2.2.2 浮點(diǎn)型 43
2.2.3 字符型 44
2.2.4 布爾型 45
2.2.5 寬字符類型 45
2.2.6 字符串常量 45
2.3 運(yùn)算符與表達(dá)式 45
2.3.1 變量的定義 45
2.3.2 算術(shù)運(yùn)算符 46
2.3.3 關(guān)系運(yùn)算符 47
2.3.4 邏輯運(yùn)算符 47
2.3.5 位運(yùn)算符 48
2.3.6 移位運(yùn)算符 48
2.3.7 賦值運(yùn)算符 49
2.3.8 條件運(yùn)算符 50
2.3.9 逗號(hào)運(yùn)算符 50
2.3.10 類型轉(zhuǎn)換運(yùn)算 50
2.3.11 自增運(yùn)算符和自減運(yùn)算符 50
2.3.12 表達(dá)式的估值 51
2.4語(yǔ)句 52
2.4.1語(yǔ)句及三種結(jié)構(gòu) 52
2.4.2 表達(dá)式語(yǔ)句 52
2.4.3 復(fù)合語(yǔ)句 53
2.4.4 C++標(biāo)準(zhǔn)輸入輸出流(包括常用格式控制) 53
2.4.5 選擇語(yǔ)句 58
2.4.6 循環(huán)語(yǔ)句 62
2.4.7 break語(yǔ)句和continue語(yǔ)句 65
2.4.8 goto語(yǔ)句 66
2.4.9 程序設(shè)計(jì)綜合舉例 66
2.5 ACM國(guó)際大學(xué)生程序設(shè)計(jì)競(jìng)賽中的輸入輸出 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í)際參數(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 變量作用域和存儲(chǔ)類型 110
4.5.1 局部與全局變量 110
4.5.2 動(dòng)態(tài)存儲(chǔ)和靜態(tài)存儲(chǔ) 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指針運(yùn)算符 122
5.2.3 引用變量 123
5.2.4 多級(jí)指針與指針數(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 指針運(yùn)算 138
5.5 動(dòng)態(tài)存儲(chǔ)分配 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)存動(dòng)態(tài)管理函數(shù) 158
6.5共用體 159
6.5.1共用體的概念 159
6.5.2 共用型變量的定義 160
6.5.3共用型變量的引用 160
6.5.4共用體類型數(shù)據(jù)的特點(diǎn) 161
6.5.5共用體變量的應(yīng)用 162
6.6枚舉類型 163
6.7用typedef定義 166
習(xí)題六 167
第七章 類與對(duì)象及封裝性 170
7.1 類的抽象 170
7.2 類的定義與對(duì)象的生成 170
7.3 構(gòu)造函數(shù)和析構(gòu)函數(shù) 175
7.4 構(gòu)造函數(shù)的重載 178
7.5 對(duì)象指針 180
習(xí)題七 181
第八章 類的深入 183
8.1 友元函數(shù) 183
8.2 對(duì)象傳入函數(shù)的討論 187
8.3 函數(shù)返回對(duì)象的討論 190
8.4 拷貝構(gòu)造函數(shù) 193
8.5 this關(guān)鍵字 196
習(xí)題八 197
第九章 運(yùn)算符重載 201
9.1 使用成員函數(shù)的運(yùn)算符重載 201
9.2 友元運(yùn)算符函數(shù) 205
9.3 重載關(guān)系運(yùn)算符 209
9.4 進(jìn)一步考查賦值運(yùn)算符 210
9.5 重載new和delete 213
9.6 重載[ ] 215
9.7 重載其他運(yùn)算符 217
習(xí)題九 221
第十章 繼承性 223
10.1 繼承性的理解 223
10.2 類的繼承過(guò)程 224
10.3 基類訪問(wèn)控制 225
10.4 簡(jiǎn)單的多重繼承 230
10.5 構(gòu)造函數(shù)/析構(gòu)函數(shù)的調(diào)用順序 231
10.6 給基類構(gòu)造函數(shù)傳遞參數(shù) 232
10.7 訪問(wèn)的許可 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)點(diǎn) 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 流對(duì)象的成員函數(shù) 260
12.6 ACM中的文件輸入輸出 262
習(xí)題十二 265
第十三章 模板和標(biāo)準(zhǔn)庫(kù) 266
13.1函數(shù)模板 266
13.2 類模板 267
13.3 標(biāo)準(zhǔn)庫(kù) 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碼對(duì)照表 284
附錄B:C/C++與標(biāo)準(zhǔn)C++頭文件對(duì)照表 285
附錄C:Linux、Unix下編譯C++程序 286
附錄D:在Visual C++下調(diào)試程序 290
附錄E:Dev-C++調(diào)試 295
參考文獻(xiàn) 299