《程式設計基礎》是由趙宏主編,2019年清華大學出版社出版的高等學校計算機基礎教育教材。該教材適合高等院校理工類、特別是新工科學生使用,也適合結合MOOC課程自主學習的讀者使用。
全書共分3部分:結構化程式設計方法,面向對象程式設計方法,數據結構和算法。
基本介紹
- 書名:程式設計基礎
- 作者:趙宏、王愷
- ISBN:9787302532156
- 類別:高等學校計算機基礎教育教材
- 出版社:清華大學出版社
- 出版時間:2019年9月1日
- 裝幀:平裝
- 開本:16開
成書過程
內容簡介
- 《程式設計基礎》 前言、第1-6章為結構化程式設計方法。
- 第1章如何讓計算機進行計算。首先介紹計算思維和程式流程圖的基本畫法;然後介紹程式設計的基本概念、步驟和方法;最後介紹C++源程式的基本結構和組成元素以及Visualstudio2010集成開發環境;
- 第2章計算機如何表示與處理數據。首先介紹二進制數及幾種基本數據類型的二進制數據表示方法,包括不同數制數據之間的轉換方法,整數、實數、字元和邏輯型數據的二進制表示方法等;然後介紹如何通過C++語言實現這些基本數據類型在計算機中的存儲,以及如何對這些基本數據類型的數據進行處理的方法;
- 第3章選擇與疊代算法。介紹處理問題時的選擇算法和疊代算法,以及如何使用C++語言實現選擇和疊代算法;
- 第4章結構化數據的處理。介紹多記錄數據和多屬性數據的存儲方法,以及如何使用C++語言實現這些數據的存儲和處理;
- 第5章模組化。介紹模組化的思想,以及如何使用C++語言編寫模組化程式;
- 第6章數據存儲。重點介紹計算機中數據存儲的基本原理,以及如何使用C++語言編寫程式去操作記憶體中的數據。
- 第7~10章為面向對象程式設計方法
- 第7章面向對象方法。介紹面向對象方法的基本概念,以及用C++語言實現面向對象程式設計的基本方法;
- 第8章繼承與多態。介紹如何使用C++語言來實現面向對象程式設計的兩個重要特性——繼承和多態;
- 第9章輸入輸出流。介紹標準輸入輸出的基本方法,即輸入輸出流和檔案輸入輸出流兩方面的內容;
- 第10章模板。介紹模板的基本概念,以及C++中函式模板和類模板的定義及使用方法等。
- 第11~16章為基本的數據結構和算法
- 第11章數據結構與算法的基本概念。首先介紹數據結構的基本術語、抽象數據類型、數據結構的存儲結構和邏輯結構,然後介紹算法的基本概念和算法分析方法,最後介紹算法設計基本方法與常用的算法設計策略;
- 第12章線性表。介紹線性表的邏輯結構,並給出線性表的抽象數據類型;還介紹線性表的順序存儲和鏈式存儲的表示和實現方法等;
- 第13章棧和佇列。介紹棧的邏輯結構和抽象數據類型,並分別給出棧的順序存儲和鏈式存儲的表示和實現方法;介紹佇列的邏輯結構和抽象數據類型,並分別給出佇列的順序存儲和鏈式存儲的表示及實現方法等;
- 第14章樹和二叉樹。介紹樹的基本概念、二叉樹的基本特性;二叉樹的順序表示、鏈式表示,二叉樹的遍歷和其他常用操作及其實現方法;哈夫曼樹和哈夫曼碼等;
- 第15章圖。介紹圖的基本概念;圖在計算機中常用的3種表示方法、圖的遍歷方法及其實現方法;結合具體套用問題,講解最小生成樹和最短路徑的問題等;
- 第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 |
教學資源
書名 | 書號 | 出版社 | 作者 |
---|---|---|---|
《程式設計基礎——上機實習及習題集》 | 9787302532033 | 清華大學出版社 | 王愷、趙宏 |