問題求解與程式設計

問題求解與程式設計

《問題求解與程式設計》一書在講解C++程式設計語言的同時,強調軟體工程的基本原理和面向對象程式設計,在講解數據抽象、組件重用和其他良好的軟體開發方法的同時,兼顧面向對象和過程化的程式設計方法。《問題求解與程式設計(C++語言版)(第6版)》內容包括計算機科學的職業選擇、計算機組成以及程式語言綜述、C++程式的形式與組成元素、函式及模組化編程思想、條件和重複語句的組成和使用方法、簡單數據類型和用戶定義數據類型、流與檔案的操作、數組與結構、數據抽象與面向對象程式設計思想、指針和動態數據結構、進程與執行緒等。《問題求解與程式設計(C++語言版)(第6版)》可以作為高等院校計算機及相關專業的教材及參考書。

目錄

第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

相關詞條

相關搜尋

熱門詞條

聯絡我們