本書是全球暢銷的C語言教程之一。全書系統(tǒng)地介紹了4種當(dāng)今流行的程序設(shè)計方法面向過程、基于對象、面向?qū)ο笠约胺盒途幊,?nèi)容全面、生動、易懂,作者由淺入深地介紹了結(jié)構(gòu)化編程及軟件工程的基本概念,從簡單的概念到*終的完整的語言描述,清晰、準確、透徹、詳細地講解了C語言,尤其注重程序設(shè)計思想和方法的介紹。相對于上一版,這一版在內(nèi)容方面新增加了C安全程序設(shè)計、"更上一層樓練習(xí)集,更新了C 和面向?qū)ο蟪绦蛟O(shè)計、基于Allegro的游戲編程、C99標準介紹等內(nèi)容。
學(xué)習(xí)C語言的經(jīng)典教材之一:
*提供了很多的基礎(chǔ)的、覆蓋面很廣的實例。
*綜合了C99和C11兩個標準的功能。
*增加安全的C程序設(shè)計章節(jié)。
*所有代碼都通過GNU gcc、Visual C 或者Xcode LLVM的測試
*所有代碼都采用GNU gdb、Visual C 或者Xcode來調(diào)試。
*緊扣時代發(fā)展的更上一層樓課后練習(xí)。
*介紹多線程和多核程序設(shè)計
Paul Deitel和Harvey Deitel是全球暢銷的編程語言教材和專業(yè)圖書作家,How to Program系列是其最負盛名的一套計算機編程教材,已經(jīng)銷售近40年,并被翻譯成中文在內(nèi)的十幾種語言。他們成立的Deitel & Associates公司是一家國際知名的企業(yè)培訓(xùn)和寫作公司, 專門進行計算機編程語言、對象技術(shù)、移動應(yīng)用開發(fā)及Internet和Web軟件技術(shù)方面的培訓(xùn)和寫作,出版了一流的編程專業(yè)的大學(xué)教材、 專業(yè)圖書以及LiveLessons視頻課程。
蘇小紅,哈爾濱工業(yè)大學(xué)計算機學(xué)院博士生導(dǎo)師,計算機應(yīng)用技術(shù)專家,研究領(lǐng)域主要是色彩匹配,信息融合,空間計算,人工神經(jīng)網(wǎng)絡(luò),進化算法,計算機圖形學(xué),灰色預(yù)測,彩色圖像處理等。
目 錄
第1章 計算機、因特網(wǎng)和萬維網(wǎng)導(dǎo)論1
1.1 引言2
1.2 計算機硬件和軟件2
1.2.1 摩爾定律2
1.2.2 計算機組成3
1.3 數(shù)據(jù)的層次結(jié)構(gòu)3
1.4 機器語言、匯編語言和高級語言5
1.5 C程序設(shè)計語言6
1.6 C標準庫7
1.7 C 和其他基于C的程序設(shè)計語言8
1.8 對象技術(shù)8
1.8.1 對象以汽車為例9
1.8.2 方法與類9
1.8.3 實例化9
1.8.4 軟件重用9
1.8.5 消息與方法調(diào)用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步:預(yù)處理及編譯一個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應(yīng)用程序12
1.10.1 在Windows命令提示符下運行一個C應(yīng)用程序13
1.10.2 使用Linux中的GNU C來運行一個C應(yīng)用程序15
1.10.3 使用Mac OS X終端來運行一個C應(yīng)用程序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)絡(luò)的網(wǎng)絡(luò)21
1.12.2 萬維網(wǎng):讓因特網(wǎng)對用戶更友好21
1.12.3 萬維網(wǎng)服務(wù)21
1.12.4 Ajax23
1.12.5 物聯(lián)網(wǎng)23
1.13 一些重要的軟件技術(shù)23
1.14 跟上信息技術(shù)的發(fā)展24
第2章 C語言程序設(shè)計入門28
2.1 引言28
2.2 一個簡單的C程序:打印一行文字28
2.3 另一個簡單的C程序:兩個整數(shù)求和31
2.4 存儲單元的基本概念35
2.5 C語言中的算術(shù)運算35
2.6 做出決策:相等和關(guān)系運算符38
2.7 安全的C程序設(shè)計41
第3章 結(jié)構(gòu)化的C程序設(shè)計51
3.1 引言51
3.2 算法51
3.3 偽代碼52
3.4 控制結(jié)構(gòu)52
3.5 if條件語句54
3.6 if…else條件語句54
3.7 while循環(huán)語句57
3.8 算法設(shè)計案例1:計數(shù)控制的循環(huán)58
3.9 自頂向下、逐步求精的算法設(shè)計案例2:標記控制的循環(huán)60
3.10 自頂向下、逐步求精的算法設(shè)計案例3:嵌套控制結(jié)構(gòu)65
3.11 賦值運算符67
3.12 增1和減1運算符68
3.13 安全的C程序設(shè)計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 結(jié)構(gòu)化程序設(shè)計小結(jié)101
4.13 安全的C程序設(shè)計105
第5章 C函數(shù)117
5.1 引言117
5.2 C語言中的程序模塊117
5.3 數(shù)學(xué)庫函數(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ù)調(diào)用堆棧及活動記錄堆棧幀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 遞歸應(yīng)用案例:斐波那契數(shù)列142
5.16 遞歸與迭代144
5.17 安全的C程序設(shè)計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)結(jié)構(gòu)來設(shè)置數(shù)組元素值163
6.4.2 在定義語句中用一個初始值列表來初始化一個數(shù)組164
6.4.3 用符號常量來定義數(shù)組的大小并通過計算來初始化數(shù)組元素165
6.4.4 數(shù)組元素值求和166
6.4.5 用數(shù)組來統(tǒng)計民意調(diào)查的結(jié)果166
6.4.6 用直方圖來展示數(shù)組元素值168
6.4.7 用數(shù)組來統(tǒng)計投擲骰子60 000 000次的結(jié)果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 設(shè)置某行元素的元素值187
6.11.4 計算雙下標數(shù)組中所有元素值的總和187
6.11.5 對雙下標數(shù)組的處理188
6.12 可變長數(shù)組190
6.13 安全的C程序設(shè)計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 指針表達式和指針算術(shù)運算222
7.8.1 指針算術(shù)運算中可使用的運算符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ù)組的關(guān)系224
7.9.1 指針/偏移量表示法224
7.9.2 指針/下標表示法225
7.9.3 不能用指針算術(shù)運算來修改數(shù)組名225
7.9.4 指針下標和指針偏移量的使用演示225
7.9.5 用數(shù)組和指針實現(xiàn)字符串的復(fù)制226
7.10 指針數(shù)組227
7.11 案例研究:模擬撲克牌的洗牌和發(fā)牌228
7.12 指向函數(shù)的指針232
7.12.1 按升序或降序進行排序232
7.12.2 使用函數(shù)指針來創(chuàng)建一個菜單驅(qū)動的系統(tǒng)234
7.13 安全的C程序設(shè)計236
第8章 C字符和字符串252
8.1 引言252
8.2 字符串和字符基礎(chǔ)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 字符串轉(zhuǎn)換函數(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ù)庫中的內(nèi)存處理函數(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程序設(shè)計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 轉(zhuǎn)換說明符e,E或f288
9.5.2 轉(zhuǎn)換說明符g或G288
9.5.3 浮點數(shù)轉(zhuǎn)換說明符的使用演示288
9.6 打印字符串或字符289
9.7 其他的轉(zhuǎn)換說明符289
9.8 帶域?qū)捄途鹊拇蛴?90
9.8.1 在打印整數(shù)時指定域?qū)?90
9.8.2 在打印整數(shù)、浮點數(shù)和字符串時指定精度291
9.8.3 同時指定域?qū)捄途?92
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 打印文本和轉(zhuǎn)義序列294
9.11 用scanf函數(shù)讀取格式化的輸入294
9.11.1 scanf的語法295
9.11.2 scanf的轉(zhuǎn)換說明符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中指定域?qū)?98
9.11.8 在輸入流中忽略掉特定字符298
9.12 安全的C程序設(shè)計299
第10章 結(jié)構(gòu)體、共用體、位操作和枚舉類型305
10.1 引言306
10.2 結(jié)構(gòu)體的定義306
10.2.1 自引用結(jié)構(gòu)體306
10.2.2 定義結(jié)構(gòu)體類型的變量307
10.2.3 結(jié)構(gòu)體標記名307
10.2.4 可對結(jié)構(gòu)體實施的操作307
10.3 結(jié)構(gòu)體的初始化308
10.4 用.和?>訪問結(jié)構(gòu)體成員308
10.5 在函數(shù)中使用結(jié)構(gòu)體310
10.6 typ