以“程序設(shè)計(jì)”為主線,從材料取舍、內(nèi)容表達(dá)方式、實(shí)例選取到習(xí)題和課程設(shè)計(jì)配置都以讀者掌握“程序設(shè)計(jì)”的基本概念、方法和技巧為重點(diǎn),并融入了作者多年的C++教學(xué)經(jīng)驗(yàn)和軟件工程實(shí)踐經(jīng)驗(yàn)。
本書前兩版出版以來(lái)一直受到眾多讀者喜愛,許多讀者和授課教師紛紛與作者聯(lián)系,作者受益良多,深表感謝。針對(duì)初學(xué)者和自學(xué)者的需求,本版結(jié)合讀者反饋和作者近幾年的科研成果,采用Visual Studio 2015對(duì)C++的知識(shí)點(diǎn)進(jìn)行了全面的修訂。
本書的特點(diǎn)如下:
1)本書主要講解C++程序設(shè)計(jì)的編程方法,這是計(jì)算機(jī)類專業(yè)學(xué)生的編程基礎(chǔ)。
2)本書是作者教學(xué)經(jīng)驗(yàn)的結(jié)晶。作者20年來(lái)一直從事程序設(shè)計(jì)方面的教學(xué)和科研工作,主講C、C++、Java等程序設(shè)計(jì)課程,積累了豐富的教學(xué)經(jīng)驗(yàn)!皬膶(shí)踐到理論,再?gòu)睦碚摰綄?shí)踐,循序而漸進(jìn)”是作者教學(xué)的心得體會(huì),編寫教材也不例外。作者深知學(xué)生的薄弱環(huán)節(jié)和學(xué)習(xí)特點(diǎn),所以將自己的知識(shí)、授課方法和教學(xué)經(jīng)驗(yàn)總結(jié)出來(lái),以使更多的學(xué)生受益。
3)在內(nèi)容安排上,本書盡量提前講解文件操作這部分內(nèi)容(許多書都是在后講解)。因?yàn)槲募呛軐?shí)用也是比較難學(xué)的,所以這種安排也為學(xué)生進(jìn)行課程設(shè)計(jì)和實(shí)驗(yàn)做了鋪墊。
4)在作業(yè)安排上,從易到難,環(huán)環(huán)相扣。作者在教學(xué)中發(fā)現(xiàn),許多學(xué)生學(xué)過C++卻不會(huì)編程。因此,本書設(shè)計(jì)了許多與實(shí)際有關(guān)的習(xí)題,并且它們彼此相關(guān)。
5)強(qiáng)調(diào)課程設(shè)計(jì)。C++課程應(yīng)該有課程設(shè)計(jì),我們?cè)诒緯暮蠼o出了一個(gè)課程設(shè)計(jì)要求,希望學(xué)生能獨(dú)立、認(rèn)真完成。這對(duì)提高學(xué)生的編程能力、鞏固學(xué)過的知識(shí)大有裨益。
6)力求語(yǔ)言通俗易懂。本書的編寫目的是讓學(xué)生通過自學(xué)或在教師的講授下,能夠運(yùn)用C++語(yǔ)言的核心要素進(jìn)行程序設(shè)計(jì)。因此,本書圍繞著如何進(jìn)行C++編程展開。為了便于學(xué)生學(xué)習(xí),作者力求講解通俗易懂,將復(fù)雜的概念采用淺顯的語(yǔ)言描述,做到易學(xué)、易用、有趣,從而便于學(xué)生理解和掌握C++編程思想與方法。
7)強(qiáng)調(diào)程序的可讀性。本書中的程序全部采用統(tǒng)一的程序設(shè)計(jì)風(fēng)格。例如,類名、函數(shù)名和變量名的定義做到“見名知義”;采用縮排格式組織程序代碼并配以盡可能多的注釋。希望學(xué)生能夠模仿這種程序設(shè)計(jì)風(fēng)格。
8)包含大量的程序示例,并給出運(yùn)行結(jié)果。凡是程序開頭帶有編號(hào)的程序,都是完整的程序,可以直接在計(jì)算機(jī)上編譯運(yùn)行。
9)采用醒目的標(biāo)記來(lái)顯示知識(shí)點(diǎn)。這些標(biāo)記是注意、警告和思考等,它們穿插在正文中,幫助學(xué)生盡快找到重要的信息。
注意:值得關(guān)注的地方,也是作者在教學(xué)中發(fā)現(xiàn)學(xué)生容易搞錯(cuò)的知識(shí)點(diǎn)。
警告:這是容易混淆的知識(shí)點(diǎn)。
思考:提出問題,引導(dǎo)學(xué)生思考,以培養(yǎng)思考能力。
本書的電子教案采用PowerPoint制作,可以在講課時(shí)用多媒體投影演示,這樣可部分取代板書。教師不僅可以使用本教案,還可以方便地修改和重新組織其中的內(nèi)容以適應(yīng)自己的教學(xué)需要。使用本教案可以減少教師備課時(shí)編寫教案的工作量,以及因板書所花費(fèi)的時(shí)間和精力,從而提高單位課時(shí)內(nèi)的知識(shí)含量。
我們向使用本書的教師免費(fèi)提供電子教案,需要本教案的教師可以直接與機(jī)械工業(yè)出版社華章公司聯(lián)系。
在編寫本書的過程中,作者得到了許多同事的幫助,包括王珊珊、張志航、鄭洪源、陳丹等,他們提出了許多寶貴的意見和建議。作者的研究生馬程、張玉、方卓然、張偉、王強(qiáng)、程冉、李文等人,為本書做了大量的程序驗(yàn)證工作。在教學(xué)的過程中,作者也受到了許多學(xué)生提出的問題的啟發(fā),這也使作者在寫書的過程中注意有的放矢。
感謝您選擇本書,歡迎您對(duì)本書的內(nèi)容提出批評(píng)和修改建議,作者將不勝感激。作者的電子郵件地址:dc.pi@163.com。
皮德常
2021年10月
皮德常,男,1971年11月生,博士,副教授,碩士生導(dǎo)師。于1994年、1997、2002年在南京航空航天大學(xué)獲得學(xué)士、碩士和博士學(xué)位。近幾年來(lái),先后發(fā)表科研論文42篇,獲南京航空航天大學(xué)教學(xué)優(yōu)秀獎(jiǎng)4次,教學(xué)觀摩獎(jiǎng)1次;主持和參與國(guó)家自然科學(xué)基金3項(xiàng)、江蘇省自然科學(xué)基金和國(guó)家“863”計(jì)劃各1項(xiàng);先后獲得省部級(jí)科技進(jìn)步二等獎(jiǎng)2次、三等獎(jiǎng)2次;在清華大學(xué)出版社、國(guó)防工業(yè)出版社和機(jī)械工業(yè)出版社出版計(jì)算機(jī)專業(yè)書5本。
前言
教學(xué)建議
第1章 C++程序設(shè)計(jì)基礎(chǔ) 1
1.1 為什么要學(xué)習(xí)C++程序設(shè)計(jì) 1
1.2 簡(jiǎn)單的C++程序舉例 2
1.3 注釋方法 3
1.4 編程風(fēng)格 3
1.5 C++程序的詞法單位 3
1.5.1 C++程序中的字符 4
1.5.2 標(biāo)識(shí)符 4
1.5.3 關(guān)鍵字 4
1.6 C++的基本數(shù)據(jù)類型 5
1.7 變量和常量 6
1.7.1 變量 6
1.7.2 文字常量 7
1.7.3 符號(hào)常量 8
1.7.4 常變量 9
1.8 運(yùn)算符和表達(dá)式 9
1.8.1 算術(shù)運(yùn)算符和算術(shù)表達(dá)式 9
1.8.2 初識(shí)運(yùn)算符的優(yōu)先級(jí)和結(jié)合性 9
1.8.3 賦值運(yùn)算符和賦值表達(dá)式 10
1.8.4 自增、自減運(yùn)算符 11
1.8.5 關(guān)系運(yùn)算符和關(guān)系表達(dá)式 11
1.8.6 邏輯運(yùn)算符和邏輯表達(dá)式 12
1.8.7 位運(yùn)算符和位表達(dá)式 13
1.8.8 逗號(hào)運(yùn)算符和逗號(hào)表達(dá)式 15
1.8.9 sizeof運(yùn)算符 15
1.8.10 C++的運(yùn)算符優(yōu)先級(jí)和結(jié)合性 16
1.9 語(yǔ)句 16
1.10 類型轉(zhuǎn)換 17
1.10.1 賦值時(shí)的類型轉(zhuǎn)換 17
1.10.2 混合運(yùn)算時(shí)的類型轉(zhuǎn)換 18
1.10.3 強(qiáng)制類型轉(zhuǎn)換 19
1.11 簡(jiǎn)單的輸出和輸入方法 19
1.11.1 cout對(duì)象和cin對(duì)象 19
1.11.2 格式化輸出 22
1.11.3 采用函數(shù)成員實(shí)現(xiàn)格式化輸出 24
1.11.4 對(duì)函數(shù)成員的初步討論 26
1.11.5 指定輸入域?qū)? 26
1.11.6 讀取一行 27
1.11.7 讀取一個(gè)字符 27
1.11.8 讀取字符時(shí)易出錯(cuò)的地方 28
1.12 枚舉類型 29
1.12.1 枚舉類型的定義 29
1.12.2 枚舉類型的變量 29
1.12.3 枚舉類型的應(yīng)用 30
思考與練習(xí) 31
第2章 C++的流程控制 32
2.1 算法的基本概念和表示方法 32
2.1.1 算法的基本概念 32
2.1.2 算法的表示 32
2.1.3 算法的三種基本結(jié)構(gòu) 33
2.2 選擇結(jié)構(gòu)程序設(shè)計(jì) 34
2.2.1 基本的if語(yǔ)句 34
2.2.2 嵌套的if語(yǔ)句 36
2.2.3 條件運(yùn)算符 38
2.2.4 switch語(yǔ)句 39
2.3 循環(huán)結(jié)構(gòu)程序設(shè)計(jì) 41
2.3.1 while循環(huán) 41
2.3.2 do-while循環(huán) 42
2.3.3 for循環(huán) 42
2.3.4 循環(huán)嵌套 44
2.3.5 break語(yǔ)句 45
2.3.6 continue語(yǔ)句 46
2.3.7 應(yīng)該少用的goto語(yǔ)句 47
2.4 程序設(shè)計(jì)應(yīng)用舉例 47
思考與練習(xí) 51
第3章 函數(shù) 54
3.1 函數(shù)的定義和調(diào)用 54
3.1.1 概述 54
3.1.2 定義函數(shù) 54
3.1.3 調(diào)用函數(shù) 55
3.2 函數(shù)的聲明 57
3.3 函數(shù)的參數(shù)傳遞和返回值 58
3.3.1 函數(shù)參數(shù)的傳遞方式 58
3.3.2 函數(shù)的返回值 59
3.4 局部變量和全局變量 61
3.4.1 內(nèi)存存儲(chǔ)區(qū)的布局 61
3.4.2 局部變量 62
3.4.3 全局變量 62
3.4.4 局部變量與棧 63
3.5 變量的存儲(chǔ)類別 64
3.5.1 auto修飾的變量 64
3.5.2 register修飾的變量 65
3.5.3 static修飾的變量 65
3.5.4 extern修飾的變量 66
3.6 默認(rèn)參數(shù) 68
3.7 引用做參數(shù) 70
3.8 函數(shù)重載 71
3.9 函數(shù)模板 74
3.9.1 從函數(shù)重載到函數(shù)模板 74
3.9.2 定義函數(shù)模板的方法 77
3.9.3 函數(shù)模板重載 77
3.10 內(nèi)聯(lián)函數(shù) 78
3.11 函數(shù)的遞歸調(diào)用 79
3.12 函數(shù)的調(diào)試方法 84
3.13 編譯預(yù)處理 85
3.13.1 宏定義 85
3.13.2 文件包含 87
3.13.3 條件編譯 87
思考與練習(xí) 89
第4章 數(shù)組 92
4.1 一維數(shù)組 92
4.1.1 一維數(shù)組的定義和應(yīng)用 92
4.1.2 引用一維數(shù)組元素 93
4.1.3 數(shù)組無(wú)越界檢查 93
4.1.4 數(shù)組初始化 93
4.2 多維數(shù)組 95
4.2.1 二維數(shù)組的定義 95
4.2.2 二維數(shù)組的初始化 95
4.2.3 引用二維數(shù)組元素 96
4.3 數(shù)組做函數(shù)參數(shù) 97
4.3.1 數(shù)組元素做函數(shù)參數(shù) 97
4.3.2 數(shù)組名做函數(shù)參數(shù) 98
4.4 常用算法舉例 99
4.5 字符數(shù)組與字符串 110
4.5.1 字符數(shù)組的定義 110
4.5.2 字符數(shù)組的初始化 111
4.5.3 字符串 111
4.5.4 字符數(shù)組的輸入和輸出 112
4.6 處理字符和字符串 113
4.6.1 處理字符的宏 113
4.6.2 處理C風(fēng)格字符串的函數(shù) 114
4.6.3 自定義字符串處理函數(shù) 117
思考與練習(xí) 119
第5章 指針 120
5.1 指針的概念 120
5.2 指針變量 120
5.2.1 定義指針變量 120
5.2.2 運(yùn)算符&和* 121
5.2.3 引用指針變量 122
5.3 指針與數(shù)組 124
5.3.1 指向數(shù)組元素的指針 124
5.3.2 指針的運(yùn)算 125
5.3.3 二維數(shù)組與指針 127
5.4 指針與函數(shù) 131
5.4.1 基本類型的變量做函數(shù)形參 131
5.4.2 引用做函數(shù)形參 132
5.4.3 指針變量做函數(shù)形參 133
5.4.4 返回指針的函數(shù) 135
5.4.5 指向函數(shù)的指針 137
5.5 指針數(shù)組與指向指針的指針 138
5.5.1 指針數(shù)組 138
5.5.