複製鏈接
請複製以下鏈接發送給好友

程序設計基礎

(2019年清華大學出版社出版的圖書)

鎖定
《程序設計基礎》是由趙宏主編,2019年清華大學出版社出版的高等學校計算機基礎教育教材。 [1]  該教材適合高等院校理工類、特別是新工科學生使用,也適合結合MOOC課程自主學習的讀者使用。 [2] 
全書共分3部分:結構化程序設計方法,面向對象程序設計方法,數據結構和算法。 [2] 
中文名
程序設計基礎
作    者
趙宏
王愷
類    別
高等學校計算機基礎教育教材
出版社
清華大學出版社
出版時間
2019年9月1日
開    本
16 開
裝    幀
平裝
ISBN
9787302532156

程序設計基礎成書過程

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

程序設計基礎內容簡介

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

程序設計基礎教材目錄

第1章如何讓計算機進行計算1
1.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>>和
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數據結構的基本概念240
11.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
(注:目錄排版順序為從左列至右列 [4] 

程序設計基礎教學資源

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

程序設計基礎教材特色

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

程序設計基礎作者簡介

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