《C語言大學教程(第八版)》是2017年電子工業出版社出版的圖書。作者是(美)Paul Deitel(保羅. 戴特爾),Harvey Deitel(哈維. 戴特爾)。
基本介紹
- 中文名:C語言大學教程(第八版)
- 作者:(美)Paul Deitel(保羅. 戴特爾)、Harvey Deitel(哈維. 戴特爾)
- 譯者:蘇小紅、王甜甜、李佩琦
- 出版時間:2017年06月
- 出版社:電子工業出版社
- 頁數:764 頁
- ISBN:9787121316814
- 開本:16 開
- 叢書名:國外計算機科學教材系列
內容簡介,目錄,
內容簡介
本書是全球暢銷的C語言教程之一。全書系統地介紹了4種當今流行的程式設計方法——面向過程、基於對象、面向對象以及泛型編程,內容全面、生動、易懂,作者由淺入深地介紹了結構化編程及軟體工程的基本概念,從簡單的概念到最終的完整的語言描述,清晰、準確、透徹、詳細地講解了C語言,尤其注重程式設計思想和方法的介紹。相對於上一版,這一版在內容方面新增加了C安全程式設計、“更上一層樓”練習集,更新了C++和面向對象程式設計、基於Allegro的遊戲編程、C99標準介紹等內容。
目錄
第1章 計算機、網際網路和全球資訊網導論 1
1.1 引言 2
1.2 計算機硬體和軟體 2
1.2.1 摩爾定律 2
1.2.2 計算機組成 3
1.3 數據的層次結構 3
1.4 機器語言、彙編語言和高級語言 5
1.5 C程式設計語言 6
1.6 C標準庫 7
1.7 C++和其他基於C的程式設計語言 8
1.8 對象技術 8
1.8.1 對象——以汽車為例 9
1.8.2 方法與類 9
1.8.3 實例化 9
1.8.4 軟體重用 9
1.8.5 訊息與方法調用 9
1.8.6 屬性與實例變數 9
1.8.7 封裝與信息隱藏 10
1.8.8 繼承 10
1.9 典型的C程式開發環境 10
1.9.1 第1步:創建一個C程式 11
1.9.2 第2步和第3步:預處理及編譯一個C程式 11
1.9.3 第4步:連結 11
1.9.4 第5步:裝載 11
1.9.5 第6步:執行 12
1.9.6 程式運行時可能會出現的問題 12
1.9.7 標準輸入、標準輸出和標準錯誤流 12
1.10 在Windows、Linux和Mac OS X上測試並運行一個C應用程式 12
1.10.1 在Windows命令提示符下運行一個C應用程式 13
1.10.2 使用Linux中的GNU C來運行一個C應用程式 15
1.10.3 使用Mac OS X終端來運行一個C應用程式 17
1.11 作業系統 19
1.11.1 Windows —— 一個專有的作業系統 19
1.11.2 Linux —— 一個開源的作業系統 19
1.11.3 蘋果公司的Mac OS X;面向iPhone、iPad 和iPod Touch的iOS作業系統 20
1.11.4 谷歌公司的Android作業系統 20
1.12 網際網路和全球資訊網 20
1.12.1 網際網路:計算機網路的網路 21
1.12.2 全球資訊網:讓網際網路對用戶更友好 21
1.12.3 全球資訊網服務 21
1.12.4 Ajax 23
1.12.5 物聯網 23
1.13 一些重要的軟體技術 23
1.14 跟上信息技術的發展 24
第2章 C語言程式設計入門 28
2.1 引言 28
2.2 一個簡單的C程式:列印一行文字 28
2.3 另一個簡單的C程式:兩個整數求和 31
2.4 存儲單元的基本概念 35
2.5 C語言中的算術運算 35
2.6 做出決策:相等和關係運算符 38
2.7 安全的C程式設計 41
第3章 結構化的C程式設計 51
3.1 引言 51
3.2 算法 51
3.3 偽代碼 52
3.4 控制結構 52
3.5 if條件語句 54
3.6 if…else條件語句 54
3.7 while循環語句 57
3.8 算法設計案例1:計數控制的循環 58
3.9 自頂向下、逐步求精的算法設計案例2:標記控制的循環 60
3.10 自頂向下、逐步求精的算法設計案例3:嵌套控制結構 65
3.11 賦值運算符 67
3.12 增1和減1運算符 68
3.13 安全的C程式設計 70
第4章 C程式控制 84
4.1 引言 84
4.2 循環的基本原理 84
4.3 計數控制的循環 85
4.4 for循環語句 86
4.5 for語句:注意事項 88
4.6 使用 for語句的例子 89
4.7 switch多重選擇語句 91
4.8 do…while循環語句 96
4.9 break和continue語句 97
4.10 邏輯運算符 98
4.11 區分相等運算符(= =)和賦值運算符(=) 100
4.12 結構化程式設計小結 101
4.13 安全的C程式設計 105
第5章 C函式 117
5.1 引言 117
5.2 C語言中的程式模組 117
5.3 數學庫函式 118
5.4 函式 119
5.5 函式定義 120
5.5.1 square函式 120
5.5.2 maximum函式 123
5.6 函式原型:一個深入的剖析 123
5.7 函式調用堆疊及活動記錄堆疊幀 125
5.8 頭檔案 128
5.9 按值或按引用傳遞參數 129
5.10 隨機數的生成 129
5.11 案例分析:運氣遊戲;引入enum 133
5.12 存儲類型 135
5.13 作用域的規定 137
5.14 遞歸 139
5.15 遞歸套用案例:斐波那契數列 142
5.16 遞歸與疊代 144
5.17 安全的C程式設計 146
第6章 C數組 161
6.1 引言 162
6.2 數組 162
6.3 數組定義 163
6.4 數組實例 163
6.4.1 定義一個數組並用循環結構來設定數組元素值 163
6.4.2 在定義語句中用一個初始值列表來初始化一個數組 164
6.4.3 用符號常量來定義數組的大小並通過計算來初始化數組元素 165
6.4.4 數組元素值求和 166
6.4.5 用數組來統計民意調查的結果 166
6.4.6 用直方圖來展示數組元素值 168
6.4.7 用數組來統計投擲骰子60 000 000次的結果 169
6.5 用字元數組來存儲和處理字元串 170
6.5.1 定義一個字元串來初始化一個字元數組 170
6.5.2 用一個字元初始化列表來初始化一個字元數組 170
6.5.3 訪問一個字元串中的字元 170
6.5.4 針對一個字元數組的輸入 170
6.5.5 將一個代表字元串的字元數組輸出 171
6.5.6 字元數組的演示 171
6.6 靜態局部數組和自動局部數組 171
6.7 將數組傳遞給函式 173
6.8 數組排序 176
6.9 案例分析:用數組來計算平均值、中值和眾數 178
6.10 數組查找 181
6.10.1 線性查找數組元素 181
6.10.2 折半查找數組元素 182
6.11 多下標數組 185
6.11.1 雙下標數組概述 185
6.11.2 雙下標數組的初始化 186
6.11.3 設定某行元素的元素值 187
6.11.4 計算雙下標數組中所有元素值的總和 187
6.11.5 對雙下標數組的處理 188
6.12 可變長數組 190
6.13 安全的C程式設計 192
第7章 C指針 207
7.1 引言 207
7.2 指針變數的定義和初始化 208
7.3 指針運算符 208
7.4 按引用向函式傳遞實參 210
7.5 對指針使用const限定符 213
7.5.1 用指向可變數據的可變指針將字元串中的字元改成大寫 214
7.5.2 用指向常量數據的可變指針逐個列印字元串中的字元 215
7.5.3 試圖修改指向可變數據的常量指針 217
7.5.4 試圖修改指向常量數據的常量指針 217
7.6 採用按引用傳遞的冒泡排序 218
7.7 sizeof運算符 220
7.8 指針表達式和指針算術運算 222
7.8.1 指針算術運算中可使用的運算符 222
7.8.2 將指針對準一個數組 222
7.8.3 給指針加上一個整數 222
7.8.4 給指針減去一個整數 223
7.8.5 指針增1或減1 223
7.8.6 從一個指針中減去另一個指針 223
7.8.7 將一個指針賦予另一個指針 223
7.8.8 指向void的指針 224
7.8.9 指針的比較 224
7.9 指針和數組的關係 224
7.9.1 指針/偏移量表示法 224
7.9.2 指針/下標表示法 225
7.9.3 不能用指針算術運算來修改數組名 225
7.9.4 指針下標和指針偏移量的使用演示 225
7.9.5 用數組和指針實現字元串的複製 226
7.10 指針數組 227
7.11 案例研究:模擬撲克牌的洗牌和發牌 228
7.12 指向函式的指針 232
7.12.1 按升序或降序進行排序 232
7.12.2 使用函式指針來創建一個選單驅動的系統 234
7.13 安全的C程式設計 236
第8章 C字元和字元串 252
8.1 引言 252
8.2 字元串和字元基礎 253
8.3 字元處理函式館 254
8.3.1 函式isdigit,isalpha,isalnum和isxdigit 255
8.3.2 函式islower,isupper,tolower和toupper 256
8.3.3 函式isspace,iscntrl,ispunct,isprint和isgraph 257
8.4 字元串轉換函式 258
8.4.1 函式strtod 258
8.4.2 函式strtol 259
8.4.3 函式strtoul 260
8.5 標準輸入/輸出庫函式 260
8.5.1 函式fgets和putchar 261
8.5.2 函式getchar 261
8.5.3 函式sprintf 262
8.5.4 函式sscanf 263
8.6 字元串處理函式館中的字元串處理函式 263
8.6.1 函式strcpy和 strncpy 264
8.6.2 函式strcat和 strncat 264
8.7 字元串處理函式館中的比較函式 265
8.8 字元串處理函式館中的查找函式 266
8.8.1 函式strchr 267
8.8.2 函式strcspn 268
8.8.3 函式strpbrk 268
8.8.4 函式strrchr 268
8.8.5 函式strspn 269
8.8.6 函式strstr 269
8.8.7 函式strtok 270
8.9 字元串處理函式館中的記憶體處理函式 271
8.9.1 函式memcpy 271
8.9.2 函式memmove 272
8.9.3 函式memcmp 272
8.9.4 函式memchr 273
8.9.5 函式memset 273
8.10 字元串處理函式館中的其他函式 274
8.10.1 函式strerror 274
8.10.2 函式strlen 274
8.11 安全的C程式設計 275
第9章 C格式化輸入/輸出 285
9.1 引言 285
9.2 流 286
9.3 用printf函式實現格式化輸出 286
9.4 列印整數 286
9.5 列印浮點數 287
9.5.1 轉換說明符e,E或f 288
9.5.2 轉換說明符g或G 288
9.5.3 浮點數轉換說明符的使用演示 288
9.6 列印字元串或字元 289
9.7 其他的轉換說明符 289
9.8 帶域寬和精度的列印 290
9.8.1 在列印整數時指定域寬 290
9.8.2 在列印整數、浮點數和字元串時指定精度 291
9.8.3 同時指定域寬和精度 292
9.9 在printf函式的格式控制字元串中使用標記 292
9.9.1 右對齊和左對齊 292
9.9.2 用與不用+標記來列印正數和負數 293
9.9.3 使用空格標記 293
9.9.4 使用#標記 293
9.9.5 使用0標記 294
9.10 列印文本和轉義序列 294
9.11 用scanf函式讀取格式化的輸入 294
9.11.1 scanf的語法 295
9.11.2 scanf的轉換說明符 295
9.11.3 用scanf來讀入整數 295
9.11.4 用scanf來讀入浮點數 296
9.11.5 用scanf來讀入字元和字元串 296
9.11.6 在scanf中使用掃描集 297
9.11.7 在scanf中指定域寬 298
9.11.8 在輸入流中忽略掉特定字元 298
9.12 安全的C程式設計 299
第10章 結構體、共用體、位操作和枚舉類型 305
10.1 引言 306
10.2 結構體的定義 306
10.2.1 自引用結構體 306
10.2.2 定義結構體類型的變數 307
10.2.3 結構體標記名 307
10.2.4 可對結構體實施的操作 307
10.3 結構體的初始化 308
10.4 用.和?>訪問結構體成員 308
10.5 在函式中使用結構體 310
10.6 typedef的使用 310
10.7 實例分析:高性能的洗牌與發牌模擬 311
10.8 共用體 313
10.8.1 聲明一個共用體 313
10.8.2 可對共用體執行的操作 313
10.8.3 在聲明語句中對共用體進行初始化 313
10.8.4 使用共用體的演示 314
10.9 位運算符 315
10.9.1 按位顯示一個無符號整數 315
10.9.2 使函式displayBits更具可擴展性和可移植性 316
10.9.3 按位與、按位或、按位異或和按位取反運算符的使用 317
10.9.4 按位左移和按位右移運算符的使用 319
10.9.5 按位運算後賦值運算符 320
10.10 位域 321
10.10.1 位域的定義 321
10.10.2 用位域來表示一張紙牌的花色、牌面值和顏色 321
10.10.3 無名位域 323
10.11 枚舉常量 323
10.12 匿名的結構體和共用體 324
10.13 安全的C程式設計 325
第11章 檔案處理 334
11.1 引言 334
11.2 檔案與流 334
11.3 順序存取檔案的創建 335
11.3.1 指向FILE結構體類型的指針 336
11.3.2 用函式fopen打開檔案 336
11.3.3 用函式feof來檢查檔案結束標記 337
11.3.4 用函式fprintf向檔案寫入數據 337
11.3.5 用函式fclose來關閉檔案 337
11.3.6 檔案打開模式 338
11.4 從順序存取檔案中讀取數據 339
11.4.1 檔案位置指針的復位 340
11.4.2 信用查詢程式 340
11.5 隨機存取檔案 343
11.6 隨機存取檔案的創建 343
11.7 隨機地向一個隨機存取檔案中寫入數據 345
11.7.1 用函式fseek來定位檔案位置指針 346
11.7.2 出錯檢查 347
11.8 從一個隨機存取檔案中讀取數據 347
11.9 案例研究:事務處理程式 348
11.10 安全的C程式設計 352
第12章 C數據結構 361
12.1 引言 361
12.2 自引用結構體 362
12.3 動態記憶體分配 362
12.4 鍊表 363
12.4.1 insert函式 367
12.4.2 delete函式 368
12.4.3 printList函式 369
12.5 堆疊 370
12.5.1 push函式 372
12.5.2 pop函式 373
12.5.3 堆疊的套用 373
12.6 佇列 374
12.6.1 enqueue函式 377
12.6.2 dequeue函式 378
12.7 樹 378
12.7.1 insertNode函式 381
12.7.2 遍歷函式inOrder,preOrder和postOrder 381
12.7.3 消除冗餘 382
12.7.4 二元樹搜尋 382
12.7.5 二元樹的其他操作 382
12.8 安全的C程式設計 382
第13章 C預處理 392
13.1 引言 392
13.2 #include預處理命令 393
13.3 #define預處理命令:符號常量 393
13.4 #define預處理命令:宏 394
13.4.1 帶一個參數的宏 394
13.4.2 帶兩個參數的宏 395
13.4.3 宏連續符 395
13.4.4 #undef預處理命令 395
13.4.5 標準庫函式和宏 395
13.4.6 不要把帶有副作用的表達式放在宏中 395
13.5 條件編譯 395
13.5.1 # if…# endif預處理命令 395
13.5.2 用# if…# endif將代碼塊注釋起來 396
13.5.3 對調試代碼的條件編譯 396
13.6 #error和#pragma預處理命令 396
13.7 #和# #運算符 397
13.8 行號 397
13.9 預定義的符號常量 397
13.10 斷言 398
13.11 安全的C程式設計 398
第14章 C語言的其他專題 402
14.1 引言 402
14.2 I/O的重定向 402
14.2.1 用<來重定向輸入 403
14.2.2 用|來重定向輸入 403
14.2.3 重定向輸出 403
14.3 可變長的參數列表 403
14.4 使用命令行實參 405
14.5 編譯由多個源檔案組成的程式 406
14.5.1 在別的檔案中對全局變數進行extern聲明 406
14.5.2 函式原型 406
14.5.3 用static來限制作用域 407
14.5.4 Makefile 407
14.6 使用exit和atexit終止程式 407
14.7 整型和浮點型常量的後綴 408
14.8 信號處理 409
14.9 動態記憶體分配:函式calloc和realloc 410
14.10 用goto實現無條件轉移 411
第15章 C++,一個更好的C;介紹對象技術 416
15.1 引言 417
15.2 C++ 417
15.3 簡單程式:兩個整數相加 417
15.3.1 用C++編寫加法程式 417
15.3.2 頭檔案 418
15.3.3 main函式 418
15.3.4 變數聲明 418
15.3.5 標準輸出流和標準輸入流對象 418
15.3.6 std::endl流操縱符 418
15.3.7 關於std::的說明 419
15.3.8 級聯的流輸出 419
15.3.9 main函式中的return語句不是必需的 419
15.3.10 運算符重載 419
15.4 C++標準庫 419
15.5 頭檔案 420
15.6 內聯函式 421
15.7 C++關鍵字 422
15.8 引用和引用形參 423
15.8.1 引用形參 423
15.8.2 按值和按引用傳參 423
15.8.3 函式體內引用作為別名 425
15.8.4 從函式返回引用 426
15.8.5 未初始化的引用的錯誤提示信息 426
15.9 空形參列表 426
15.10 默認實參 426
15.11 一元作用域運算符 428
15.12 函式重載 429
15.13 函式模板 431
15.13.1 定義一個函式模板 431
15.13.2 使用函式模板 431
15.14 對象技術與UML簡介 432
15.14.1 對象技術基本概念 433
15.14.2 類、數據成員和成員函式 434
15.14.3 面向對象分析與設計 434
15.14.4 統一建模語言 435
15.15 C++標準庫類模板vector簡介 435
15.15.1 C風格的基於指針的數組 435
15.15.2 使用類模板vector 435
15.15.3 異常處理:處理下標越界 439
15.16 本章小結 439
第16章 類:對象和字元串簡介 444
16.1 引言 444
16.2 定義一個具有成員函式的類 444
16.3 定義一個有參成員函式 446
16.4 數據成員,set成員函式與get成員函式 449
16.5 用構造函式初始化對象 453
16.6 將類放在單獨的檔案中以增強重用性 455
16.7 將接口與實現分離 458
16.8 用set函式驗證數據 462
16.9 本章小結 465
第17章 類:深入剖析;拋出異常 471
17.1 引言 471
17.2 Time類的案例學習 472
17.3 類域和訪問類的成員 477
17.4 訪問函式和工具函式 477
17.5 Time類的案例學習:具有默認實參的構造函式 478
17.6 析構函式 482
17.7 構造函式與析構函式的調用時間 482
17.8 Time類的案例學習:隱蔽陷阱——返回private數據成員的引用或指針 485
17.9 默認按成員賦值 487
17.10 const對象和const成員函式 488
17.11 組合:對象作為類的成員 490
17.12 友元函式和友元類 494
17.13 使用this指針 495
17.14 static類成員 499
17.15 本章小結 503
第18章 運算符重載;string類 511
18.1 引言 511
18.2 使用標準庫模板類string中的重載運算符 512
18.3 運算符重載基礎 514
18.4 重載二元運算符 515
18.5 重載流插入和流讀取運算符 516
18.6 重載一元運算符 518
18.7 重載一元前置和後置++和???運算符 519
18.8 案例學習:Date類 520
18.9 動態記憶體管理 523
18.10 案例學習:Array類 525
18.10.1 使用Array類 525
18.10.2 Array類定義 528
18.11 作為類的成員和作為非成員函式的運算符函式的比較 534
18.12 類型轉換 534
18.13 explicit構造函式和轉換運算符 535
18.14 重載函式調用運算符( ) 537
18.15 本章小結 537
第19章 面向對象編程:繼承 546
19.1 引言 546
19.2 基類和派生類 547
19.3 基類和派生類的關係 548
19.3.1 創建並使用CommissionEmployee類 549
19.3.2 不用繼承創建BasePlusCommissionEmployee類 552
19.3.3 創建CommissionEmployee-BasePlusCommissionEmployee繼承層次結構 556
19.3.4 使用protected數據的CommissionEmployee-BasePlusCommission-Employee繼承層次
結構 559
19.3.5 使用private數據的CommissionEmployee-BasePlusCommission Employee繼承層次結構 561
19.4 派生類的構造函式與析構函式 565
19.5 public,protected和private繼承 566
19.6 關於繼承的軟體工程 567
19.7 本章小結 567
第20章 面向對象編程:多態 571
20.1 引言 571
20.2 多態簡介:多態的視頻遊戲 572
20.3 繼承層次結構中對象間的關係 572
20.3.1 派生類對象調用基類的函式 573
20.3.2 派生類指針指向基類對象 575
20.3.3 用基類指針調用派生類成員函式 576
20.3.4 虛函式和虛析構函式 577
20.4 類型域和switch語句 582
20.5 抽象類和純虛函式 582
20.6 案例學習:利用多態的工資系統 583
20.6.1 創建抽象基類Employee 584
20.6.2 創建具體的派生類SalariedEmployee 587
20.6.3 創建具體的派生類CommissionEmployee 588
20.6.4 創建間接的具體派生類BasePlusCommissionEmployee 590
20.6.5 演示多態處理 591
20.7 (選講)多態、虛函式以及動態聯編的“幕後機制” 594
20.8 案例學習:利用多態的和運行時類型信息的工資系統,通過向下類型轉換,dynamic_cast,
typeid以及type_info使用運行時類型信息 596
20.9 本章小結 599
第21章 輸入/輸出流:深入學習 603
21.1 引言 603
21.2 流 604
21.2.1 傳統流與標準流的比較 604
21.2.2 iostream類庫頭檔案 605
21.2.3 輸入/輸出流類和對象 605
21.3 輸出流 606
21.3.1 輸出char*變數 607
21.3.2 用成員函式put輸出字元 607
21.4 輸入流 607
21.4.1 成員函式get和getline 608
21.4.2 istream類的成員函式peek,putback和ignore 610
21.4.3 類型安全的I/O 610
21.5 用read,write和gcount進行無格式I/O 610
21.6 流操縱符簡介 611
21.6.1 設定整數流的基數:dec,oct,hex和setbase 611
21.6.2 設定浮點數精度(precision,setprecision) 612
21.6.3 設定域寬(width,setw) 613
21.6.4 用戶定義的輸出流操縱符 614
21.7 流格式狀態和流操縱符 614
21.7.1 設定尾數零和十進制小數點(showpoint) 615
21.7.2 設定對齊(left,right和internal) 616
21.7.3 設定填充字元(fill,setfill) 616
21.7.4 設定整數流的基數(dec,oct,hex,showbase) 617
21.7.5 設定浮點數;科學計數法和定點計數法(scientific、fixed) 618
21.7.6 大/小寫控制(uppercase) 619
21.7.7 指定布爾格式(boolalpha) 619
21.7.8 用成員函式flags設定和重置格式狀態 620
21.8 流錯誤狀態 621
21.9 將輸出流綁定到輸入流上 622
21.10 本章小結 622
第22章 異常處理:深入學習 631
22.1 引言 631
22.2 實例:處理除數為0的異常 632
22.3 重新拋出異常 635
22.4 棧展開 637
22.5 何時使用異常處理 638
22.6 構造函式、析構函式與異常處理 638
22.7 異常與繼承 639
22.8 處理new故障 639
22.9 unique_ptr類與動態記憶體分配 641
22.10 標準庫的異常層次結構 643
22.11 本章小結 645
第23章 模板 649
23.1 引言 649
22.2 類模板 649
23.3 函式模操作類模板的特化對象 653
23.4 非類型形參 654
23.5 模板類型形參的默認實參 654
23.6 重載函式模板 654
23.7 本章小結 655
附錄A 運算符優先權表 657
附錄B ASCII字元集 660
附錄C 數值系統 661
附錄D 排序:一個深入的分析 670
附錄E 多執行緒及其他C11和C99專題 684
索引 70