《C/C++程序設(shè)計(jì) 第3版》是用于學(xué)習(xí)C/C++語言程序設(shè)計(jì)的教科書。內(nèi)容包括:程序設(shè)計(jì)語言的分類和發(fā)展,C語言和C++語言的產(chǎn)生和發(fā)展,基本數(shù)據(jù)類型,運(yùn)算符和表達(dá)式,輸入輸出用法,編譯預(yù)處理,分支和循環(huán),構(gòu)造數(shù)據(jù)類型(數(shù)組、結(jié)構(gòu)、聯(lián)合、枚舉、文件),函數(shù),指針,類和對(duì)象,以及用附錄形式給出的ASCII碼表、C/C++常用庫函數(shù)表、VisualC++6.0上機(jī)操作方法、VisualC++2010上機(jī)操作方法、部分習(xí)題參考答案等。《C/C++程序設(shè)計(jì) 第3版》通過100多個(gè)例題和500多道習(xí)題講解C/C++語言基本用法,向讀者傳授程序設(shè)計(jì)技術(shù)。
本書自2008年第1版和2013年第2版發(fā)行以來,在計(jì)算機(jī)基礎(chǔ)教學(xué)中發(fā)揮了應(yīng)有的作用,深受讀者歡迎
前 言
本書自2008年第1版和2013年第2版發(fā)行以來,在計(jì)算機(jī)基礎(chǔ)教學(xué)中發(fā)揮了應(yīng)有的作用,深受讀者歡迎,對(duì)此,作者表示感謝。
圖靈獎(jiǎng)獲得者Dijkstra說過:“我們所使用的工具影響著我們的思維方式和思維習(xí)慣,從而也將深刻地影響著我們的思維能力”。計(jì)算機(jī)(包括一切智能設(shè)備)無疑是當(dāng)今人們最為依賴的工具,這就促使我們必須用一種新的思維方式——計(jì)算思維,去理解人類的行為,探尋求解問題的方法,設(shè)計(jì)更多更好的計(jì)算機(jī)處理算法和程序,從而讓計(jì)算機(jī)更好地為人類服務(wù)。培養(yǎng)人們的計(jì)算思維能力也是近年來國際學(xué)術(shù)界和教育界所倡導(dǎo)的一種新的教育理念。要具備這種思維能力,就必須了解計(jì)算機(jī),懂得計(jì)算機(jī)的工作原理,掌握程序設(shè)計(jì)方法(就這個(gè)意義上說,計(jì)算思維也可理解為程序思維,或者說,計(jì)算思維包含程序思維)。而程序設(shè)計(jì)方面的訓(xùn)練是其中的重要環(huán)節(jié)。故而,本次再版力求將這種教育理念更好地融入教學(xué)內(nèi)容當(dāng)中。
作者根據(jù)長期從事算法設(shè)計(jì)與分析、數(shù)據(jù)結(jié)構(gòu)、匯編語言和多種高級(jí)語言等有關(guān)計(jì)算機(jī)課程教學(xué)的經(jīng)歷,總結(jié)出這樣的經(jīng)驗(yàn):要學(xué)好用好程序設(shè)計(jì)語言,必須把握好“記、讀、仿、練、操”5個(gè)環(huán)節(jié)。
記,是指學(xué)生先要粗記基本語法和程序框架,然后再通過上機(jī)練習(xí),在理解中加以記憶和鞏固,起到事半功倍的效果。尤其是對(duì)那些內(nèi)容繁雜的、比較抽象和“繞人”的內(nèi)容,如輸入/輸出格式、函數(shù)參數(shù)傳遞、指針等不能盲目死記。
讀,就是熟讀教材中的示例程序,細(xì)心體會(huì)其中的算法設(shè)計(jì)方法和程序設(shè)計(jì)技巧。大多數(shù)例題都有一定的代表性和漸近性,需要熟讀。
仿,就是在第二步熟讀的基礎(chǔ)上,多多模仿編寫與示例內(nèi)容相近、結(jié)構(gòu)相近的程序,逐步“仿造”出“好”程序來。
練,就是多做練習(xí)題,特別要獨(dú)立完成程序閱讀題和程序填空題。程序閱讀題是用人腦模擬計(jì)算機(jī),跟蹤程序的執(zhí)行,從而得出答案。跟蹤過程對(duì)鞏固語法規(guī)則很有幫助。完成程序填空題,需要弄清程序的功能和大體結(jié)構(gòu),根據(jù)上下文,“猜出”應(yīng)該填寫的語法成分,這對(duì)提高學(xué)生的程序思維能力大有好處。
操,即上機(jī)操作。在紙上編寫的程序是“靜止”的“死”程序。只有上機(jī)操作,才能讓程序“動(dòng)”起來、“活”起來,學(xué)會(huì)在調(diào)試過程中找出程序中的語法錯(cuò)誤和邏輯錯(cuò)誤。只有學(xué)會(huì)了在機(jī)器上編程并調(diào)試,才算真正地學(xué)會(huì)了編程。
作者正是按照如何在教學(xué)中緊扣上述5點(diǎn)打造本書的。具體體現(xiàn)于如下幾點(diǎn)。
1.全書始終以介紹程序設(shè)計(jì)方法為主線,語法概念僅作為支撐程序設(shè)計(jì)的工具,而不是單純拿語法“說事”。適當(dāng)?shù)厝趸Z法概念,縮減單純語法規(guī)則所占篇幅,將語法概念更多地融入例題和習(xí)題之中。為此,本書選用了100多道例題(包括拓展文件中的例題),分支、循環(huán)、數(shù)組等重點(diǎn)內(nèi)容都配有單獨(dú)一節(jié)程序設(shè)計(jì)示例,以突出這條主線。另有500多道習(xí)題與之配合,服務(wù)于這條主線,作為正文內(nèi)容的補(bǔ)充和延伸,為教師留下較大的教學(xué)空間,以突出重點(diǎn),強(qiáng)調(diào)應(yīng)用。
2.將相關(guān)內(nèi)容融合在一起,既體現(xiàn)出共性,壓縮了篇幅,也便于歸納和總結(jié)。例如,運(yùn)算符和表達(dá)式、構(gòu)造類型、參數(shù)傳遞方式等。
3.每個(gè)例題都經(jīng)過精心挑選,在多(量大)、經(jīng)(經(jīng)典)、精(精巧)、廣(涉及面廣)的選題指導(dǎo)思想基礎(chǔ)上,本著循序漸進(jìn)的原則,從解題的算法設(shè)計(jì)思路、算法的自然語言描述、算法的流程圖、算法的實(shí)現(xiàn)程序、注釋、對(duì)程序的解釋說明等多角度對(duì)例題解法、所用到的數(shù)據(jù)、每一步的實(shí)現(xiàn)方法,以及程序結(jié)構(gòu)和主要語句的含義等方面加以剖析與講解,一步步引導(dǎo)讀者進(jìn)行計(jì)算思維,使之容易讀懂程序,逐步學(xué)會(huì)程序設(shè)計(jì)方法。
4.有的例題先后多次出現(xiàn),以體現(xiàn)不同的解法和使用不同的語法工具(如是否用數(shù)組、是否用函數(shù)、是否遞歸、是否用指針、是否用文件等)。通過這些范例,展示如何用語法描述問題和求解問題。
5.每道習(xí)題都經(jīng)過精心設(shè)計(jì),不僅習(xí)題量大,題型多(包括一般概念題、選擇題、改錯(cuò)題、程序填空題、程序跟蹤題、程序設(shè)計(jì)題等),有層次,而且自成體系,能夠起到對(duì)教學(xué)內(nèi)容“消化、細(xì)化、深化”的作用。在附錄部分給出部分習(xí)題的參考答案,這些答案大多具有代表性,以冀起到指導(dǎo)作用。
題號(hào)前帶“”標(biāo)記的是作者建議的上機(jī)練習(xí)題,這些題對(duì)鞏固課堂知識(shí)具有典型的促進(jìn)作用。多做上機(jī)練習(xí)是學(xué)好程序設(shè)計(jì)語言的最佳途徑。因而,有能力的讀者除完成那些帶“”標(biāo)記的上機(jī)練習(xí)題之外,不妨從程序設(shè)計(jì)題中挑選出更多的習(xí)題進(jìn)行上機(jī)練習(xí)。
6.與前兩版的“章習(xí)題”模式不同,本版采用“節(jié)習(xí)題”模式,將獨(dú)立訓(xùn)練單位由章細(xì)化到節(jié),所配備的習(xí)題訓(xùn)練點(diǎn)的針對(duì)性更強(qiáng),不僅方便于教師布置作業(yè),也便于學(xué)生自我練習(xí)。
7.書中所有程序(包括例題程序和習(xí)題中的程序)都進(jìn)行了精心設(shè)計(jì)(并在Visual C++ 6.0環(huán)境下測(cè)試通過),具有良好的程序結(jié)構(gòu)和程序設(shè)計(jì)風(fēng)格,以起到示范作用。
8.考慮到ANSI C(美國國家標(biāo)準(zhǔn)協(xié)會(huì)發(fā)布的C語言版本,也稱C89)作為一種優(yōu)秀的教學(xué)語言被長期廣泛使用,而單純的ANSI C在現(xiàn)實(shí)中已極少用到(通常用C++代替),故本書以ANSI C為主,將C++的一些“好用的”(相對(duì)于基本C)語法成分(如行注釋、cin、cout和傳引
前言
第1章 C語言基礎(chǔ)1
1.1 一般概念1
1.1.1 程序設(shè)計(jì)語言的發(fā)展和分類1
1.1.2 C源程序的基本結(jié)構(gòu)4
1.1.3 算法的描述和實(shí)現(xiàn)7
1.1.4 程序設(shè)計(jì)風(fēng)格10
習(xí)題1.111
1.2 基本語法成分12
1.2.1 字和詞12
1.2.2 數(shù)據(jù)類型14
1.2.3 運(yùn)算符和表達(dá)式18
習(xí)題1.229
1.3 數(shù)據(jù)的輸入和輸出34
1.3.1 cin和cout34
1.3.2 printf35
1.3.3 scanf37
習(xí)題1.338
1.4 編譯預(yù)處理42
習(xí)題1.445
第2章 分支和循環(huán)48
2.1 分支結(jié)構(gòu)48
2.1.1 if語句48
2.1.2 復(fù)合語句和if語句的嵌套50
2.1.3* switch語句54
2.1.4 程序設(shè)計(jì)示例57
習(xí)題2.159
2.2 循環(huán)結(jié)構(gòu)65
2.2.1 while語句65
2.2.2 for語句69
2.2.3 do-while語句71
2.2.4 多重循環(huán)73
2.2.5 break語句和continue語句74
2.2.6* goto語句77
2.2.7 程序設(shè)計(jì)示例79
習(xí)題2.282
第3章 構(gòu)造類型99
3.1 數(shù)組類型99
3.1.1 一維數(shù)組99
3.1.2 二維數(shù)組103
3.1.3 字符數(shù)組105
3.1.4 程序設(shè)計(jì)示例110
習(xí)題3.1115
3.2 結(jié)構(gòu)類型132
3.2.1 定義方式和引用方式132
3.2.2 typedef的用法134
3.2.3 結(jié)構(gòu)的嵌套和位域135
3.2.4 程序設(shè)計(jì)示例137
習(xí)題3.2141
3.3 聯(lián)合類型和枚舉類型144
3.3.1 聯(lián)合類型144
3.3.2 枚舉類型146
習(xí)題3.3151
3.4 文件類型153
3.4.1 文件的概念和基本操作153
3.4.2 文本文件的讀和寫156
3.4.3 二進(jìn)制文件的讀和寫158
習(xí)題3.4160
第4章 函數(shù)164
4.1 函數(shù)的基本用法164
4.1.1 函數(shù)定義和調(diào)用164
4.1.2 函數(shù)的返回值168
4.1.3 參數(shù)傳遞170
4.1.4 程序設(shè)計(jì)示例178
習(xí)題4.1179
4.2 變量的作用域和存儲(chǔ)屬性192
4.2.1 作用域192
4.2.2 存儲(chǔ)屬性195
習(xí)題4.2199
4.3 函數(shù)的嵌套調(diào)用和遞歸調(diào)用201
4.3.1 嵌套調(diào)用201
4.3.2 遞歸調(diào)用204
習(xí)題4.3208
第5章 指針類型213
5.1 指向普通變量的指針213
5.1.1 指針的定義和引用213
5.1.2 指向結(jié)構(gòu)類型的指針216
習(xí)題5.1216
5.2 指向數(shù)組和函數(shù)的指針220
5.2.1 指向一維數(shù)組的指針220
5.2.2 指向字符串的指針221
5.2.3* 指向二維數(shù)組的指針223
5.2.4* 指向函數(shù)的指針227
5.2.5 指針應(yīng)用示例231
習(xí)題5.2236
5.3 動(dòng)態(tài)變量和鏈表243
5.3.1 動(dòng)態(tài)管理函數(shù)的用法243
5.3.2 new和delete的用法246
5.3.3* 鏈表簡介249
習(xí)題5.3251
第6章* 類和對(duì)象257
6.1 基本用法257
6.1.1 定義方式257
6.1.2 引用方法259
6.1.3 構(gòu)造函數(shù)和析構(gòu)函數(shù)260
6.1.4 程序設(shè)計(jì)示例261
習(xí)題6.1264
6.2 重載、組合和繼承268
6.2.1 重載268
6.2.2 組合271
6.2.3 繼承274
習(xí)題6.2277
6.3 虛擬、友元和模板280
6.3.1 虛擬函數(shù)280
6.3.2 虛擬基類286
6.3.3 友元287
6.3.4 函數(shù)模板290
6.3.5 類模板291
習(xí)題6.3294
附錄296
附錄A 數(shù)制和碼制296
附錄B ASCII碼表302
附錄C C/C++常用庫函數(shù)303
附錄D Visual C++ 6.0的基本用法303
附錄E Visual C++ 2010的基本用法303
附錄F 部分習(xí)題參考答案304
參考文獻(xiàn)310