《問題求解與程式設計》是由鮑春波、林芳、謝麗聰編著,2015年清華大學出版社出版的計算機系列教材。該教材可作為高等院校計算機相關專業C/C++結構化程式設計課程的教材,也可以供非專業的C語言程式設計等級考試和程式設計愛好者選用。
全書共有10章。主要內容包括計算機與程式設計、數據類型與變數——程式設計入門、判斷與決策——選擇程式設計、重複與疊代——循環程式設計、分而治之——模組化程式設計、批量數據處理——數組程式設計、記憶體單元的地址——指針程式設計、客觀對象的描述——結構程式設計、數據的永久存儲——檔案程式設計、位運算——低級程式設計。
基本介紹
- 書名:問題求解與程式設計
- 作者:鮑春波、林芳、謝麗聰
- ISBN:9787302402657
- 類別:計算機系列教材
- 頁數:409頁
- 出版社:清華大學出版社
- 出版時間:2015年9月1日
- 裝幀:平裝
- 開本:16開
- 字數:千671字
- CIP核字號:2015106467
成書過程
修訂過程
出版工作
責任編輯 | 封面設計 | 責任校對 | 責任印製 |
---|---|---|---|
袁勤勇、李曄 | 常雪影 | 梁毅 | 沈露 |
內容簡介
教材目錄
第1章計算機與程式設計/1 1.1什麼是計算機/1 1.2如何存儲程式/4 1.2.1存儲單位/4 1.2.2存儲方式/4 1.2.3存取操作/5 1.2.4存儲器分類/5 1.2.5檔案與目錄/5 1.3軟體與程式設計/7 1.4典型程式演示/9 1.5程式設計方法/10 1.5.1結構化方法/10 1.5.2面向對象方法/11 1.6程式設計語言/11 1.7C/C++語言簡介/14 1.8C/C++結構化程式設計基本環境/16 小結/18 概念理解/18 基本功訓練/19 第2章數據類型與變數——程式設計入門/20 2.1在螢幕上輸出文字信息/20 2.1.1C語言程式的基本框架/21 2.1.2注釋/22 2.1.3預處理指令/22 2.1.4主函式——應用程式的入口/23 2.1.5轉義序列/23 2.1.6保留字與分隔設定/24 2.1.7標準輸出函式/24 2.2計算兩個固定整數的和與積/25 2.2.1輸出列表和占位符/27 2.2.2數據類型——整型/28 2.2.3常量與變數/29 2.2.4算術運算和算術表達式/31 2.2.5賦值語句/31 2.2.6程式設計的風格/32 2.3計算任意兩個整數的和與積/33 2.3.1標準輸入函式/34 2.3.2測試用例/35 2.3.3程式的順序結構/36 2.4溫度轉換/37 2.4.1變數的初始化/39 2.4.2運算的優先權和結合性/41 2.5求兩個整數的平均值/42 2.5.1浮點型數據/44 2.5.2浮點型數據的輸入與輸出/46 2.5.3浮點型數據的捨入誤差和溢出問題/48 2.5.4不同類型之間的轉換/50 2.6計算圓的周長和面積/51 2.6.1符號常量/52 2.6.2帶參數的宏/53 小結/54 概念理解/54 常見錯誤/55 線上評測/56 項目設計/58 第3章判斷與決策——選擇程式設計/60 3.1讓成績合格的學生通過/60 3.1.1關係運算與邏輯判斷/61 3.1.2邏輯常量與邏輯變數/63 3.1.3單分支選擇結構/64 3.1.4特殊形式的判斷條件/66 3.1.5比較兩個實數的大小/67 3.1.6複合語句/69 3.2按成績把學生分成兩組/70 3.2.1雙分支選擇結構/73 3.2.2條件運算/74 3.3按成績把學生分成多組(百分制)/75 3.3.1嵌套的if結構/81 3.3.2嵌套的ifelse結構/82 3.3.3多分支選擇結構/86 3.4按成績把學生分成多組(五級制)/87 3.4.1字元常量和變數/90 3.4.2字元型變數的輸入與輸出/91 3.5判斷閏年問題/93 3.5.1邏輯運算/94 3.5.2邏輯運算的優先權和短路性/95 小結/96 概念理解/97 常見錯誤/97 線上評測/98 項目設計/100 第4章重複與疊代——循環程式設計/101 4.1列印規則圖形/101 4.1.1計數控制的while循環/103 4.1.2自增、自減運算/104 4.2自然數求和/105 4.2.1疊代與賦值/107 4.2.2更多的賦值運算/109 4.2.3for循環/109 4.3簡單的學生成績統計/115 4.3.1標記控制的while循環/117 4.3.2程式的容錯能力/118 4.3.3程式調試與測試/119 4.3.4輸入輸出重定向/119 4.3.5dowhile循環/121 4.4計算2的算術平方根/123 4.4.1誤差精度控制的while循環/125 4.4.2const常量/126 4.5列印九九乘法表/127 4.5.1多重循環嵌套 /128 4.5.2窮舉法/131 4.6判斷一個數是否是素數/132 4.6.1break /continue/135 4.6.2goto語句/138 4.7隨機遊戲模擬/140 4.7.1隨機數的生成/141 4.7.2自頂向下、逐步求精/144 4.7.3遊戲程式的基本結構/145 4.8結構化程式設計/145 小結/146 概念理解/147 常見錯誤/147 線上評測/148 項目設計/151 第5章分而治之——模組化程式設計/152 5.1再次討論猜數遊戲模擬問題/152 5.1.1模組化思想/155 5.1.2函式定義/156 5.1.3函式調用/160 5.1.4函式原型/165 5.1.5函式測試/166 5.2是非判斷問題求解/166 5.2.1判斷函式/166 5.2.2變數的存儲類別與作用域/168 5.2.3函式調用堆疊/175 5.3遞歸問題求解/177 5.3.1問題的遞歸描述/178 5.3.2遞歸函式/178 5.4用計算機繪圖/182 5.4.1接口設計/186 5.4.2接口實現/188 5.4.3全局變數/189 5.4.4私有函式/191 5.4.5建立自己的庫/192 5.5學生成績管理——大規模問題求解/193 | 5.5.1程式檔案模組/196 5.5.2構建多檔案應用程式/196 小結/198 概念理解/198 常見錯誤/199 線上評測/199 項目設計/202 第6章批量數據處理——數組程式設計/203 6.1一組數據排序問題/203 6.1.1什麼是一維數組/205 6.1.2一維數組的聲明/206 6.1.3一維數組的引用/207 6.1.4一維數組初始化/209 6.1.5讓下標從1開始/209 6.1.6交換排序/210 6.1.7一維數組作為函式的參數/212 6.2三門課程成績按總分排序問題/215 6.2.1二維數組/218 6.2.2選擇排序/220 6.2.3二維數組作為函式的參數/221 6.3在成績單中查找某人的成績/222 6.3.1字元數組與字元串/226 6.3.2字元串的輸入與輸出/227 6.3.3字元串的基本操作/229 6.3.4標準庫中的字元及字元串函式/230 6.3.5字元串數組/234 6.3.6線性查找/235 6.3.7折半查找/236 6.4大整數加法/237 6.4.1邏輯右對齊相加法/240 6.4.2逆置左對齊相加法/241 小結/242 概念理解/243 常見錯誤/244 線上評測/244 項目設計/247 第7章記憶體單元的地址——指針程式設計/250 7.1用函式交換兩個變數的值/251 7.1.1指針變數的聲明和初始化/254 7.1.2指針變數的引用/255 7.1.3指針作為函式的參數/256 7.2再次討論批量數據處理問題/259 7.2.1指向一維數組的指針和指針運算/261 7.2.2用指針訪問一維數組的元素/263 7.2.3用const修飾指針/267 7.3二維批量數據處理問題的指針版/267 7.3.1二維數組名與行列地址/270 7.3.2用指針訪問二維數組的元素/271 7.3.3指針的指針/274 7.4通用函式問題/275 7.4.1指向函式的指針/277 7.4.2指向函式的指針作為函式的參數/278 7.5再次討論字元串/279 7.5.1字元指針與字元數組/282 7.5.2字元型指針數組/284 7.5.3用字元指針進行字元串排序/286 7.6程式運行時提供必要的參數/286 7.6.1命令行參數/288 7.6.2集成環境下設定應用程式參數/289 7.7數據規模未知的問題求解/289 7.7.1void類型的指針/293 7.7.2動態分配記憶體/294 7.7.3動態申請字元串/295 7.7.4動態申請一維數組/296 7.7.5動態申請二維數組/296 7.7.6讓指針指向被調用函式中動態 申請的記憶體/300 7.7.7C++中的引用/303 小結/304 概念理解/305 常見錯誤/306 線上評測/307 項目設計/310 第8章客觀對象的描述——結構程式設計/312 8.1基於對象數組的學生成績管理問題/312 8.1.1結構類型/316 8.1.2結構變數的聲明及使用/317 8.1.3typedef/319 8.1.4指向結構的指針/321 8.1.5結構變數的記憶體映像/324 8.1.6結構類型定義的嵌套/325 8.1.7結構數組和指向結構數組的指針/325 8.1.8結構作為函式的參數或返回值/327 8.1.9抽象數據類型/328 8.2基於對象鍊表的學生成績管理系統/329 8.2.1自引用結構與鍊表/334 8.2.2靜態鍊表和動態鍊表/336 8.2.3返回鍊表的頭指針/340 8.2.4學生對象鍊表/341 8.3志願者管理問題/341 8.3.1聯合/343 8.3.2志願者信息存儲/345 8.4洗牌和發牌模擬問題/345 小結/351 概念理解/351 常見錯誤/352 線上評測/352 項目設計/356 第9章數據的永久存儲——檔案程式設計/357 9.1給一個源程式檔案做備份/357 9.1.1檔案與目錄/360 9.1.2檔案格式/361 9.1.3檔案操作的一般步驟/361 9.1.4字元讀寫/363 9.1.5字元串讀寫(無格式的行讀寫)/364 9.2把數據保存到檔案中/365 9.2.1格式化讀寫/370 9.2.2二進制塊數據讀寫/372 小結/378 概念理解/378 常見錯誤/379 線上評測/379 項目設計/382 第10章位運算——低級程式設計/383 10.1網路IP位址的表示/383 10.1.1按位左移或右移/385 10.1.2按位取反/387 10.1.3按位與/387 10.2加密解密問題/389 10.2.1按位或/390 10.2.2按位異或/391 10.3一個圖形類型最佳化問題/391 小結/396 概念理解/396 常見錯誤/396 線上評測/397 項目設計/398 附錄AC語言的關鍵字/401 附錄BASCII碼/402 附錄CC運算符的優先權與結合性/403 附錄DC++版的HelloWorld!/405 D.1C++的頭檔案/405 D.2命名空間/406 D.3C++的輸入和輸出/407 參考文獻/409 |
教學資源
- 配套教材
書名 | 書號 | 出版社 | 出版時間 | 作者 |
---|---|---|---|---|
《問題求解與程式設計習題解答和實驗指導》 | 9787302402664 | 清華大學出版社 | 2015.09.01 | 鮑春波、林芳、謝麗聰 |
- 課程資源
教材特色
- 以問題求解為核心:該教材組織了40幾個實際案例問題,每個章節都圍繞解決某個或某類案例問題而展開,把各種語法現象和編程技巧與規範融入到解決這個問題的具體過程中,在解決問題的過程中學習程式設計的方法,訓練程式設計的功夫;對於每個案例,經過分析、設計之後,給出程式實現清單;
- 融入軟體工程的思想:對於每個案例問題,首先按照問題描述和輸入輸出格式的要求進行全面分析,明確要做什麼,考慮各種可能的情況;對每一情況都給出具體的算法設計方案(偽碼或流程圖)、對應的代碼實現(程式清單),其次對程式或算法用一組測試用例進行運行測試(這個運行測試是實時演示,教材中省略);不管案例問題是大還是小,都嚴格按照這樣的過程展開,進行強化訓練;
- 遵循循序漸進的原則:該教材採用循序漸進的原則,螺旋式展開,在問題求解需要的時候才介紹語法規範和注意事項;
- 程式設計線上評測:該教材提供線上評測平台;首先,由於每道線上評測的題目都設計了一組測試用例,學生要完成它,必須嚴格按照輸入輸出樣例的格式要求,設計問題的求解算法;在設計過程中必須考慮各種可能的情況,不然就會導致部分測試用例不能通過;其次,由於是線上評測,學生提交作業之後會立即得到評測結果;最後,線上評測與傳統的作業完成方式相比更能訓練學生的動手操作能力、問題求解能力;該教材從第2章起,每章都設計了10餘道線上評測題目,全書總計包括100多道線上評測題目;
- 項目設計:從第2章起,每章最後都至少給出了一個項目設計題目;
- 開源軟體:該教材使用的軟體均為開源軟體,包括moodle平台、gcc編譯器、gdb調試器、grx圖形庫及CodeBlocks集成開發環境;
- 該教材對部分內容加強了討論:該教材的內容包括一般高級語言程式設計教材的全部內容,此外還討論了大整數處理問題、函式接口的設計與實現、建立自己的庫、使用函式獲得動態申請的記憶體、用指針訪問二維數組元素的各種方法、位運算的套用、gcc編譯器支持的C語言圖形程式設計、專業編輯器vim的使用、命令行環境等問題,一般的教科書很少涉及這些問題;
- 例題經過編譯測試:該教材的所有例題的C語言源程式都已經過gcc編譯器編譯測試,因此完全符合C99標準;事實上,所有的源程式都可以直接作為C++源程式,用gcc或g++編譯器編譯運行。該教材代碼對源程式進行了刪減,刪除了原始碼檔案中出於方便閱讀目的而添加的空行,左大括弧調到了上一行的末尾,故現在所列代碼行號有跳躍。