以“程序設(shè)計”為主線,從材料取舍、內(nèi)容表達方式、實例選取到習(xí)題和課程設(shè)計配置都以讀者掌握“程序設(shè)計”的基本概念、方法和技巧為重點,并融入了作者多年的C++教學(xué)經(jīng)驗和軟件工程實踐經(jīng)驗。
本書前兩版出版以來一直受到眾多讀者喜愛,許多讀者和授課教師紛紛與作者聯(lián)系,作者受益良多,深表感謝。針對初學(xué)者和自學(xué)者的需求,本版結(jié)合讀者反饋和作者近幾年的科研成果,采用Visual Studio 2015對C++的知識點進行了全面的修訂。
本書的特點如下:
1)本書主要講解C++程序設(shè)計的編程方法,這是計算機類專業(yè)學(xué)生的編程基礎(chǔ)。
2)本書是作者教學(xué)經(jīng)驗的結(jié)晶。作者20年來一直從事程序設(shè)計方面的教學(xué)和科研工作,主講C、C++、Java等程序設(shè)計課程,積累了豐富的教學(xué)經(jīng)驗。“從實踐到理論,再從理論到實踐,循序而漸進”是作者教學(xué)的心得體會,編寫教材也不例外。作者深知學(xué)生的薄弱環(huán)節(jié)和學(xué)習(xí)特點,所以將自己的知識、授課方法和教學(xué)經(jīng)驗總結(jié)出來,以使更多的學(xué)生受益。
3)在內(nèi)容安排上,本書盡量提前講解文件操作這部分內(nèi)容(許多書都是在后講解)。因為文件是很實用也是比較難學(xué)的,所以這種安排也為學(xué)生進行課程設(shè)計和實驗做了鋪墊。
4)在作業(yè)安排上,從易到難,環(huán)環(huán)相扣。作者在教學(xué)中發(fā)現(xiàn),許多學(xué)生學(xué)過C++卻不會編程。因此,本書設(shè)計了許多與實際有關(guān)的習(xí)題,并且它們彼此相關(guān)。
5)強調(diào)課程設(shè)計。C++課程應(yīng)該有課程設(shè)計,我們在本書的后給出了一個課程設(shè)計要求,希望學(xué)生能獨立、認真完成。這對提高學(xué)生的編程能力、鞏固學(xué)過的知識大有裨益。
6)力求語言通俗易懂。本書的編寫目的是讓學(xué)生通過自學(xué)或在教師的講授下,能夠運用C++語言的核心要素進行程序設(shè)計。因此,本書圍繞著如何進行C++編程展開。為了便于學(xué)生學(xué)習(xí),作者力求講解通俗易懂,將復(fù)雜的概念采用淺顯的語言描述,做到易學(xué)、易用、有趣,從而便于學(xué)生理解和掌握C++編程思想與方法。
7)強調(diào)程序的可讀性。本書中的程序全部采用統(tǒng)一的程序設(shè)計風格。例如,類名、函數(shù)名和變量名的定義做到“見名知義”;采用縮排格式組織程序代碼并配以盡可能多的注釋。希望學(xué)生能夠模仿這種程序設(shè)計風格。
8)包含大量的程序示例,并給出運行結(jié)果。凡是程序開頭帶有編號的程序,都是完整的程序,可以直接在計算機上編譯運行。
9)采用醒目的標記來顯示知識點。這些標記是注意、警告和思考等,它們穿插在正文中,幫助學(xué)生盡快找到重要的信息。
注意:值得關(guān)注的地方,也是作者在教學(xué)中發(fā)現(xiàn)學(xué)生容易搞錯的知識點。
警告:這是容易混淆的知識點。
思考:提出問題,引導(dǎo)學(xué)生思考,以培養(yǎng)思考能力。
本書的電子教案采用PowerPoint制作,可以在講課時用多媒體投影演示,這樣可部分取代板書。教師不僅可以使用本教案,還可以方便地修改和重新組織其中的內(nèi)容以適應(yīng)自己的教學(xué)需要。使用本教案可以減少教師備課時編寫教案的工作量,以及因板書所花費的時間和精力,從而提高單位課時內(nèi)的知識含量。
我們向使用本書的教師免費提供電子教案,需要本教案的教師可以直接與機械工業(yè)出版社華章公司聯(lián)系。
在編寫本書的過程中,作者得到了許多同事的幫助,包括王珊珊、張志航、鄭洪源、陳丹等,他們提出了許多寶貴的意見和建議。作者的研究生馬程、張玉、方卓然、張偉、王強、程冉、李文等人,為本書做了大量的程序驗證工作。在教學(xué)的過程中,作者也受到了許多學(xué)生提出的問題的啟發(fā),這也使作者在寫書的過程中注意有的放矢。
感謝您選擇本書,歡迎您對本書的內(nèi)容提出批評和修改建議,作者將不勝感激。作者的電子郵件地址:dc.pi@163.com。
皮德常
2021年10月
皮德常,男,1971年11月生,博士,副教授,碩士生導(dǎo)師。于1994年、1997、2002年在南京航空航天大學(xué)獲得學(xué)士、碩士和博士學(xué)位。近幾年來,先后發(fā)表科研論文42篇,獲南京航空航天大學(xué)教學(xué)優(yōu)秀獎4次,教學(xué)觀摩獎1次;主持和參與國家自然科學(xué)基金3項、江蘇省自然科學(xué)基金和國家“863”計劃各1項;先后獲得省部級科技進步二等獎2次、三等獎2次;在清華大學(xué)出版社、國防工業(yè)出版社和機械工業(yè)出版社出版計算機專業(yè)書5本。
前言
教學(xué)建議
第1章 C++程序設(shè)計基礎(chǔ) 1
1.1 為什么要學(xué)習(xí)C++程序設(shè)計 1
1.2 簡單的C++程序舉例 2
1.3 注釋方法 3
1.4 編程風格 3
1.5 C++程序的詞法單位 3
1.5.1 C++程序中的字符 4
1.5.2 標識符 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 符號常量 8
1.7.4 常變量 9
1.8 運算符和表達式 9
1.8.1 算術(shù)運算符和算術(shù)表達式 9
1.8.2 初識運算符的優(yōu)先級和結(jié)合性 9
1.8.3 賦值運算符和賦值表達式 10
1.8.4 自增、自減運算符 11
1.8.5 關(guān)系運算符和關(guān)系表達式 11
1.8.6 邏輯運算符和邏輯表達式 12
1.8.7 位運算符和位表達式 13
1.8.8 逗號運算符和逗號表達式 15
1.8.9 sizeof運算符 15
1.8.10 C++的運算符優(yōu)先級和結(jié)合性 16
1.9 語句 16
1.10 類型轉(zhuǎn)換 17
1.10.1 賦值時的類型轉(zhuǎn)換 17
1.10.2 混合運算時的類型轉(zhuǎn)換 18
1.10.3 強制類型轉(zhuǎn)換 19
1.11 簡單的輸出和輸入方法 19
1.11.1 cout對象和cin對象 19
1.11.2 格式化輸出 22
1.11.3 采用函數(shù)成員實現(xiàn)格式化輸出 24
1.11.4 對函數(shù)成員的初步討論 26
1.11.5 指定輸入域?qū)? 26
1.11.6 讀取一行 27
1.11.7 讀取一個字符 27
1.11.8 讀取字符時易出錯的地方 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è)計 34
2.2.1 基本的if語句 34
2.2.2 嵌套的if語句 36
2.2.3 條件運算符 38
2.2.4 switch語句 39
2.3 循環(huán)結(jié)構(gòu)程序設(shè)計 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語句 45
2.3.6 continue語句 46
2.3.7 應(yīng)該少用的goto語句 47
2.4 程序設(shè)計應(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)存存儲區(qū)的布局 61
3.4.2 局部變量 62
3.4.3 全局變量 62
3.4.4 局部變量與棧 63
3.5 變量的存儲類別 64
3.5.1 auto修飾的變量 64
3.5.2 register修飾的變量 65
3.5.3 static修飾的變量 65
3.5.4 extern修飾的變量 66
3.6 默認參數(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ù)組無越界檢查 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風格字符串的函數(shù) 114
4.6.3 自定義字符串處理函數(shù) 117
思考與練習(xí) 119
第5章 指針 120
5.1 指針的概念 120
5.2 指針變量 120
5.2.1 定義指針變量 120
5.2.2 運算符&和* 121
5.2.3 引用指針變量 122
5.3 指針與數(shù)組 124
5.3.1 指向數(shù)組元素的指針 124
5.3.2 指針的運算 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.