程式設計基礎(2019年清華大學出版社出版的圖書)

程式設計基礎(2019年清華大學出版社出版的圖書)

《程式設計基礎》是由趙宏主編,2019年清華大學出版社出版的高等學校計算機基礎教育教材。該教材適合高等院校理工類、特別是新工科學生使用,也適合結合MOOC課程自主學習的讀者使用。

全書共分3部分:結構化程式設計方法,面向對象程式設計方法,數據結構和算法。

基本介紹

  • 書名:程式設計基礎
  • 作者:趙宏、王愷
  • ISBN:9787302532156
  • 類別:高等學校計算機基礎教育教材
  • 出版社:清華大學出版社
  • 出版時間:2019年9月1日
  • 裝幀:平裝
  • 開本:16開
成書過程,內容簡介,教材目錄,教學資源,教材特色,作者簡介,

成書過程

《程式設計基礎》面向高等院校理工類特別是新工科學生掌握如何使用計算機求解問題、具有主動使用計算機解決生活和學科問題的意識和能力的需求,針對計算機學科最基礎性的問題編寫的教材。
該教材是由南開大學計算機學院公總計算機基礎教學部的教師結合教學經驗及理工類和新工科大學生對計算機基礎知識的需要編寫的,教材綜合考慮了MOOC和SPOC課程知識碎片化的特點。趙宏負責第1~3章、第7章、第10~13章和第16章的編寫並統編全書,王愷負責第4~6章、第8章、第9章、第14章和第15章的編寫。
該教材在編寫過程中,得到了清華大學出版社張瑞慶編審的支持,還參考了中國國內外的一些程式設計方面的開放課程網站和書籍。
2019年9月1日,該教材由清華大學出版社出版。

內容簡介

全書共分3部分:結構化程式設計方法,面向對象程式設計方法,數據結構和算法。
全書共16章,主要內容如下:
  • 《程式設計基礎》 前言、第1-6章為結構化程式設計方法。
  1. 第1章如何讓計算機進行計算。首先介紹計算思維和程式流程圖的基本畫法;然後介紹程式設計的基本概念、步驟和方法;最後介紹C++源程式的基本結構和組成元素以及Visualstudio2010集成開發環境;
  2. 第2章計算機如何表示與處理數據。首先介紹二進制數及幾種基本數據類型的二進制數據表示方法,包括不同數制數據之間的轉換方法,整數、實數、字元和邏輯型數據的二進制表示方法等;然後介紹如何通過C++語言實現這些基本數據類型在計算機中的存儲,以及如何對這些基本數據類型的數據進行處理的方法;
  3. 第3章選擇與疊代算法。介紹處理問題時的選擇算法和疊代算法,以及如何使用C++語言實現選擇和疊代算法;
  4. 第4章結構化數據的處理。介紹多記錄數據和多屬性數據的存儲方法,以及如何使用C++語言實現這些數據的存儲和處理;
  5. 第5章模組化。介紹模組化的思想,以及如何使用C++語言編寫模組化程式;
  6. 第6章數據存儲。重點介紹計算機中數據存儲的基本原理,以及如何使用C++語言編寫程式去操作記憶體中的數據。
  • 第7~10章為面向對象程式設計方法
  1. 第7章面向對象方法。介紹面向對象方法的基本概念,以及用C++語言實現面向對象程式設計的基本方法;
  2. 第8章繼承與多態。介紹如何使用C++語言來實現面向對象程式設計的兩個重要特性——繼承和多態;
  3. 第9章輸入輸出流。介紹標準輸入輸出的基本方法,即輸入輸出流和檔案輸入輸出流兩方面的內容;
  4. 第10章模板。介紹模板的基本概念,以及C++中函式模板和類模板的定義及使用方法等。
  • 第11~16章為基本的數據結構和算法
  1. 第11章數據結構與算法的基本概念。首先介紹數據結構的基本術語、抽象數據類型、數據結構的存儲結構和邏輯結構,然後介紹算法的基本概念和算法分析方法,最後介紹算法設計基本方法與常用的算法設計策略;
  2. 第12章線性表。介紹線性表的邏輯結構,並給出線性表的抽象數據類型;還介紹線性表的順序存儲和鏈式存儲的表示和實現方法等;
  3. 第13章棧和佇列。介紹棧的邏輯結構和抽象數據類型,並分別給出棧的順序存儲和鏈式存儲的表示和實現方法;介紹佇列的邏輯結構和抽象數據類型,並分別給出佇列的順序存儲和鏈式存儲的表示及實現方法等;
  4. 第14章樹和二叉樹。介紹樹的基本概念、二叉樹的基本特性;二叉樹的順序表示、鏈式表示,二叉樹的遍歷和其他常用操作及其實現方法;哈夫曼樹和哈夫曼碼等;
  5. 第15章圖。介紹圖的基本概念;圖在計算機中常用的3種表示方法、圖的遍歷方法及其實現方法;結合具體套用問題,講解最小生成樹和最短路徑的問題等;
  6. 第16章算法設計策略及套用實例。介紹分治、貪心、動態規劃、回溯和分支限界5種算法設計策略,並給出相應的套用實例。

教材目錄

第1章如何讓計算機進行計算11.1計算思維和程式流程圖1
1.1.1計算思維1
1.1.2程式流程圖2
1.2程式設計的基本概念4
1.2.1用計算機求解問題的過程4
1.2.2程式設計方法6
1.3高級程式設計語言——C++7
1.4初識C++程式8
1.4.1簡單C++程式實例9
1.4.2C++源程式的組成9
1.4.3C++源程式的組成元素12
1.5集成開發環境——VS201013
第2章計算機如何表示與處理數據16
2.1常用數制及不同數制數值之間的轉換17
2.1.1數制17
2.1.2不同數制之間的轉換18
2.2整數在計算機中的表示20
2.2.1數據的單位20
2.2.2整數的表示方法20
2.3實數在計算機中的表示24
2.4非數值數據在計算機中的表示25
2.4.1字元型數據在計算機中的表示25
2.4.2字元串27
2.4.3邏輯型數據27
2.5C++中的基本數據類型和轉義字元27
2.5.1C++的基本數據類型27
2.5.2C++中的轉義字元28
2.6變數和常量29
2.6.1常量29
2.6.2變數30
2.7基本數據的處理31
2.7.1運算符和表達式31
2.7.2算術運算符與算術表達式31
2.7.3賦值運算符與賦值表達式32
2.7.4關係運算符與關係表達式33
2.7.5邏輯運算符與邏輯表達式34
2.7.6基本數據類型之間的轉換35
2.8C++中的基本語句38
2.8.1定義/聲明語句38
2.8.2表達式語句41
2.8.3複合語句和空語句41
2.8.4輸入輸出語句42
2.9C++中的幾個特殊運算符42
2.9.1++和--42
2.9.2條件運算符43
2.9.3逗號運算符45
2.9.4sizeof運算符45
2.10更多關於C++的運算符和表達式46
2.10.1運算符的優先權和結合性46
2.10.2有副作用的表達式和無副作用的表達式48
2.10.3表達式的求值順序49
第3章選擇與疊代算法50
3.1單路選擇算法及其C++實現50
3.1.1單路選擇問題50
3.1.2用C++的if語句編程解決單路選擇問題51
3.2雙路選擇算法及其C++實現52
3.2.1雙路選擇問題52
3.2.2用C++提供的if…else語句編程解決雙路選擇問題53
3.3嵌套選擇及其C++實現54
3.4多路選擇算法及其C++實現56
3.4.1多路選擇問題56
3.4.2用C++提供的switch語句編程解決多路選擇問題56
3.5疊代算法及其for語句的實現58
3.5.1疊代算法59
3.5.2用C++提供的for語句實現疊代算法59
3.6疊代算法及其while語句的實現60
3.6.1用C++提供的while語句實現疊代算法60
3.6.2用C++提供的do…while語句實現疊代算法61
3.7疊代嵌套及其C++實現62
3.8疊代與選擇嵌套及其C++實現64
3.8.1疊代與選擇嵌套及其C++實現64
3.8.2選擇與疊代嵌套及其C++實現65
3.9C++中的轉向語句65
3.9.1break語句66
3.9.2continue語句66
3.9.3return語句67
3.9.4goto語句67
第4章結構化數據的處理69
4.1一維數據及其C++實現69
4.1.1一維數據問題69
4.1.2用C++提供的一維數組存儲一維數據71
4.2二維數據及其C++實現73
4.2.1二維數據問題73
4.2.2C++提供的一維數組或二維數組存儲二維數據74
4.3字元串及其C++實現77
4.3.1字元串問題77
4.3.2用C++提供的一維數組存儲字元串78
4.4多個字元串的處理79
4.4.1多個字元串問題79
4.4.2用C++提供的二維數組存儲來多個字元串80
4.5多屬性數據及其C++實現81
4.5.1多屬性數據問題81
4.5.2用C++提供的結構體存儲多屬性數據81
4.6一組多屬性數據的處理84
4.6.1一組多屬性數據的問題84
4.6.2使用結構體數組對一組多屬性數據進行存儲和處理84
4.7C++中的枚舉數據類型85
4.7.1枚舉類型的定義85
4.7.2枚舉變數的定義86
4.7.3枚舉變數的使用86
4.8數組的套用——選擇排序87
4.8.1選擇排序算法87
4.8.2用C++實現選擇排序算法88
第5章模組化90
5.1模組化及其C++實現90
5.1.1採用模組化思想處理問題91
5.1.2用C++實現結構化程式設計91
5.1.3函式的調用機制及內聯函式94
5.1.4調用庫函式95
5.2遞歸算法及其C++實現95
5.2.1遞歸算法95
5.2.2遞歸算法實例96
5.3默認形參值98
5.3.1指定默認形參值的位置98
5.3.2默認形參值的指定順序99
5.4函式重載99
5.5編譯預處理101
5.5.1檔案包含101
5.5.2宏定義102
5.5.3條件編譯103
5.6多檔案結構105
5.6.1頭檔案105
5.6.2源檔案106
5.6.3多檔案結構程式實例106
5.6.4避免頭檔案被重複包含108
5.7變數和函式的作用域與生存期109
5.7.1全局變數的作用域與生存期109
5.7.2局部變數的作用域與生存期110
5.7.3函式的作用域112
5.8模組化套用實例——二分查找法114
5.8.1二分查找法114
5.8.2二分查找法套用實例115
第6章數據存儲117
6.1數據存儲的基本原理117
6.2地址與C++中的指針118
6.2.1指針變數的定義119
6.2.2指針變數的初始化119
6.2.3使用指針訪問記憶體中的數據120
6.3指針與數組123
6.3.1數組在記憶體中的存儲方式123
6.3.2使用指針運算元組124
6.3.3數組名與指針變數的區別125
6.3.4指向行的指針變數126
6.4指針與字元串127
6.5動態使用記憶體空間129
6.6二級指針133
6.7指針與函式134
6.7.1指針作為函式參數134
6.7.2指針作為函式返回值140
6.8引用與函式141
6.8.1引用的概念和聲明141
6.8.2函式的傳值調用142
6.8.3函式的引用調用143
6.8.4返回引用的函式144
第7章面向對象方法146
7.1面向對象方法的基本概念147
7.2C++中的類和對象150
7.2.1類的定義150
7.2.2構造函式152
7.2.3對象的定義和對象的訪問153
7.3類成員的訪問控制156
7.4析構函式158
7.5拷貝構造函式160
7.6類聲明與實現的分離162
7.7類的靜態成員164
7.7.1靜態數據成員164
7.7.2靜態成員函式166
7.8類的常量成員168
7.8.1常量數據成員168
7.8.2常量成員函式168
7.9this指針169
7.10類的友元170
7.11類的對象成員174
7.12自定義類的運算符重載177
7.12.1類成員函式形式的運算符重載177
7.12.2類友元形式的運算符重載179
第8章繼承與多態184
8.1繼承184
8.1.1繼承概述184
8.1.2派生類的定義185
8.1.3訪問控制方式和派生類的繼承方式187
8.1.4成員函式重定義189
8.1.5派生類的構造函式和析構函式190
8.1.6多繼承192
8.2多態199
8.2.1類型兼容和多態性的概念199
8.2.2多態性的實現202
8.3抽象類204
8.3.1抽象類的作用204
8.3.2抽象類的實現205
第9章輸入輸出流207
9.1輸入輸出流概述207
9.2cout和cin對象以及插入和提取運算符208
9.2.1標準流對象208
9.2.2>>和<<運算符與標準輸入輸出208
9.3使用成員函式進行標準輸出和輸入210
9.3.1使用put()函式進行標準輸出210
9.3.2使用get()函式進行標準輸入210
9.3.3getline()函式進行標準輸入212
9.4檔案流對象以及插入和提取運算符213
9.4.1檔案流對象213
9.4.2<<和>>運算符與檔案輸入輸出216
9.5使用成員函式進行檔案的輸出和輸入217
9.5.1使用put()函式進行文本檔案輸出217
9.5.2使用get()函式進行文本檔案輸入218
9.5.3使用getline()函式進行文本檔案輸入218
9.6按數據塊進行輸出和輸入220
9.6.1使用write()函式按數據塊進行輸出220
9.6.2使用read()函式按數據塊進行輸入221
9.7檔案的隨機讀寫225
9.8自定義數據類型的輸入輸出227
第10章模板231
10.1函式模板231
10.1.1函式模板的定義232
10.1.2函式模板的使用232
10.2類模板234
10.2.1類模板的定義235
10.2.2類模板的使用236
10.2.3類模板的靜態成員和友元238
第11章數據結構和算法的基本概念240
11.1數據結構的基本概念24011.1.1基本術語241
11.1.2數據的邏輯結構242
11.1.3數據的存儲結構244
11.1.4數據的操作245
11.2抽象數據類型246
11.3算法設計與算法分析基礎248
11.3.1算法的基本概念248
11.3.2算法分析249
11.3.3算法分析實例254
11.4算法設計基本方法與策略基礎256
11.4.1算法設計的方法256
11.4.2算法設計策略260
第12章線性表269
12.1線性表及其抽象數據類型269
12.1.1線性表的基本概念270
12.1.2線性表的抽象數據類型270
12.2線性表的順序存儲結構及其實現271
12.2.1線性表的順序表示271
12.2.2順序表的實現273
12.2.3順序表代碼復用實例277
12.3線性表的鏈式表示方法及實現281
12.3.1鏈式存儲結構281
12.3.2單向鍊表及其基本操作281
12.3.3單向鍊表代碼復用實例288
12.3.4線性表的順序存儲與鏈式存儲的比較291
12.3.5循環鍊表及其基本操作292
12.3.6雙向鍊表及其基本操作294
第13章棧和佇列297
13.1棧的基本概念297
13.1.1棧的基本概念297
13.1.2棧的抽象數據類型298
13.2棧的表示及實現299
13.2.1棧的順序表示及實現299
13.2.2順序棧代碼復用實例303
13.2.3棧的鏈式表示及實現304
13.3佇列的基本概念307
13.3.1佇列的基本概念307
13.3.2佇列的抽象數據類型308
13.4佇列的表示及實現308
13.4.1佇列的順序表示及實現309
13.4.2循環佇列代碼復用實例313
13.4.3佇列的鏈式表示及實現315
第14章樹和二叉樹319
14.1樹的基本概念319
14.1.1樹的定義321
14.1.2樹的表示形式321
14.1.3樹的基本術語322
14.2二叉樹及其基本性質324
14.2.1二叉樹的定義324
14.2.2二叉樹的基本性質325
14.3二叉樹的抽象數據類型和表示方式327
14.3.1二叉樹的順序表示及實現328
14.3.2二叉樹的鏈式表示及實現333
14.4二叉樹的遍歷及常用操作339
14.4.1二叉樹的遍歷及其實現339
14.4.2二叉樹其他常用操作的實現345
14.5二叉排序樹350
14.5.1二叉排序樹的定義350
14.5.2二叉排序樹的生成350
14.5.3二叉排序樹的查找353
14.6二叉樹排序樹套用示例355
14.7哈夫曼樹和哈夫曼碼356
14.7.1基本術語356
14.7.2哈夫曼樹及其構造方法357
14.7.3哈夫曼碼及其編解碼方法358
第15章圖360
15.1圖的基本概念及特性360
15.2圖的抽象數據類型和表示方式364
15.2.1圖的抽象數據類型364
15.2.2圖的表示法365
15.2.3圖的鄰接矩陣表示法的實現367
15.3圖的遍歷370
15.3.1廣度優先遍歷及其實現371
15.3.2深度優先遍歷及其實現373
15.4套用實例376
15.4.1圖的套用376
15.4.2用圖來描述和求解實際問題377
第16章算法設計策略及套用實例380
16.1分治策略380
16.1.1分治策略概述380
16.1.2分治策略的算法設計步驟和程式模式381
16.1.3分治策略套用實例382
16.2貪心策略385
16.2.1最最佳化問題與最最佳化原理385
16.2.2貪心策略概述385
16.2.3貪心策略的算法設計步驟及程式模式386
16.2.4貪心策略套用實例387
16.3動態規劃策略389
16.3.1動態規劃策略概述390
16.3.2動態規劃策略的相關概念392
16.3.3動態規劃策略算法設計步驟及程式模式394
16.3.4動態規劃策略套用實例395
16.4回溯策略398
16.4.1回溯策略概述398
16.4.2回溯策略算法設計步驟及程式模式399
16.4.3回溯策略套用實例400
16.5分支限界策略401
16.5.1堆401
16.5.2分支限界策略概述404
16.5.3分支限界策略算法設計步驟及程式模式405
16.5.4分支限界策略套用實例405
(註:目錄排版順序為從左列至右列

教學資源

該教材還是學堂線上的“程式設計基礎(上)”和“程式設計基礎(下)”MOOC課程使用的教材,同時還配套了《程式設計基礎——上機實習及習題》。
書名書號出版社作者
《程式設計基礎——上機實習及習題集》
9787302532033
清華大學出版社
王愷、趙宏

教材特色

該教材中除了講解計算的基本概念、方法,還給出了完整的實現代碼。幾乎每一章都給出了拓展學習的內容。該教材通過對一些精選問題求解思路和方法的分析,以及針對初學者容易出現錯誤和困惑的地方提供了的提示,幫助讀者更好地理解使用計算機解決問題的基本原理和方法、提高他們的計算思維能力、使他們初步具備使用C++程式設計語言解決實際問題的能力。

作者簡介

趙宏,博士後,南開大學計算機學院副教授、碩士生導師、公總計算機基礎教學部主任。長期從事公總計算機基礎課程的教學和科學研究工作。主講南開大學《計算機基礎(理)》《數據結構與算法》等公總計算機基礎課程。
王愷,男,1979年生人,南開大學計算機套用技術專業博士。於2006年留校,任南開大學信息學院教師、副教授。研究方向為圖像、視頻中的智慧型信息檢索、最佳化問題建模和求解算法。主講南開大學《計算機基礎(理)》《數據結構與算法》等公總計算機基礎課程。

相關詞條

熱門詞條

聯絡我們