C程序設計教程(第9版) C How to Program: With Case Studies in Applications and Systems Programming,9

[美]保羅·戴特爾(Paul Deitel)、哈維·戴特爾(Harvey Deitel)

  • C程序設計教程(第9版)-preview-1
  • C程序設計教程(第9版)-preview-2
C程序設計教程(第9版)-preview-1

買這商品的人也買了...

商品描述

本書是優秀的C語言教程。全書系統地介紹了4種當今流行的程序設計方法——面向過程、基於對象、面向對象以及泛型編程,內容系統、生動、易懂。作者由淺入深地介紹了結構化編程及軟件工程的基本概念,從簡單概念到最終完整的語言描述,清晰、正確、透徹、詳細地講解了C語言,尤其註重程序設計思想和方法的介紹。此外,還涉及安全的C程序涉及、提高練習題,覆蓋C++和麵向對象程序設計、基於Allegro的游戲編程、C標準介紹等內容。

作者簡介

Paul J. Deitel是Deitel & Associates公司的首席执行官和首席技术官,他毕业于麻省理工学院,在计算机领域有41年的经验。保罗是世界上颇有经验的编程语言培训师之一,自1992年以来一直为软件开发人员教授专业课程。他已经为国际上的学术、工业、政府和军事客户提供了数百个编程课程,包括加州大学洛杉矶分校、思科、IBM、西门子、Sun Microsystems(现在的Oracle)、戴尔、Fidelity、肯尼迪航天中心的NASA、美国国家严重风暴实验室、白沙导弹发射场、Rogue Wave软件、波音、北电网络、Puma、iRobot和其他许多机构。他和他的合著者哈维·M·迪特尔博士是世界上热销的编程语言教科书、专业书籍、视频和互动多媒体电子学习作者,以及虚拟和现场培训主持人。

 

Dr. Harvey M. Deitel 是Deitel & Associates, Inc.的主席兼首席战略官,在计算机领域有59年的经验。Deitel博士在麻省理工学院获得了电子工程的学士和硕士学位,并在波士顿大学获得了数学博士学位,他在这些项目中的每一个项目都是在计算机科学项目分出之前研究的。他有丰富的大学教学经验,包括获得终身教职并担任波士顿学院计算机科学系主任,然后于1991年与他的儿子Paul一起成立了Deitel & Associates, Inc.。Deitel父子的出版物赢得了国际认可,在日语、德语、俄语、西班牙语、法语、波兰语、意大利语、简体中文、繁体中文、韩语、葡萄牙语、希腊语、乌尔都语和土耳其语中出版了100多部翻译作品。Deitel博士已经为学术界、企业、政府和军事客户提供了数百个编程课程。

目錄大綱

第 1章 電腦和C語言簡介 1

1.1 簡介 2

1.2 硬件和軟件 2

1.2.1 摩爾定律 3

1.2.2 電腦組織 3

1.3 數據層次結構 5

1.4 機器語言、匯編語言和高級語言 7

1.5 操作系統 9

1.6 C編程語言 11

1.7 C語言標準庫和開源庫 12

1.8 其他流行的編程語言 13

1.9 典型的C語言程序開發環境 14

1.9.1 第 1階段:創建一個程序 14

1.9.2 第 2和第3階段:預處理和

編譯C程序 15

1.9.3 第4階段:鏈接 15

1.9.4 第5階段:加載 16

1.9.5 第6階段:執行 16

1.9.6 執行時可能出現的問題 16

1.9.7 標準輸入、標準輸出和標準

錯誤流 17

1.10 在Windows、Linux和macOS中

測試驅動一個C應用程序 17

1.10.1 在Windows 10上用Visual Studio

2019社區版編譯和運行一個C語言

程序 17

1.10.2 在macOS上用Xcode編譯和運行

一個C程序

20

1.10.3 在Linux上用GNU gcc編譯和

運行一個C應用程序 22

1.10.4 在GCC Docker容器中編譯和

運行一個C應用程序,並在

Windows 10、macOS或Linux上

原生運行。 24

1.11 因特網、萬維網、雲和物聯網 25

1.11.1 因特網:一個網絡的網絡 26

1.11.2 萬維網:讓因特網變得更友好 26

1.11.3 雲 26

1.11.4 物聯網 27

1.12 軟件技術 27

1.13 大數據有多大? 28

1.13.1 大數據分析 32

1.13.2 數據科學和大數據正在產生變化:

使用案例 33

1.14 案例研究:大數據移動應用 33

1.15 AI:在電腦科學和數據科學的

交匯處 34

第 2章 C語言編程入門 39

2.1 簡介 39

2.2 一個簡單的C程序:打印一行文本 39

2.3 另一個簡單的C程序:兩個整數

相加 42

2.4 內存概念 45

2.5 C語言中的算術 46

2.6 判斷:相等和關系操作符 49

2.7 安全的C語言編程 52

第3章 結構體化程序開發 61

3.1 簡介 61

3.2 算法 61

3.3 偽代碼 62

3.4 控制結構體 63

3.5 if選擇語句 64

3.6 if...else選擇語句 65

3.7 while循環語句 68

3.8 制訂算法案例研究1:計數器控制的

循環 69

3.9 用自頂向下、逐步細化的方式制定算法

案例研究2:標記控制的循環 70

3.10 用自頂向下、逐步細化的方式制定算法

案例研究3:嵌套控制語句 75

3.11 賦值操作符 78

3.12 遞增和遞減操作符 79

3.13 安全的C語言編程 81

第4章 程序控制 95

4.1 簡介 95

4.2 循環要點 95

4.3 計數器控制的循環 96

4.4 for循環語句 97

4.5 使用for語句的例子 99

4.6 switch多重選擇語句 102

4.7 do...while循環語句 106

4.8 break和continue語句 107

4.9 邏輯操作符 109

4.10 區分相等 (==) 和賦值 (

=)

操作符 111

4.11 結構體化編程的總結 112

4.12 安全的C語言編程 116

第5章 函數 128

5.1 簡介 128

5.2 C語言中的程序模塊化 128

5.3 數學庫函數 129

5.4 函數 131

5.5 函數的定義 131

5.5.1 square函數 131

5.5.2 maximum函數 133

5.6 函數原型:更深入的觀察 134

5.7 函數調用棧和棧幀 136

5.8 頭文件 139

5.9 通過值和引用傳遞參數 140

5.10 隨機數生成 140

5.11 隨機數字模擬案例研究:建立一個

賭場游戲 144

5.12 存儲類型 146

5.13 作用域規則 147

5.14 遞歸 150

5.15 使用遞歸的例子:斐波那契數列 153

5.16 遞歸與循環 155

5.17 安全的C語言編程:安全的隨機數

生成 157

第6章 數組 172

6.1 簡介 173

6.2 數組 173

6.3 定義數組 174

6.4 數組示例 174

6.4.1 定義一個數組並使用循環來設置

數組的元素值 174

6.4.2 在定義中用初始值列表初始化

數組

175

6.4.3 用符號常量指定數組的大小,

用計算方法初始化數組元素 176

6.4.4 對數組中的元素求和 177

6.4.5 使用數組來總結調查的結果 177

6.4.6 用條形圖表示數組元素的值 178

6.4.7 擲骰子60,000,000次並將結果

匯總到一個數組中 179

6.5 使用字符數組來存儲和操作字符串 180

6.5.1 用一個字符串初始化一個

字符數組 180

6.5.2 用字符的初始化列表初始化

一個字符數組 181

6.5.3 訪問一個字符串中的字符 181

6.5.4 輸入一個字符數組 181

6.5.5 輸出一個代表字符串的字符

數組 181

6.5.6 演示字符數組 181

6.6 靜態局部數組和自動局部數組 182

6.7 將數組傳遞給函數 184

6.8 對數組排序 187

6.9 數據科學入門案例研究:

調查數據分析 189

6.10 搜索數組 193

6.10.1 用線性搜索來搜索一個數組 193

6.10.2 用二分搜索來搜索數組 194

6.11 多維數組 197

6.11.1 展示二維數組 197

6.11.2 初始化雙下標數組 198

6.11.3 設置某一行的元素 199

6.11.4 計算二維數組中的元素總數 200

6.11.5 二維數組操作 200

6.12 可變長度數組 203

6.13 安全的C語言編程 205

第7章 指針 220

7.1 簡介 221

7.2 指針變量的定義和初始化 221

7.3 指針操作符 222

7.4 按引用向函數傳遞參數 224

7.5 在指針中使用const限定符 227

7.5.1 使用指向可變數據的可變指針

將字符串轉換為大寫字母 227

7.5.2 用常量數據的可變指針逐個

字符打印字符串 228

7.5.3 試圖修改可變數據的常量指針 229

7.5.4 試圖修改常量數據的常量指針 230

7.6 使用按引用傳遞的冒泡排序 231

7.7 sizeof操作符 233

7.8 指針表達式和指針算術 235

7.8.1 指針算術操作符 235

7.8.2 將一個指針指向一個數組 235

7.8.3 將一個整數添加到一個指針上 235

7.8.4 從一個指針中減去一個整數 236

7.8.5 指針的遞增和遞減 236

7.8.6 用一個指針減去另一個指針 236

7.8.7 互相賦值指針 236

7.8.8 void指針 236

7.8.9

比較指針 237

7.9 指針和數組的關系 237

7.9.1 指針/偏移量表示法 237

7.9.2 指針/下標表示法 238

7.9.3 不能用指針算術修改數組名稱 238

7.9.4 演示指針下標和偏移量 238

7.9.5 用數組和指針復制字符串 239

7.10 指針的數組 240

7.11 隨機數模擬案例研究:

洗牌和發牌 241

7.12 函數指針 245

7.12.1 按升序或降序排序 245

7.12.2 使用函數指針創建一個菜單

驅動的系統 247

7.13 安全的C語言編程 248

第8章 和字符串 276

8.1 簡介 277

8.2 字符串和字符的基本原理 277

8.3 字符處理庫 278

8.3.1 函數isdigit、isalpha、isalnum和

isxdigit 279

8.3.2

函數islower、isupper、tolower和

toupper 280

8.3.3 函數isspace、iscntrl、ispunct、

isprint和isgraph 280

8.4 字符串轉換函數 282

8.4.1 函數strtod 282

8.4.2

函數strtol 283

8.4.3 函數strtoul 283

8.5 標準輸入/輸出庫函數 284

8.5.1 函數fgets和putchar 285

8.5.2

函數getchar 286

8.5.3 函數sprintf 286

8.5.4

函數scanf 287

8.6 字符串處理庫的字符串操作函數 287

8.6.1 函數strcpy和strncpy 288

8.6.2

函數strcat和strncat 289

8.7 字符串處理庫的比較函數 290

8.8 字符串處理庫的搜索函數 291

8.8.1 函數strchr 292

8.8.2

函數strcspn 292

8.8.3 函數strpbrk 293

8.8.4

函數strrchr 293

8.8.5

函數strspn 293

8.8.6

函數strstr 294

8.8.7

函數strtok 294

8.9 字符串處理庫的內存函數 296

8.9.1 函數memcpy 296

8.9.2

函數memmove 297

8.9.3 函數memcmp 297

8.9.4

函數memchr 298

8.9.5

函數memset 298

8.10 字符串處理庫的其他函數 299

8.10.1 函數strerror 299

8.10.2 函數strlen 299

8.11 安全的C語言編程 300

第9章 格式化的輸入/輸出 321

9.1 簡介 321

9.2 流 322

9.3 用printf格式化輸出 322

9.4 打印整數 323

9.5 打印浮點數值 324

9.5.1 轉換規範e、E和f 324

9.5.2 轉換規範g和G 324

9.5.3 示範浮點轉換規範 325

9.6 打印字符串和字符 326

9.7 其他轉換規範 326

9.8 用域寬和精度打印 327

9.8.1 整數的域寬 327

9.8.2 整數、浮點數和字符串的精度 328

9.8.3 結合域寬和精度 329

9.9 printf格式標記 329

9.9.1 右對齊和左對齊 330

9.9.2 打印帶有或不帶有+標記的

正數和負數 330

9.9.3 使用空格標記 330

9.9.4 使用#標記 331

9.9.5 使用0標記 331

9.10 打印字面量和轉義序列 332

9.11 用scanf格式化輸入 333

9.11.1 scanf 語法 333

9.11.2 scanf轉換規範 333

9.11.3 讀取整數 334

9.11.4 讀取浮點數字 334

9.11.5 讀取字符和字符串 335

9.11.6 使用掃描集 335

9.11.7 使用域寬 336

9.11.8 跳過輸入流中的字符 337

9.12 安全的C語言編程 338

第 10章 結構體體、共享體、位操作

和枚舉 344

10.1 簡介 345

10.2 結構體體的定義 345

10.2.1

自引用結構體體 345

10.2.2 定義結構體體類型的變量 346

10.2.3 結構體體標簽名稱 346

10.2.4 可以對結構體體進行的操作 346

10.3 初始化結構體體 347

10.4 用.和->訪問結構體體成員 348

10.5 在函數中使用結構體體 349

10.6 typedef 349

10.7 隨機數模擬案例研究:高性能的

洗牌和發牌 350

10.8 共享體 352

10.8.1 共享體的聲明 353

10.8.2 允許的共享體操作 353

10.8.3 在聲明中初始化union 353

10.8.4 示範共享體 353

10.9 位操作符 354

10.9.1 顯示無符號整數的位數 355

10.9.2 使函數displayBits更加通用和

可移植 356

10.9.3 使用按位與、按位或、按位異或

和按位取反操作符 356

10.9.4 使用左移位和右移位操作符 359

10.9.5 位運算賦值操作符 360

10.10 位域 361

10.10.1 定義位域 361

10.10.2 使用位域來表示牌面、花色 362

10.10.3 未命名位域 363

10.11 枚舉常量 364

10.12 匿名結構體體和共享體 365

10.13 安全的C語言編程 366

第 11章 文件處理 385

11.1 簡介 385

11.2 文件和流 385

11.3 創建一個順序存取的文件 386

11.3.1 指向FILE的指針 387

11.3.2 使用fopen來打開一個文件 387

11.3.3 使用feof來檢查文件結束

標記 388

11.3.4 使用fprintf向文件寫數據 388

11.3.5 使用fclose來關閉一個文件 388

11.3.6 文件打開模式 389

11.4 從順序存取的文件中讀取數據 390

11.4.1 重置文件位置指針 391

11.4.2 信用查詢程序 391

11.5 隨機存取文件 394

11.6 創建一個隨機存取的文件 395

11.7 將數據隨機寫入隨機存取文件 396

11.7.1 用fseek定位文件位置指針 398

11.7.2 錯誤檢查 398

11.8 從隨機存取文件中讀取數據 399

11.9 案例研究:事務處理系統 400

11.10 安全的C語言編程 404

第 12章 數據結構體 425

12.1 簡介 425

12.2

自引用結構體 426

12.3 動態內存管理 427

12.4 鏈表 428

12.4.1 函數insert 430

12.4.2

函數delete 432

12.4.3 函數 isEmpty 和 printList 433

12.5 棧 434

12.5.1 函數push 437

12.5.2

函數pop 437

12.5.3 棧的應用 438

12.6 隊列 438

12.6.1 函數enqueue 442

12.6.2

函數dequeue 443

12.7 樹 443

12.7.1 函數insertNode 446

12.7.2 遍歷:函數 inOrder, preOrder 和

postOrder 446

12.7.3 消除重復 447

12.7.4 二叉樹搜索 447

12.7.5 其他二叉樹操作 447

12.8 安全的C語言編程 448

第 13章 電腦科學思維:排序算法

和大O 468

13.1 簡介 468

13.2 算法的效率:大O 469

13.2.1 O(1)算法 469

13.2.2 O(n)算法 469

13.2.3 O(n2)算法 469

13.3 選擇排序 470

13.3.1 選擇排序的實現 471

13.3.2 選擇排序的效率 473

13.4 插入排序 473

13.4.1 插入排序的實現 474

13.4.2 插入排序的效率 475

13.5 案例研究:高性能合並排序的

可視化 476

13.5.1 合並排序的實現 476

13.5.2 合並排序的效率 480

13.5.3 總結各種算法的大O符號 480

第 14章 預處理器 485

14.1 簡介 485

14.2 #include預處理器指令 486

14.3 #define預處理器指令:符號常量 486

14.4 #define 預處理器指令:宏 487

14.4.1 有一個參數的宏 487

14.4.2 雙參數宏 488

14.4.3 宏的續行字符 488

14.4.4 #undef預處理器指令 488

14.4.5 標準庫的宏 488

14.4.6 不要在宏中放置有副作用的

表達式 489

14.5 條件編譯 489

14.5.1 #if...#endif 預處理器指令 489

14.5.2 用#if...#endif註釋掉代碼塊 490

14.5.3 有條件地編譯調試代碼 490

14.6 #error和#pragma預處理器指令 490

14.7 #和##操作符 491

14.8 行號 491

14.9 預定義的符號常量 492

14.10 斷言 492

14.11 安全的C語言編程 493

第 15章 其他主題 497

15.1 簡介 497

15.2 可變長度的參數列表 497

15.3 使用命令行參數 499

15.4 編譯多源文件程序 500

15.4.1 其他文件中全局變量的extern

聲明 501

15.4.2

函數原型 501

15.4.3 用static限製作用域 501

15.5 exit和atexit終止程序

502

15.6 整數和浮點字面量的後綴 503

15.7 信號處理 504

15.8 動態內存分配函數calloc和realloc 506

15.9 goto:無條件分支 507

附錄A 操作符優先級 511

附錄B ASCII字符集 513

附錄C 多線程/多核和其他

C18/C11/C99主題 514

C.1 簡介 514

C.2 C99中增加的頭文件 515

C.3 指定的初始值和復合字面量 515

C.4 bool類型 517

C.5 復數 518

C.6 具有可變長度的參數列表的宏 518

C.7 其他C99特性 519

C.7.1 編譯器最小資源限制 519

C.7.2 restrict關鍵字 519

C.7.3 可靠的整數除法 519

C.7.4 靈活數組成員 520

C.7.5 泛型數學 520

C.7.6

內聯函數 520

C.7.7 __func__ 預定義標識符 521

C.7.8 va_copy 宏程序 521

C.8 C11/C18特性 521

C.8.1 C11/C18頭文件 521

C.8.2 quick_exit函數 521

C.8.3 Unicode 支持 522

C.8.4 _Noreturn函數限定符 522

C.8.5 泛型表達式 522

C.8.6 Annex L:可分析性和未定義

行為 522

C.8.7

內存對齊控制 523

C.8.8 靜態斷言 523

C.8.9 浮點類型 523

C.9 案例研究:多線程和多核系統的

性能 523

C.9.1 示例:兩個計算密集型任務的

順序執行 526

C.9.2 示例:兩個計算密集型任務的

多線程執行 527

C.9.3 其他多線程特性 530

附錄D 面向對象的編程概念介紹 531

D.1 介紹 531

D.2 面向對象的編程語言 531

D.3 汽車作為一個對象 531

D.4 方法和類 531

D.5 實例化 532

D.6 復用 532

D.7 消息和方法調用 532

D.8 屬性和實例變量 532

D.9 繼承 532

D.10 面向對象的分析和設計(OOAD) 532