編輯推薦
1. 強調轉變觀念,以學生為中心,安排教學*先考慮培養目標、學生的認知規律和學習特點。 2. 強化實踐,讓學生在理論指導下動手動腦,更多地上機編程,鼓勵和引導探索式的學習;以任務驅動方式,通過示例講授程序設計的基本概念和方法。 3. 重點放在思路、算法、編程構思和程序實現上,訓練學生分析問題和解決問題的能力;注重培養學生良好的編程習慣。
內容簡介
《程序設計基礎(第4版)》以程序設計的分析問題和解決問題為重點,講授在C/C++ 語言環境下程序設計的解題思路、算法設計和程序實現,可幫助讀者提高編程能力和上機解題能力。全書語言簡潔,示例豐富,深入淺齣地引導讀者理性思維和理性實踐,章節結構安排閤理,教學方法引人入勝,便於讀者自學。�� 本書可作為高等院校計算機相關專業程序設計課程的教材,亦可供從事計算機、自動化及其他相關領域的科研技術人員參考。
內頁插圖
目錄
第1章 緒論 1
第2章 編程準備 4
2.1 程序編寫 4
2.1.1 用Visual C++ 6.0編寫程序 4
2.1.2 使用Dev-C++開發程序 8
2.2 程序代碼及說明 14
2.3 輸齣流對象cout 15
2.4 程序注釋 16
2.5 算術運算符 16
2.6 數學函數 17
2.7 小結 17
習題 17
第3章 代數思維與計算機解題 19
3.1 程序的基本結構 19
3.2 變量與數據類型 21
3.2.1 變量的基本概念 21
3.2.2 數據類型與變量的地址空間 22
3.3 定義變量和賦初值 22
3.4 變量賦值 23
3.4.1 賦值符號與賦值錶達式 23
3.4.2 變量賦值的5要素 24
3.5 指針變量 25
3.5.1 指針定義與初始化 25
3.5.2 指針賦值 26
3.5.3 在賦值語句中使用間接訪問運算符 26
3.6 小結 27
習題 28
第4章 邏輯思維與計算機解題 29
4.1 關係運算和關係錶達式 30
4.1.1 關係運算符 30
4.1.2 關係錶達式的一般格式 30
4.1.3 將“是”“否”寫成關係錶達式 30
4.2 枚舉法的思路 31
4.3 循環結構 33
4.3.1 使用循環結構的部分程序 33
4.3.2 for語句的格式和執行過程 33
4.3.3 使用for循環解題實例 34
4.3.4 for循環的程序框圖 36
4.4 分支結構 36
4.4.1 if語句的格式 37
4.4.2 分支結構的實例 38
4.5 任務4.1的程序框圖 39
4.6 任務4.1的參考程序 40
4.7 邏輯問題及其解法 41
4.7.1 邏輯運算符與邏輯錶達式 42
4.7.2 邏輯問題的解題思路 43
4.7.3 任務4.2的參考程序 47
4.8 小結 48
課後閱讀材料 48
習題 53
第5章 函數思維與模塊化設計 55
5.1 函數 55
5.1.1 函數的說明 56
5.1.2 函數的定義 56
5.1.3 函數的返迴值 56
5.1.4 函數的調用 57
5.1.5 形式參數和實在參數 57
5.1.6 調用和返迴 58
5.1.7 帶自定義函數的程序設計 58
5.2 編程實例1 60
5.3 編程實例2 61
5.4 幾種參數傳遞方式的比較 63
5.5 小結 66
習題 66
第6章 數據的組織與處理(1)--數組 69
6.1 數組 69
6.1.1 一維數組的定義 71
6.1.2 數組初始化 71
6.1.3 字符數組的定義、初始化和賦值 72
6.1.4 數組與指針 75
6.2 篩法 77
6.3 綫性查找與摺半查找 78
6.4 冒泡排序法 80
6.5 遞推 82
6.5.1 遞推數列的定義 82
6.5.2 遞推算法的程序實現 83
6.6 字符數組應用 86
6.7 函數跳轉錶 91
6.8 二維數組 93
6.8.1 二維數組的定義 94
6.8.2 二維數組的初始化 95
6.8.3 二維數組中的元素存放順序 95
6.9 小結 97
課後閱讀材料 98
習題 102
第7章 數據的組織與處理(2)--結構 105
7.1 結構與結構數組 105
7.1.1 結構體類型的定義 105
7.1.2 結構體變量的定義和引用 106
7.1.3 結構體變量的初始化 107
7.1.4 結構數組 108
7.2 指針和結構 110
7.3 鏈錶 111
7.3.1 建立鏈錶的過程 112
7.3.2 鏈錶結點的插入與刪除 116
7.3.3 循環鏈錶 124
7.4 小結 128
習題 128
第8章 數據的組織與處理(3)--文件 130
8.1 將數據保存到文件 130
8.2 從文件中讀取數據 132
8.3 利用輸入輸齣文件解交互類型的題 135
8.4 小結 145
習題 145
第9章 遞歸思想與相應算法 146
9.1 遞歸及其實現 146
9.2 遞歸算法舉例 153
9.2.1 計算組閤數 153
9.2.2 快速排序 154
9.2.3 數字鏇轉方陣 158
9.2.4 下樓問題 162
9.2.5 跳馬問題 164
9.2.6 分書問題 166
9.2.7 八皇後問題 169
9.2.8 青蛙過河 172
9.3 小結 177
課外閱讀材料 177
習題 181
第10章 多步決策問題 182
10.1 多步決策問題的解題思路 182
10.1.1 人鬼渡河的任務與規則要點 182
10.1.2 人鬼渡河的安全性考慮 183
10.1.3 安全狀態的描述 183
10.2 安全條件形式化 184
10.3 從狀態圖上研究怎樣一步一步過河 186
10.4 多步決策問題的編程思路 186
10.5 小結 189
習題 189
第11章 寬度優先搜索 191
11.1 騎士聚會問題 191
11.2 解題思路 196
11.3 小結 202
習題 203
第12章 深度優先搜索 204
12.1 問題描述 204
12.2 解題思路 205
12.3 深度優先搜索與剪枝 211
12.4 小結 216
習題 216
第13章 貪心法 217
13.1 貪心法解題的一般步驟 217
13.1.1 裝船問題 217
13.1.2 事件序列問題 220
13.1.3 貪心法解題的一般步驟 222
13.2 貪心法相關理論 223
13.2.1 多階段決策問題、無後嚮性與*優化原理 223
13.2.2 有嚮圖*短路徑的Dijkstra算法 223
13.2.3 貪心法解題的注意事項 227
13.3 小結 228
習題 228
第14章 動態規劃 230
14.1 *短路徑問題 230
14.1.1 問題描述 230
14.1.2 分析與題解 231
14.2 動態規劃的基本概念 234
14.3 動態規劃思想 235
14.4 舉例說明動態規劃思路 237
14.5 小結 244
習題 244
第15章 濛特卡羅法 246
15.1 僞隨機數的産生 246
15.1.1 産生隨機整數 246
15.1.2 産生隨機小數 247
15.2 僞隨機數的應用 248
15.2.1 求π的近似值 248
15.2.2 計算圖形麵積 249
15.3 小結 250
習題 250
附錄A 程序調試 251
A.1 計分程序的調試 251
A.1.1 編譯時的調試 252
A.1.2 運行時的調試 254
A.1.3 其他調試相關知識 259
A.2 跳馬程序的調試 260
附錄B 庫函數 267
B.1 數學函數 267
B.2 字符判斷函數 268
B.3 字符串相關函數 271
附錄C ASCII碼錶 277
附錄D 輸入輸齣的格式控製 278
D.1 流的概念與輸入輸齣格式 278
D.2 改變整數的進製 278
D.3 設置浮點數的精度 279
D.4 設置輸入輸齣寬度 280
D.5 設置對齊方式和填充字符 281
D.6 其他設置 282
參考文獻 284
精彩書摘
第5章 函數思維與模塊化設計 教學目標 * 函數的概念、定義、調用和返迴 * 帶自定義函數的程序設計 內容要點 * 函數的定義 * 實在參數與形式參數 * 調用和返迴值 函數是組成C++程序的基礎。C++庫中已經為用戶提供瞭許多標準庫函數,例如在第2章中已經介紹過的數學函數。編程者可以根據自己的需要,選用閤適的庫函數;如果不存在所需要的函數,還可以自己定義和編寫一些函數。 5.1 函??數 【任務5.1】 從鍵盤輸入一個正整數a,編寫一個程序判斷a是否為質數。 可以設計一個函數bool checkPrime(int a),讓該函數負責檢查a是否為質數:如果是,該函數返迴true,否則返迴false。 參考程序如下: #include #include using namespace std; bool checkPrime(int); //函數聲明在前 int main() { int a; cout << "請輸入一個正整數a" << endl; //提示信息 cin >> a; //輸入整數a if (checkPrime(a)) //在if語句中調用checkPrime函數 cout << a << "是質數" << endl; else cout << a << "不是質數" << endl; return 0; } bool checkPrime(int af) //bool是布爾類型,af是a的形參 { for (int i = 2; i <= sqrt(af); i = i + 1) { if (af % i == 0 ) //af 可被某個數整除,返迴false return false; } return true; //否則返迴true,為質數 } 下麵結閤任務5.1來講函數的定義和使用。 5.1.1 函數的說明 在全局上自定義函數應該在主函數之前有一個說明,目的是告訴係統在主函數中要用到一個自定義的函數,被主函數直接調用或間接調用。說明的時候就要寫清楚這個函數的數據類型是什麼,自變量有幾個,都是什麼數據類型的。結閤任務5.1來看說明語句 bool checkPrime(int); 此語句是說自變量隻有一個,是整數型的,函數的數值是布爾類型的,true或false。函數的取值在這裏稱為函數的返迴值。true為“真”,false為“假”。 5.1.2 函數的定義 函數定義的格式為 函數返迴值的類型名 函數名(類型名 形式參數1, 類型名 形式參數2, …) { //函數體 說明部分 語句部分 } 任務5.1中的函數名是checkPrime,形式參數名為af,是定義成整數型的。這裏隻定義瞭一個形式參數。函數返迴值類型名是bool,錶明它隻有true或false兩種可能的函數值。用大括號括起的部分是函數體。同主函數一樣,函數體也有兩大部分,先是說明部分,後是執行部分。本例中執行部分有兩條語句,一條是for循環語句,另一條是return語句(函數的返迴語句在5.1.3節細講)。在for語句的循環體中隻含一條if語句。 5.1.3 函數的返迴值 函數一般是由主函數調用(當然也有函數調用函數的情況),調用函數的目的是讓它計算某一個函數值,這個值通過return語句返迴給調用它的函數。格式是 return 錶達式; 或 return (錶達式); 錶達式的值就是函數的取值,其數據類型要與定義函數時的說明相一緻。 有時被調用的函數隻是一些操作,而不需返迴數值,這時返迴語句的格式為 return; 或者不寫。 ……
前言/序言
第4版前言 本書第3版是2010年11月完成的。六年來,我們在使用本教材的過程中,認真聽取學生反饋意見,不斷改進教學方法、完善教學環節、調整教學次序,使得課程學習效果有瞭進一步提升。 為及時反映課內教學成果,我們又在第3版基礎上對文字教材進行瞭修訂,包括調整瞭若乾章節的次序、補充瞭部分章節的課後習題、修改瞭一些地方的文字錯誤和代碼錯誤等等。 我們還係統梳理瞭第3版教材中的所有示例源程序,調整瞭所有代碼中的注釋,清除瞭在部分代碼中發現的問題,並用*新的編譯環境進行瞭編譯測試。 希望本次修訂能為計算機語言程序設計學習者提供一本內容與時俱進、更加易學易用的教材。 由於時間倉促,作者水平有限,書中難免還有紕漏,歡迎廣大讀者朋友多提寶貴意見! 吳文虎,徐明星,鄔曉鈞 2017年1月 第3版前言 本書的第1版是2003年9月完成的,經過一年的試用,於2004年9月發行瞭第2版。 學生普遍反映,這本教材思路清晰,重點突齣,易學易用,特彆是強化實踐教學思想,使學生既動手又動腦,學會瞭編程的基本思路和方法,受到瞭學生的好評。從第2版的使用到現在又經過瞭6年時間,這期間我們在實踐中認真聽取學生的反饋意見,不斷改進教學方法,與時俱進地充實教學內容,特彆是注重將講課內容與作業提交係統形成一個有機的整體;使學生的學習更容易做到理性思維和理性實踐,以期達到進一步提高教學質量的目標。為此,我們又在第2版的基礎上調整瞭部分章節,增加瞭一些常用的重要算法及程序實現,形成瞭現在的第3版。從教材改版的目標而言,我們認為“沒有*好,隻有更好”。 吳文虎 徐明星 2010年9月 第2版前言 本書第1版是2003年9月齣版的,經過一年的使用後,學生普遍反映本書重點突齣,易學易用。但作為教師,我感到還要不斷地研究教學規律,化解教學中的難點。為此,我又重新審閱瞭全書,在文字上做瞭調整,內容上做瞭修正,力求講得明白透徹。在教學中發現,初學者往往要花費很多的時間在程序調試上,效率很低。實際上程序調試已成為學生編程實踐中的“攔路虎”。所以,配閤本書,又專門編著瞭《程序設計基礎(第2版)習題解答與上機指導》,還準備上小班輔導課讓學生學會調試程序的基本方法。我認為這可能是進一步提高該課教學質量的一個關鍵。 吳文虎 2004年8月 第1版前言 “計算機語言與程序設計”是一門十分重要的基礎課程。該課長期沿襲著這樣的教學模式:過於注重語句、語法和一些細節,基本上是以高級語言自身的體係為脈絡展開的,沒有把邏輯與編程解題思路放在主體地位上;對如何分析問題和解決問題講得不夠,對學生編程的能力、上機解題的能力訓練不夠。這樣就給後續課程及研究生階段的課題研究留下瞭缺憾。很多學生在學習這門課時感到枯燥難學,學過之後,不能用來解決實際問題。 我個人的經曆有些不同,除瞭學校給我安排的教學和科研任務之外,20年來我一直指導初中學生、高中學生和大學生參加有關計算機的各種比賽,包括國際信息學奧林匹剋和ACM世界大學生程序設計競賽,通過對這些學生成長道路的反復思考和研究,使我感到很有必要改變我們的課程教學模式,用新的教學理念和方法培養一流人纔。對這一問題,我和有關領導談瞭自己的想法,他們非常支持。 從2001年9月起,我接受瞭程序設計基礎課程的教學任務,並開始對該課程教學模式進行改革:以強調動手實踐上機編程為切入點;以任務驅動方式,通過實例講授程序設計的基本概念和基本方法;重點放在思路上,即在C/C++語言的環境下,針對問題進行分析,構建數學模型,理齣算法並編程實現。同時,要求學生養成良好的編程習慣;在教學過程中培養學生的思維能力和動手能力,鼓勵學生探索、研究和創新。在指導思想上,強調轉變觀念,以學生為中心,將學生視為教學的主體,安排教學*先考慮培養目標、學生的認知規律和學習特點。在教學的每一個環節,顧及學生的實際情況,多想怎樣纔能有利於調動學生學習的積極性,引導學生主動學習。具體的改革措施主要針對兩個方麵:教學模式和對學生學習的評價方式。 對教學模式的改革 提齣強化實踐。明確告訴學生:程序設計課是高強度的腦力勞動,不是聽會的,也不是看會的,而是自己練會的。隻有讓學生動手,他纔會有成就感,進而對課程産生興趣,學起來纔比較從容。因此,我們的基本思想是在理論指導下,讓學生動手、動腦,更多地上機實踐。學生隻有在編寫大量程序之後,纔能獲得真知灼見,感到運用自如。注重學生動手能力的培養是這門課和以往課程*大的不同之處。 提齣理性思維和理性實踐。按照建構主義的學習理論,學生作為學習的主體在與客觀環境(指所學內容)的交互過程中構建自己的知識結構。教師應引導學生在解題編程的實踐中探索其中帶規律性的認識,將感性認識升華到理性高度,隻有這樣,學生纔能舉一 反三。 提齣授課的原則是要學生“抱西瓜”而不是“撿芝麻”,重點放在思路、算法、編程構思和程序實現上。語句隻是錶達工具,講一些*主要的,對細枝末節的東西根本不講。要求學生在課堂上積極思考,盡量當堂學懂。突齣上機訓練,在編寫程序的過程中,使學生提高利用計算機這個智力工具來分析問題和解決問題的能力。 提齣要讓學生養成良好的編程習慣。我們在與國內一些軟件公司的技術人員座談時瞭解到,中國軟件之所以上不去的原因之一就有“習慣問題”。印度十個人編程,會編齣一樣的東西,而我們十個人編程可能會有十種風格。因為我們忽略瞭一個重要問題,即“顧客”的感受,程序的編寫是給彆人看的,而不是隻給我們自己看的。再者,盡管我們學生模型構思做得很快,但編程的基本功不紮實,往往到瞭關鍵的時候,就齣問題。鑒於此,在課上我們強調程序的可讀性、規範性;要求變量必須加注釋;程序構思要有說明;學會如何調試程序;盡量使程序優化;還要求對程序的運行結果做正確與否的判斷和分析。 提齣“自學、動手、應用、上網”的學習習慣。我認為在本科階段就應該注意培養學生的自學能力。很多東西完全是可以自學的,尤其是計算機。計算機是實踐性極強的學科,所學的內容和要實踐的東西是一個整體,因此可以自己動手來學,書上看不懂的在機器上動手試試,往往就弄懂瞭。上網是指充分利用網絡平颱,提高獲取信息、處理信息和交流信息的能力。 對學生學習評價方式的改革 考試是檢驗學生學習效果、評價學生學習業績的重要環節。考試作為“指揮棒”對教學目標、教學過程有著相當大的影響。我一直在思考如何進行考試改革,如何藉助考試環節調動和激發學生自主學習的積極性、創造性等問題。 開學之初,我就嚮學生宣布考試方式--上機解題,判分也是由計算機來完成,對就是對,錯就是錯,不紙上談兵,不考筆試,不考死記硬背的東西。我們平時比較注意對學生學習方式的引導,讓學生明白:理論很重要,要在理論指導下,動手動腦、有條理地進行實踐。實踐纔能齣真知,動手纔能學到真本事。 我們還將一些有較好程序設計基礎的學生組織起來,因材施教,引導他們進行探索式的研究性學習,讓
程序設計基礎(第4版) 下載 mobi epub pdf txt 電子書