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