《問題求解與程式設計(C++語言版)(第6版)》是2011年2月24日清華大學出版社出版的圖書。
本書的兩位作者都是Temple大學計算機與信息科學教授。Elliot B. Koffman是美國最著名的計算機科學教育家之一,也是ACM任務組初級程式設計方法課程的前主席。他與其他作者合著了多部問題求教與面向對象方面的著作。Frank L. Friedman同時也是Temple大學計算機與信息科學系的主任。除了合著本書之外,他還編著了使用FORTRAN和BASIC編程的其他教材。他當前的研究方向是軟體工程。
本書的編寫目標是教材。全書由14章組成,它們對於學生學習和掌握軟體編程的思路、方法、技巧提供了有效的幫助。
本書結構清晰,取捨得當,讀者易於使用本書給出的示例體驗和體會數據結構的概念與實現技巧,更深入地掌握C++的核心內容。
基本介紹
- 書名:問題求解與程式設計(C++語言版)(第6版)
- ISBN:9787302245858
- 定價:79元
- 出版社:清華大學出版社
- 出版時間:2011-2-24
- 裝幀:平裝
圖書簡介,圖書目錄,
圖書簡介
通過採用經典的軟體開發方法,本書第6版在強調軟體工程原理和使用C++語言實現面向對象編成的同時,提供了堅實的程式設計基礎。它十分清晰地闡述了C++程式設計。本書首先從簡單的、易於理解的過程編程開始,逐漸拓展加深,直到最終完成動態數據結構的介紹為止。
圖書目錄
第0章 作為一種職業途徑的計算機科學 1
概述 2
0.1 為什麼計算機科學或許是適合你的正確領域 2
0.1.1 選擇計算機科學專業的理由 2
0.1.2 計算機科學家的特質 3
0.2 大學經驗:可選擇的計算機學科和專業 4
0.2.1 計算機科學 4
0.2.2 計算機工程 5
0.2.2 信息系統 5
0.2.3 信息技術 5
0.2.4 軟體工程 6
0.2.5 多學科專業 6
0.3 工作機會 7
0.3.1 在美國和世界上的需求 8
0.3.2 對代表性不足群體的需求 8
0.3.3 依然在地平線上的新職業 8
第1章 計算機、問題求解和編程引論 10
1.1 計算機概述 11
1.1.1 早期的計算機 11
1.1.2 計算機分類 12
1.1.3 共享計算機資源 12
本節練習 13
1.2 計算機硬體 13
1.2.1 存儲器 14
1.2.2 主存儲器 15
1.2.3 輔助存儲器 15
1.2.4 中央處理器 16
1.2.5 輸入/輸出設備 17
1.2.6 計算機網路 17
1.2.7 全球資訊網 18
本節練習 19
1.3 計算機軟體 19
1.3.1 作業系統 19
1.3.2 套用軟體 21
1.3.3 程式語言 21
1.3.4 面向對象編程 22
本節練習 23
1.4 處理高級語言程式 24
1.4.1 執行程式 25
本節練習 26
1.5 軟體開發方法 26
本節練習 28
1.6 套用軟體開發方法 28
案例研究——將英里轉換為千米 28
本節練習 31
1.7 電腦程式員的職業道德 31
1.7.1 隱私與數據濫用 31
1.7.2 計算機黑客 31
1.7.3 抄襲和盜版軟體 32
1.7.4 計算機資源的濫用 32
本節練習 32
本章複習 33
快速自測練習 33
複習題 34
快速自測練習答案 35
第2章 C++概述 36
2.1 C++語言元素 37
2.1.1 注釋 37
2.1.2 編譯器指令:#include 38
2.1.3 名稱空間std 39
2.1.4 函式main 39
2.1.5 聲明語句 40
2.1.6 可運行語句 40
本節練習 41
2.2 保留字和標識符 42
2.2.1 保留字 42
2.2.2 標識符 42
2.2.3 大寫和小寫字母 43
本節練習 44
2.3 數據類型和聲明 44
2.3.1 數據類型 44
2.3.2 string類 46
2.3.3 數據類型的目的 47
2.3.4 聲明 47
2.3.5 常量聲明 48
本節練習 49
2.4 可運行語句 50
2.4.1 記憶體中的程式 50
2.4.2 賦值語句 50
2.4.3 輸入/輸出操作 51
2.4.5 輸入語句 52
2.4.6 程式提示 53
2.4.7 return語句 55
本節練習 55
2.5 C++程式的通用格式 56
2.5.1 程式中的注釋 57
本節練習 58
2.6 算術表達式 58
2.6.1 操作符/和% 59
2.6.2 混合類型表達式的數據
類型 60
2.6.3 混合類型賦值語句 61
2.6.4 使用多個操作符的表達式 61
2.6.5 在C++中編寫數學公式 64
案例研究——超市硬幣處理器 64
本節練習 67
2.7 互動模式、批模式和數據檔案 69
2.7.1 輸入重定向 69
2.7.2 輸出重定向 70
本節練習 71
2.8 常見編程錯誤 71
2.8.1 語法錯誤 72
2.8.2 運行時錯誤 73
2.8.3 未檢測到的錯誤 73
2.8.4 邏輯錯誤 74
本章複習 74
快速自測練習 76
複習題 76
編程項目 77
快速自測練習答案 80
第3章 使用函式和類做自頂
向下設計 81
3.1 依據現有信息構造程式 82
案例研究——計算圓的面積和
周長 83
案例研究——計算一批平面墊圈的
重量 85
本節練習 88
3.2 庫函式 89
C++ 庫函式 90
展望未來 92
本節練習 92
3.3 自頂向下設計和結構圖 93
案例研究——畫簡單圖形 93
本節練習 94
3.4 無參數函式 94
3.4.1 函式原型 95
3.4.2 函式定義 96
3.4.3 程式中函式的位置 97
3.4.4 函式執行順序 97
3.4.5 使用函式子程式的優點 99
本節練習 100
3.5 帶輸入參數的函式 101
3.5.1 帶輸入參數的無返回值
函式 102
3.5.2 帶輸入參數和單返回值的
函式 103
3.5.3 帶有多個參數的函式 106
3.5.4 參數/參量列表對應關係 107
3.5.5 函式數據區 107
3.5.6 使用驅動模組測試函式 108
本節練習 108
3.6 名稱的作用域 109
本節練習 110
3.7 藉助類擴展C++:使用類string 111
3.7.1 string類 111
3.7.2 聲明string對象 112
3.7.3 讀取和顯示string對象 112
3.7.4 字元串賦值和拼接 113
3.7.5 操作符重載 113
3.7.6 點表示法:調用函式
length和at 113
3.7.7 用於單詞處理操作的
成員函式 114
3.7.8 將子字元串賦值給string
對象 114
本節練習 115
3.8 計算機圖形簡介(選讀) 116
3.8.1 視窗的組成 116
3.8.2 繪製矩形 119
3.8.3 繪製圓、橢圓和弧線 120
3.8.4 餅圖和填充橢圓 124
3.8.5 在繪圖上添加文本 126
本節練習 127
3.9 常見編程錯誤 127
分別測試函式子程式 129
本章複習 129
快速自測練習 131
複習題 131
編程項目 132
快速自測練習答案 135
第4章 選擇結構:if和switch
語句 137
4.1 控制結構 138
4.2 邏輯表達式 138
4.2.1 使用關係和相等操作符的
邏輯表達式 139
4.2.2 使用邏輯操作符的
邏輯表達式 140
4.2.3 操作符優先權 141
4.2.4 在C++中編寫條件 143
4.2.5 比較字元和字元串 144
4.2.6 布爾賦值 144
4.2.7 書寫bool值 145
4.2.8 使用整數表示邏輯值 145
本節練習 146
4.3 if控制語句簡介 147
4.3.1 帶有兩個備選方案的
if語句 147
4.3.2 帶有從屬語句的if語句 147
4.3.3 使用字元和字元串的
if語句條件 148
4.3.4 if語句的格式 149
本節練習 150
4.4 使用複合備選語句的if語句 151
4.4.1 跟蹤if語句 152
本節練習 153
4.5 算法中的決策步驟 154
案例研究——使用函式解決
工資發放問題 154
4.5.1 有關標識符作用域的
提醒 160
4.5.2 在結構圖中添加數據流
信息 160
4.5.3 述評——軟體開發方法 160
本節練習 161
4.6 檢查算法的正確性 161
本節練習 162
4.7 嵌套if語句和多項備選抉擇 162
4.7.1 嵌套if語句和一系列
if語句的比較 163
4.7.2 編寫嵌套if作為多個
備選抉擇 164
4.7.3 條件的順序 165
4.7.4 邏輯表達式的短路計算 167
本節練習 168
4.8 switch控制語句 169
4.8.1 適宜地使用break 171
4.8.2 嵌套if語句與switch語句
的比較 171
4.8.3 使用switch語句選擇
備選函式 171
本節練習 172
4.9 常見編程錯誤 173
本章複習 174
快速自測練習 176
複習題 177
編程項目 178
快速自測練習答案 182
第5章 重複和循環語句 184
5.1 計數循環和while語句 185
5.1.1 while語句 186
5.1.2 while語句語法 187
本節練習 188
5.2 使用循環累加和與乘積 189
5.2.1 數字連乘 191
5.2.2 複合賦值運算符 192
本節練習 192
5.3 for語句 193
5.3.1 增量和減量操作符 195
5.3.2 異於一的增量和減量 197
5.3.3 顯示值表 198
本節練習 198
5.4 條件循環 200
5.4.1 使用減量控制變數的
循環 200
案例研究——監視石油供應 201
5.4.2 零疊代循環 203
5.4.3 更通用的條件循環 204
本節練習 205
5.5 循環設計和循環模式 205
5.5.1 哨兵控制循環 206
5.5.2 計算平均值 209
5.5.3 標誌控制循環 209
本節練習 210
5.6 do-while語句 211
本節練習 214
5.7 while、for、do-while循環複習 215
本節練習 216
5.8 嵌套循環 217
本節練習 218
5.9 調試和測試程式 220
5.9.1 使用調試器 221
5.9.2 無調試器的調試 221
5.9.3 差一錯誤 222
5.9.4 測試 222
本節練習 222
5.10 圖形程式中的循環(選讀) 223
5.10.1 動畫 224
本節練習 227
5.11 常見編程錯誤 227
本章複習 229
快速自測練習 232
複習題 233
編程項目 234
快速自測練習答案 239
第6章 模組化編程 240
6.1 值參和引用參數 241
6.1.1 傳值調用和引用調用參數 243
6.1.2 void函式能夠返回結果 244
6.1.3 什麼時候使用引用參數或
值參 244
6.1.4 值參與引用參數的對比 245
6.1.5 值參提供的保護 245
6.1.6 再談參量/參數列表的
對應關係 245
本節練習 247
6.2 使用輸出和輸入參數的函式 248
本節練習 253
6.3 函式的逐步設計 254
案例研究——通用和與
平均值問題 254
6.3.1 程式中標識符的多次聲明 260
本節練習 261
6.4 與函式一起使用對象 261
本節練習 263
6.5 調試和測試程式系統 263
6.5.1 自頂向下測試和樁模組 263
6.5.2 自底向上測試和驅動程式 263
6.5.3 程式系統調試技巧 264
6.5.4 標識符作用域和觀察
視窗變數 265
6.5.5 黑盒與白盒測試 265
本節練習 266
6.6 遞歸函式(選讀) 266
本節練習 268
6.7 常見編程錯誤 269
本章複習 269
快速自測練習 270
複習題 271
編程項目 272
快速自測練習答案 278
第7章 簡單數據類型 279
7.1 常量再探討 280
7.1.1 #define編譯器指令 280
本節練習 281
7.2 數值數據類型的內部表示 281
7.2.1 定點和浮點數據類型 281
7.2.2 整數類型 282
7.2.3 浮點類型 282
7.2.4 數值文字量的類型 282
7.2.5 整數類型和浮點類型的
取值範圍 282
7.2.6 數值的不精確性 283
7.2.7 混合類型:提升 284
7.2.8 類型轉換 284
7.2.9 類型強制轉換 284
本節練習 285
7.3 字元數據和函式 286
7.3.1 一些有用的字元函式 287
本節練習 289
7.4 bool類型數據和邏輯表達式 289
7.4.1 求邏輯表達式的反 289
7.4.2 bool類型函式 290
7.4.3 bool類型數據的輸入
和輸出 291
本節練習 292
7.5 枚舉類型 293
7.5.1 字元與枚舉成員值 294
7.5.2 包含枚舉類型的比較 294
7.5.3 整數類型之間的區別 295
7.5.4 讀和寫枚舉類型值 295
7.5.5 枚舉類型聲明的位置 297
7.5.6 作為強制轉換操作符的
枚舉類型 297
本節練習 298
7.6 疊代逼近 299
7.6.1 函式參數 299
案例研究——求解根的二分法 300
本節練習 304
7.7 使用char類型數據控制
圖形程式(選讀) 305
7.7.1 生成隨機數 307
7.7.2 為隨機數生成器提供種子 307
本節練習 308
7.8 常見編程錯誤 308
本章複習 310
快速自測練習 310
複習題 311
編程項目 312
快速自測練習答案 318
第8章 流和檔案 319
8.1 標準輸入/輸出流 320
8.1.1 一次讀取一個字元 325
本節練習 325
8.2 外部檔案 326
8.2.1 互動式處理與批處理 326
8.2.2 外部檔案的目錄名稱 326
8.2.3 將流附加到外部檔案上 327
8.2.4 函式copyLine 329
8.2.5 換行字元細解 329
8.2.6 在檔案流中使用getline 330
本節練習 331
8.3 將外部檔案用於程式間的通信 332
案例研究——準備工資單檔案 332
本節練習 336
8.4 深入探討讀取字元串數據 336
8.4.1 使用ignore跳過換行字元 337
本節練習 338
8.5 輸入/輸出操作運算元 339
本節練習 340
8.6 常見編程錯誤 341
本章複習 342
快速自測練習 343
複習題 343
編程項目 344
快速自測練習答案 349
第9章 數據結構:數組和結構 350
9.1 數組數據類型 351
9.1.1 數組聲明 351
9.1.2 數組初始化 353
9.1.3 數組下標 354
本節練習 356
9.2 順序訪問數組元素 356
9.2.1 字元串和字元數組 359
本節練習 360
9.3 數組參數 361
9.3.1 數組元素作參數 361
9.3.2 傳遞數組參數 362
本節練習 364
9.4 讀取部分數組 365
本節練習 367
9.5 搜尋和排序數組 367
9.5.1 找到數組中的最小值 367
9.5.2 數組搜尋 369
9.5.3 以升序排序數組 370
本節練習 371
9.6 分析算法:大O表示法 372
9.6.1 搜尋算法分析 373
9.6.2 排序算法分析 373
本節練習 374
9.7 多維數組 374
9.7.1 聲明二維數組 375
9.7.2 初始化二維數組 376
9.7.3 處理二維數組的嵌套循環 376
9.7.4 二維數組用作函式參數 376
9.7.5 擁有多個維的數組 377
本節練習 378
9.8 結構數據類型 379
9.8.1 聲明結構類型和結構
類型變數 379
9.8.2 訪問結構成員 380
本節練習 381
9.9 作運算元和參數使用的結構 382
9.9.1 結構複製或賦值 382
9.9.2 作為參數傳遞結構 382
9.9.3 讀取結構 383
9.9.4 結構用作函式結果 384
9.9.5 引用參數的效率 384
本節練習 384
9.10 結構數組 385
本節練習 387
9.11 作為字元數組的字元串
(選讀) 388
9.11.1 聲明和初始化字元數組 388
9.11.2 讀取和寫入字元數組 388
9.11.3 用於字元數組的一些
有用函式 389
本節練習 390
9.12 使用數組的圖形程式(選讀) 390
9.12.1 繪製多邊形 390
9.12.2 繪製格線 392
本節練習 395
9.13 常見編程錯誤 396
本章複習 397
快速自測練習 398
複習題 399
編程項目 401
快速自測練習答案 405
第10章 用戶自定義類 408
10.1 類定義和使用 409
10.1.1 counter類 409
10.1.2 counter類的類定義 410
10.1.3 檔案counter.h 中的
編譯器指令 412
10.1.4 使用counter類 412
10.1.5 檔案CounterTest.cpp中的
編譯器指令 413
本節練習 414
10.2 類的實現 415
10.2.1 構造函式 416
10.2.2 訪問器和修改器函式 416
10.2.3 檔案counter.cpp中的
編譯器指令 417
本節練習 417
10.3 類和對象使用規則小結 418
10.3.1 對象是類的實例 418
10.3.2 公有與私有訪問的對比 418
10.3.3 類和成員函式定義語法 418
10.3.4 結構和類的比較 420
10.3.5 項目檔案和單獨編譯 420
10.3.6 數據、結構和類的結合 421
10.3.7 函式重載和多態 421
本節練習 421
10.4 類用作運算元和參數 422
本節練習 423
10.5 分數類 424
10.5.1 fraction類的設計 424
10.5.2 使用類fraction 425
10.5.3 類fraction的實現檔案 426
本節練習 428
10.6 circle 類 429
10.6.1 設計circle類 429
10.6.2 使用circle類 431
10.6.3 類circle 的實現檔案 431
本節練習 433
10.7 一個簡單的字元串類 433
10.7.1 類simpleString的設計 433
10.7.2 類simpleString 的定義 434
10.7.3 測試類simpleString的
成員函式 435
10.7.4 類simpleString的
實現檔案 436
本節練習 438
10.8 一個存款賬戶類 439
案例研究——使用存款賬戶類 439
本節練習 444
10.9 常見編程錯誤 444
本章複習 446
快速自測練習 447
習題 447
編程項目 448
快速自測練習答案 451
第11章 數據抽象與面向對象設計 452
11.1 模版類 453
11.1.1 模版類的定義 453
11.1.2 模版類的實現 456
11.1.3 支持單獨編譯的編譯器
指令 458
本節練習 458
11.2 索引列表 458
11.2.1 索引列表類的需要 458
11.2.2 索引列表類的分析與
設計 459
11.2.3 使用indexList類 461
本節練習 463
11.3 實現索引列表類 464
本節練習 468
11.4 面向對象設計 469
11.4.1 面向對象設計方法論 469
案例研究——E-mail提供商的
地址簿 469
本節練習 480
11.5 操作符重載與友元 481
11.5.1 操作符重載 481
11.5.2 友元 482
本節練習 483
11.6 vector類 484
11.6.1 向量與數組 485
11.6.2 向量函式 485
11.6.3 通過疊代器訪問向量 486
11.6.4 標準算法 487
11.6.5 在E-mail地址簿案例中
使用向量 487
本節練習 490
11.7 常見編程錯誤 491
本章複習 492
快速自測練習 492
複習題 493
編程項目 494
快速自測練習答案 497
第12章 遞歸 499
12.1 遞歸的本質 500
12.1.1 遞歸問題與解答的
性質 501
本節練習 501
12.2 跟蹤遞歸函式 502
12.2.1 跟蹤一個遞歸函式 502
12.2.2 以反序顯示字元 503
12.2.3 用於函式調用的棧 505
12.2.4 C++中的參數棧實現 507
本節練習 507
12.3 遞歸的數學函式 507
本節練習 511
12.4 以數組為參數的遞歸函式 512
案例研究——二叉搜尋 513
本節練習 516
12.5 問題的遞歸求解 516
案例研究——漢諾塔 516
12.5.1 疊代函式與遞歸函式的
比較 520
本節練習 521
12.6 常見編程錯誤 521
本章複習 522
快速自測練習 522
複習題 522
編程項目 523
快速自測練習答案 524
第13章 指針與動態數據結構 526
13.1 指針與new操作符 527
13.1.1 用指針來訪問數據 528
13.1.2 指針操作 529
13.1.3 數組指針 529
13.1.4 指向結構體的指針 530
本節練習 532
13.2 操縱堆 532
13.2.1 作用於堆上的new
操縱結果 532
13.2.2 把記憶體單元返回給堆 533
本節練習 534
13.3 鍊表與list類 534
13.3.1 結點聲明 534
13.3.2 結點連線 535
13.3.3 在鍊表中插入結點 535
13.3.4 在鍊表頭插頭結點 536
13.3.5 在鍊表尾插入結點 537
13.3.6 刪除結點 537
13.3.7 遍歷鍊表 537
13.3.8 環形鍊表與雙向
鍊表(可選) 539
13.3.9 list類 539
本節練習 541
13.4 抽象數據類型——棧 542
13.4.1 C++的stack類 542
13.4.2 實現stack模版類 544
13.4.3 實現棧操作 546
13.4.4 測試棧 547
本節練習 548
13.5 抽象數據類型——佇列 548
13.5.1 C++的queue類 549
13.5.2 實現佇列 549
本節練習 553
13.6 二叉樹 553
13.6.1 二叉搜尋樹 554
13.6.2 搜尋二叉搜尋樹 554
13.6.3 構建二叉搜尋樹 555
13.6.4 顯示二叉搜尋樹 556
本節練習 557
13.7 二叉搜尋樹抽象數據結構 557
13.7.1 二叉樹類的設計 557
13.7.2 二叉樹類的實現 559
本節練習 562
13.8 二叉搜尋樹的效率 563
本節練習 564
13.9 常見編程錯誤 564
本章複習 565
快速自測練習 565
複習題 567
編程項目 568
快速自測練習答案 570
第14章 使用進程和執行緒的多處理 572
14.1 多任務處理 573
14.1.1 線性與並行編程 573
14.1.2 共享時間的多任務
處理 574
14.1.3 搶占多任務處理 574
14.1.4 時間片與並行性 575
14.1.5 並發編程 576
本節練習 576
14.2 進程 576
14.2.1 創建一個進程 577
14.2.2 等待進程 579
14.2.3 從一個進程中運行另一個
程式 579
本節練習 581
14.3 進程間通信與管道 581
14.3.1 管道 581
14.3.2 使用管道 582
14.3.3 使用標準輸入進行進程間
通信 583
14.3.4 演示父進程與子進程
之間的通信 584
本節練習 587
14.4 執行緒 587
14.4.1 創建一個執行緒 587
14.4.2 執行緒同步化 589
14.4.3 互斥鎖 590
14.4.4 死鎖 593
本節練習 595
案例研究——執行緒演示 595
14.5 常見編程錯誤 604
本章複習 605
快速自測練習 606
複習題 607
編程項目 607
快速自測練習答案 608