本書是全球暢銷的C語言教程之一。全書系統(tǒng)地介紹了4種當今流行的程序設計方法面向過程、基于對象、面向對象以及泛型編程,內容全面、生動、易懂,作者由淺入深地介紹了結構化編程及軟件工程的基本概念,從簡單的概念到*終的完整的語言描述,清晰、準確、透徹、詳細地講解了C語言,尤其注重程序設計思想和方法的介紹。相對于上一版,這一版在內容方面新增加了C安全程序設計、"更上一層樓練習集,更新了C 和面向對象程序設計、基于Allegro的游戲編程、C99標準介紹等內容。
學習C語言的經典教材之一:
*提供了很多的基礎的、覆蓋面很廣的實例。
*綜合了C99和C11兩個標準的功能。
*增加安全的C程序設計章節(jié)。
*所有代碼都通過GNU gcc、Visual C 或者Xcode LLVM的測試
*所有代碼都采用GNU gdb、Visual C 或者Xcode來調試。
*緊扣時代發(fā)展的更上一層樓課后練習。
*介紹多線程和多核程序設計
Paul Deitel和Harvey Deitel是全球暢銷的編程語言教材和專業(yè)圖書作家,How to Program系列是其最負盛名的一套計算機編程教材,已經銷售近40年,并被翻譯成中文在內的十幾種語言。他們成立的Deitel & Associates公司是一家國際知名的企業(yè)培訓和寫作公司, 專門進行計算機編程語言、對象技術、移動應用開發(fā)及Internet和Web軟件技術方面的培訓和寫作,出版了一流的編程專業(yè)的大學教材、 專業(yè)圖書以及LiveLessons視頻課程。
蘇小紅,哈爾濱工業(yè)大學計算機學院博士生導師,計算機應用技術專家,研究領域主要是色彩匹配,信息融合,空間計算,人工神經網(wǎng)絡,進化算法,計算機圖形學,灰色預測,彩色圖像處理等。
目 錄
第1章 計算機、因特網(wǎng)和萬維網(wǎng)導論1
1.1 引言2
1.2 計算機硬件和軟件2
1.2.1 摩爾定律2
1.2.2 計算機組成3
1.3 數(shù)據(jù)的層次結構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程序開發(fā)環(huán)境10
1.9.1 第1步:創(chuàng)建一個C程序11
1.9.2 第2步和第3步:預處理及編譯一個C程序11
1.9.3 第4步:鏈接11
1.9.4 第5步:裝載11
1.9.5 第6步:執(zhí)行12
1.9.6 程序運行時可能會出現(xiàn)的問題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 操作系統(tǒng)19
1.11.1 Windows 一個專有的操作系統(tǒng)19
1.11.2 Linux 一個開源的操作系統(tǒng)19
1.11.3 蘋果公司的Mac OS X;面向iPhone、iPad 和iPod Touch的iOS操作系統(tǒng)20
1.11.4 谷歌公司的Android操作系統(tǒng)20
1.12 因特網(wǎng)和萬維網(wǎng)20
1.12.1 因特網(wǎng):計算機網(wǎng)絡的網(wǎng)絡21
1.12.2 萬維網(wǎng):讓因特網(wǎng)對用戶更友好21
1.12.3 萬維網(wǎng)服務21
1.12.4 Ajax23
1.12.5 物聯(lián)網(wǎng)23
1.13 一些重要的軟件技術23
1.14 跟上信息技術的發(fā)展24
第2章 C語言程序設計入門28
2.1 引言28
2.2 一個簡單的C程序:打印一行文字28
2.3 另一個簡單的C程序:兩個整數(shù)求和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循環(huán)語句57
3.8 算法設計案例1:計數(shù)控制的循環(huán)58
3.9 自頂向下、逐步求精的算法設計案例2:標記控制的循環(huán)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 循環(huán)的基本原理84
4.3 計數(shù)控制的循環(huán)85
4.4 for循環(huán)語句86
4.5 for語句:注意事項88
4.6 使用 for語句的例子89
4.7 switch多重選擇語句91
4.8 do…while循環(huán)語句96
4.9 break和continue語句97
4.10 邏輯運算符98
4.11 區(qū)分相等運算符(= =)和賦值運算符(=)100
4.12 結構化程序設計小結101
4.13 安全的C程序設計105
第5章 C函數(shù)117
5.1 引言117
5.2 C語言中的程序模塊117
5.3 數(shù)學庫函數(shù)118
5.4 函數(shù)119
5.5 函數(shù)定義120
5.5.1 square函數(shù)120
5.5.2 maximum函數(shù)123
5.6 函數(shù)原型:一個深入的剖析123
5.7 函數(shù)調用堆棧及活動記錄堆棧幀125
5.8 頭文件128
5.9 按值或按引用傳遞參數(shù)129
5.10 隨機數(shù)的生成129
5.11 案例分析:運氣游戲;引入enum133
5.12 存儲類型135
5.13 作用域的規(guī)定137
5.14 遞歸139
5.15 遞歸應用案例:斐波那契數(shù)列142
5.16 遞歸與迭代144
5.17 安全的C程序設計146
第6章 C數(shù)組161
6.1 引言162
6.2 數(shù)組162
6.3 數(shù)組定義163
6.4 數(shù)組實例163
6.4.1 定義一個數(shù)組并用循環(huán)結構來設置數(shù)組元素值163
6.4.2 在定義語句中用一個初始值列表來初始化一個數(shù)組164
6.4.3 用符號常量來定義數(shù)組的大小并通過計算來初始化數(shù)組元素165
6.4.4 數(shù)組元素值求和166
6.4.5 用數(shù)組來統(tǒng)計民意調查的結果166
6.4.6 用直方圖來展示數(shù)組元素值168
6.4.7 用數(shù)組來統(tǒng)計投擲骰子60 000 000次的結果169
6.5 用字符數(shù)組來存儲和處理字符串170
6.5.1 定義一個字符串來初始化一個字符數(shù)組170
6.5.2 用一個字符初始化列表來初始化一個字符數(shù)組170
6.5.3 訪問一個字符串中的字符170
6.5.4 針對一個字符數(shù)組的輸入170
6.5.5 將一個代表字符串的字符數(shù)組輸出171
6.5.6 字符數(shù)組的演示171
6.6 靜態(tài)局部數(shù)組和自動局部數(shù)組171
6.7 將數(shù)組傳遞給函數(shù)173
6.8 數(shù)組排序176
6.9 案例分析:用數(shù)組來計算平均值、中值和眾數(shù)178
6.10 數(shù)組查找181
6.10.1 線性查找數(shù)組元素181
6.10.2 折半查找數(shù)組元素182
6.11 多下標數(shù)組185
6.11.1 雙下標數(shù)組概述185
6.11.2 雙下標數(shù)組的初始化186
6.11.3 設置某行元素的元素值187
6.11.4 計算雙下標數(shù)組中所有元素值的總和187
6.11.5 對雙下標數(shù)組的處理188
6.12 可變長數(shù)組190
6.13 安全的C程序設計192
第7章 C指針207
7.1 引言207
7.2 指針變量的定義和初始化208
7.3 指針運算符208
7.4 按引用向函數(shù)傳遞實參210
7.5 對指針使用const限定符213
7.5.1 用指向可變數(shù)據(jù)的可變指針將字符串中的字符改成大寫214
7.5.2 用指向常量數(shù)據(jù)的可變指針逐個打印字符串中的字符215
7.5.3 試圖修改指向可變數(shù)據(jù)的常量指針217
7.5.4 試圖修改指向常量數(shù)據(jù)的常量指針217
7.6 采用按引用傳遞的冒泡排序218
7.7 sizeof運算符220
7.8 指針表達式和指針算術運算222
7.8.1 指針算術運算中可使用的運算符222
7.8.2 將指針對準一個數(shù)組222
7.8.3 給指針加上一個整數(shù)222
7.8.4 給指針減去一個整數(shù)223
7.8.5 指針增1或減1223
7.8.6 從一個指針中減去另一個指針223
7.8.7 將一個指針賦予另一個指針223
7.8.8 指向void的指針224
7.8.9 指針的比較224
7.9 指針和數(shù)組的關系224
7.9.1 指針/偏移量表示法224
7.9.2 指針/下標表示法225
7.9.3 不能用指針算術運算來修改數(shù)組名225
7.9.4 指針下標和指針偏移量的使用演示225
7.9.5 用數(shù)組和指針實現(xiàn)字符串的復制226
7.10 指針數(shù)組227
7.11 案例研究:模擬撲克牌的洗牌和發(fā)牌228
7.12 指向函數(shù)的指針232
7.12.1 按升序或降序進行排序232
7.12.2 使用函數(shù)指針來創(chuàng)建一個菜單驅動的系統(tǒng)234
7.13 安全的C程序設計236
第8章 C字符和字符串252
8.1 引言252
8.2 字符串和字符基礎253
8.3 字符處理函數(shù)庫254
8.3.1 函數(shù)isdigit,isalpha,isalnum和isxdigit255
8.3.2 函數(shù)islower,isupper,tolower和toupper256
8.3.3 函數(shù)isspace,iscntrl,ispunct,isprint和isgraph257
8.4 字符串轉換函數(shù)258
8.4.1 函數(shù)strtod258
8.4.2 函數(shù)strtol259
8.4.3 函數(shù)strtoul260
8.5 標準輸入/輸出庫函數(shù)260
8.5.1 函數(shù)fgets和putchar261
8.5.2 函數(shù)getchar261
8.5.3 函數(shù)sprintf262
8.5.4 函數(shù)sscanf263
8.6 字符串處理函數(shù)庫中的字符串處理函數(shù)263
8.6.1 函數(shù)strcpy和 strncpy264
8.6.2 函數(shù)strcat和 strncat264
8.7 字符串處理函數(shù)庫中的比較函數(shù)265
8.8 字符串處理函數(shù)庫中的查找函數(shù)266
8.8.1 函數(shù)strchr267
8.8.2 函數(shù)strcspn268
8.8.3 函數(shù)strpbrk268
8.8.4 函數(shù)strrchr268
8.8.5 函數(shù)strspn269
8.8.6 函數(shù)strstr269
8.8.7 函數(shù)strtok270
8.9 字符串處理函數(shù)庫中的內存處理函數(shù)271
8.9.1 函數(shù)memcpy271
8.9.2 函數(shù)memmove272
8.9.3 函數(shù)memcmp272
8.9.4 函數(shù)memchr273
8.9.5 函數(shù)memset273
8.10 字符串處理函數(shù)庫中的其他函數(shù)274
8.10.1 函數(shù)strerror274
8.10.2 函數(shù)strlen274
8.11 安全的C程序設計275
第9章 C格式化輸入/輸出285
9.1 引言285
9.2 流286
9.3 用printf函數(shù)實現(xiàn)格式化輸出286
9.4 打印整數(shù)286
9.5 打印浮點數(shù)287
9.5.1 轉換說明符e,E或f288
9.5.2 轉換說明符g或G288
9.5.3 浮點數(shù)轉換說明符的使用演示288
9.6 打印字符串或字符289
9.7 其他的轉換說明符289
9.8 帶域寬和精度的打印290
9.8.1 在打印整數(shù)時指定域寬290
9.8.2 在打印整數(shù)、浮點數(shù)和字符串時指定精度291
9.8.3 同時指定域寬和精度292
9.9 在printf函數(shù)的格式控制字符串中使用標記292
9.9.1 右對齊和左對齊292
9.9.2 用與不用 標記來打印正數(shù)和負數(shù)293
9.9.3 使用空格標記293
9.9.4 使用#標記293
9.9.5 使用0標記294
9.10 打印文本和轉義序列294
9.11 用scanf函數(shù)讀取格式化的輸入294
9.11.1 scanf的語法295
9.11.2 scanf的轉換說明符295
9.11.3 用scanf來讀入整數(shù)295
9.11.4 用scanf來讀入浮點數(shù)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 在函數(shù)中使用結構體310
10.6 typ