本書通過程序示例講解C語(yǔ)言的眾多概念、函數(shù)和編程方法,幫助初學(xué)者更好地掌握C語(yǔ)言編程的內(nèi)容。
本書從C語(yǔ)言的基礎(chǔ)概念和編譯過程出發(fā),詳細(xì)講解C語(yǔ)言的數(shù)據(jù)類型、算術(shù)表達(dá)式、循環(huán)語(yǔ)句、判斷語(yǔ)句、數(shù)組、函數(shù)、結(jié)構(gòu)體、字符串、指針、位運(yùn)算、預(yù)處理器、輸入輸出操作等,以及goto語(yǔ)句、聯(lián)合體、逗號(hào)運(yùn)算符、限定符、命令行參數(shù)、動(dòng)態(tài)內(nèi)存分配、程序調(diào)試、面向?qū)ο蟪绦蛟O(shè)計(jì)等高級(jí)特性。此外,本書提供了大量練習(xí)題,幫助讀者鞏固實(shí)踐;并通過附錄提供C語(yǔ)言概要、標(biāo)準(zhǔn)C語(yǔ)言庫(kù)、使用GCC編譯程序、常見的編程錯(cuò)誤、C語(yǔ)言編譯器和集成開發(fā)環(huán)境等內(nèi)容。
本書適合想要零基礎(chǔ)入門C語(yǔ)言編程的讀者,也適合用作計(jì)算機(jī)等相關(guān)專業(yè)C語(yǔ)言課程的教學(xué)參考書。
(1)本書第一版至今超過25年,是幫助程序員掌握C語(yǔ)言編程的經(jīng)典圖書
(2)本書覆蓋目前常用的C11標(biāo)準(zhǔn),幫助讀者掌握必要且實(shí)用的C語(yǔ)言編程知識(shí)
(3)本書從簡(jiǎn)單基礎(chǔ)的任務(wù)開始,幫助讀者構(gòu)建高質(zhì)量的專業(yè)技術(shù)能力
(4)本書通過精心設(shè)計(jì)的示例和練習(xí)為讀者提供作者的寶貴實(shí)踐經(jīng)驗(yàn)
(5)本書提供常見錯(cuò)誤指南,可以幫助讀者構(gòu)建健壯、可靠的代碼
(6)本書作者具有30多年的C語(yǔ)言開發(fā)經(jīng)驗(yàn),曾是AT&T貝爾實(shí)驗(yàn)室的軟件顧問,在那里進(jìn)行過UNIX和C語(yǔ)言程序的開發(fā)和授課
史蒂芬·G. 寇肯(Stephen G. Kochan)具有30多年的C語(yǔ)言開發(fā)經(jīng)驗(yàn)。他曾是AT&T貝爾實(shí)驗(yàn)室的軟件顧問,在那里進(jìn)行過UNIX和C語(yǔ)言程序的開發(fā)和授課。他撰寫了多本關(guān)于編程和UNIX的經(jīng)典圖書,包括《Objective-C程序設(shè)計(jì)(第6版)》和《UNIX Linux OS X中的Shell編程(第4版)》等。
第 1章 一些基礎(chǔ)概念1
1.1 程序設(shè)計(jì)1
1.2 高級(jí)語(yǔ)言1
1.3 操作系統(tǒng)2
1.4 編譯程序2
1.5 集成開發(fā)環(huán)境4
1.6 語(yǔ)言解釋器5
第 2章 編譯并運(yùn)行你的第 一個(gè)程序6
2.1 編譯你的程序6
2.2 運(yùn)行你的程序7
2.3 理解你的第 一個(gè)程序7
2.4 顯示變量的值9
2.5 注釋11
2.6 練習(xí)題12
第3章 變量、數(shù)據(jù)類型和算術(shù)表達(dá)式14
3.1 理解數(shù)據(jù)類型和常量14
3.1.1 整數(shù)類型int14
3.1.2 浮點(diǎn)數(shù)類型float15
3.1.3 擴(kuò)展精度類型double16
3.1.4 單字符類型char16
3.1.5 布爾數(shù)據(jù)類型_Bool16
3.1.6 類型說明符:long、long long、short、unsigned和signed18
3.2 使用變量20
3.3 使用算術(shù)表達(dá)式21
3.4 運(yùn)算與賦值結(jié)合:賦值運(yùn)算符27
3.5 _Complex和_Imaginary類型28
3.6 練習(xí)題28
第4章 程序循環(huán)30
4.1 三角數(shù)30
4.2 for語(yǔ)句31
4.2.1 關(guān)系運(yùn)算符32
4.2.2 輸出對(duì)齊35
4.3 程序輸入36
4.3.1 嵌套的for循環(huán)37
4.3.2 for循環(huán)的變體39
4.4 while語(yǔ)句40
4.5 do語(yǔ)句43
4.5.1 break語(yǔ)句44
4.5.2 continue語(yǔ)句44
4.6 練習(xí)題45
第5章 做出決策47
5.1 if語(yǔ)句47
5.1.1 if-else結(jié)構(gòu)50
5.1.2 復(fù)合關(guān)系測(cè)試52
5.1.3 嵌套if語(yǔ)句54
5.1.4 else if結(jié)構(gòu)55
5.2 switch語(yǔ)句61
5.3 布爾變量63
5.4 條件運(yùn)算符66
5.5 練習(xí)題68
第6章 使用數(shù)組70
6.1 定義一個(gè)數(shù)組70
6.1.1 使用數(shù)組元素作為計(jì)數(shù)器73
6.1.2 生成斐波那契數(shù)75
6.1.3 使用數(shù)組生成素?cái)?shù)76
6.2 初始化數(shù)組78
6.3 字符數(shù)組79
6.3.1 使用數(shù)組的基數(shù)變換80
6.3.2 const限定符82
6.4 多維數(shù)組83
6.5 變長(zhǎng)數(shù)組85
6.6 練習(xí)題86
第7章 使用函數(shù)88
7.1 定義一個(gè)函數(shù)88
7.2 參數(shù)和局部變量91
7.2.1 函數(shù)原型聲明91
7.2.2 自動(dòng)局部變量92
7.3 返回函數(shù)結(jié)果93
7.4 函數(shù)調(diào)用97
7.4.1 聲明返回類型和參數(shù)類型99
7.4.2 檢查函數(shù)參數(shù)100
7.5 自頂向下編程技術(shù)101
7.6 函數(shù)與數(shù)組102
7.6.1 賦值運(yùn)算符105
7.6.2 數(shù)組排序106
7.6.3 多維數(shù)組108
7.7 全局變量112
7.8 自動(dòng)變量與靜態(tài)變量115
7.9 遞歸函數(shù)117
7.10 練習(xí)題119
第8章 使用結(jié)構(gòu)體121
8.1 結(jié)構(gòu)體的基礎(chǔ)知識(shí)121
8.2 用于存儲(chǔ)日期的結(jié)構(gòu)體121
8.3 函數(shù)與結(jié)構(gòu)體125
8.4 初始化結(jié)構(gòu)體132
8.5 結(jié)構(gòu)體數(shù)組133
8.6 包含結(jié)構(gòu)體的結(jié)構(gòu)體136
8.7 包含數(shù)組的結(jié)構(gòu)體138
8.8 結(jié)構(gòu)體變體140
8.9 練習(xí)題141
第9章 字符串143
9.1 復(fù)習(xí)字符串的基礎(chǔ)知識(shí)143
9.2 字符數(shù)組143
9.3 變長(zhǎng)字符串145
9.3.1 字符串的初始化與顯示147
9.3.2 判斷兩個(gè)字符串是否相等149
9.3.3 輸入字符串150
9.3.4 輸入單個(gè)字符152
9.3.5 空字符串156
9.4 轉(zhuǎn)義字符158
9.5 關(guān)于字符串常量的更多內(nèi)容160
9.6 字符串、結(jié)構(gòu)體和數(shù)組161
9.7 字符操作167
9.8 練習(xí)題169
第 10章 指針172
10.1 指針和間接性172
10.2 定義一個(gè)指針變量172
10.3 在表達(dá)式中使用指針175
10.4 使用指針和數(shù)據(jù)結(jié)構(gòu)176
10.4.1 包含指針的結(jié)構(gòu)體178
10.4.2 鏈表179
10.5 關(guān)鍵字const和指針185
10.6 指針和函數(shù)186
10.7 指針和數(shù)組191
10.7.1 稍許離題:程序優(yōu)化194
10.7.2 是數(shù)組還是指針?194
10.7.3 指向字符串的指針195
10.7.4 字符串常量和指針196
10.7.5 回顧遞增和遞減運(yùn)算符198
10.8 指針操作200
10.9 指向函數(shù)的指針201
10.10 指針和內(nèi)存地址202
10.11 練習(xí)題203
第 11章 位運(yùn)算205
11.1 位的基礎(chǔ)知識(shí)205
11.2 位運(yùn)算符206
11.2.1 按位與運(yùn)算符206
11.2.2 按位或運(yùn)算符208
11.2.3 按位異或運(yùn)算符209
11.2.4 二進(jìn)制求補(bǔ)運(yùn)算符209
11.2.5 左移運(yùn)算符211
11.2.6 右移運(yùn)算符211
11.2.7 移位函數(shù)212
11.2.8 循環(huán)移位213
11.3 位域215
11.4 練習(xí)題218
第 12章 預(yù)處理器220
12.1 #define語(yǔ)句220
12.1.1 程序的可擴(kuò)展性223
12.1.2 程序的可移植性224
12.1.3 更高級(jí)的定義類型225
12.1.4 #運(yùn)算符229
12.1.5 ##運(yùn)算符230
12.2 #include語(yǔ)句231
12.3 條件編譯233
12.3.1 #ifdef、#endif、#else和#ifndef語(yǔ)句233
12.3.2 #if和#elif預(yù)處理器語(yǔ)句234
12.3.3 #undef語(yǔ)句235
12.4 練習(xí)題236
第 13章 用枚舉數(shù)據(jù)類型、類型定義及數(shù)據(jù)類型轉(zhuǎn)換以擴(kuò)展數(shù)據(jù)類型237
13.1 枚舉數(shù)據(jù)類型237
13.2 typedef語(yǔ)句240
13.3 數(shù)據(jù)類型轉(zhuǎn)換242
13.3.1 符號(hào)擴(kuò)展243
13.3.2 參數(shù)轉(zhuǎn)換243
13.4 練習(xí)題244
第 14章 處理大型程序245
14.1 將你的程序分為多個(gè)文件245
14.2 模塊之間的通信247
14.2.1 外部變量247
14.2.2 靜態(tài)、外部變量和函數(shù)的對(duì)比249
14.2.3 有效地使用頭文件251
14.3 其他處理大型程序的工具252
14.3.1 make工具252
14.3.2 CVS工具254
14.3.3 UNIX工具:ar、grep、sed等命令254
第 15章 C語(yǔ)言中的輸入與輸出操作255
15.1 字符I O:getchar()與putchar()255
15.2 格式化I O:printf()與scanf()255
15.2.1 printf()函數(shù)256
15.2.2 scanf()函數(shù)261
15.3 文件的輸入和輸出操作264
15.3.1 將I O重定向到文件264
15.3.2 文件末尾266
15.4 處理文件的特殊函數(shù)267
15.4.1 fopen()函數(shù)267
15.4.2 getc()和putc()函數(shù)268
15.4.3 fclose()函數(shù)269
15.4.4 feof()函數(shù)270
15.4.5 fprintf()和fscanf()函數(shù)271
15.4.6 fgets()和fputs()函數(shù)271
15.4.7 stdin、stdout和stderr272
15.4.8 exit()函數(shù)272
15.4.9 重命名和刪除文件273
15.5 練習(xí)題273
第 16章 其他內(nèi)容及高級(jí)特性275
16.1 其他語(yǔ)言語(yǔ)句275
16.1.1 goto語(yǔ)句275
16.1.2 空語(yǔ)句275
16.2 使用聯(lián)合體276
16.3 逗號(hào)運(yùn)算符279
16.4 類型限定符279
16.4.1 register限定符279
16.4.2 volatile限定符280
16.4.3 restrict限定符280
16.5 命令行參數(shù)280
16.6 動(dòng)態(tài)內(nèi)存分配283
16.6.1 calloc()和malloc()函數(shù)284
16.6.2 sizeof運(yùn)算符284
16.6.3 free()函數(shù)286
16.7 練習(xí)題287
第 17章 調(diào)試程序288
17.1 使用預(yù)處理器調(diào)試288
17.2 用GDB調(diào)試程序293
17.2.1 處理變量295
17.2.2 顯示源文件296
17.2.3 控制程序的執(zhí)行296
17.2.4 獲得堆棧信息300
17.2.5 調(diào)用函數(shù)以及設(shè)置數(shù)組和結(jié)構(gòu)體301
17.2.6 使用GDB命令獲取幫助信息301
17.2.7 其他303
第 18章 面向?qū)ο蟪绦蛟O(shè)計(jì)305
18.1 到底什么是對(duì)象?305
18.2 實(shí)例和方法306
18.3 編寫一個(gè)處理分?jǐn)?shù)的C語(yǔ)言程序307
18.4 定義一個(gè)Objective-C類來處理分?jǐn)?shù)307
18.5 定義一個(gè)C 類來處理分?jǐn)?shù)311
18.6 定義一個(gè)C#類來處理分?jǐn)?shù)313
附錄A C語(yǔ)言概要316
A.1 雙字符序列與標(biāo)識(shí)符316
A.1.1 雙字符序列316
A.1.2 標(biāo)識(shí)符316
A.2 注釋317
A.3 常量317
A.3.1 整型常量317
A.3.2 浮點(diǎn)型常量318
A.3.3 字符型常量318
A.3.4 字符串常量319
A.3.5 枚舉常量319
A.4 數(shù)據(jù)類型和聲明320
A.4.1 聲明320
A.4.2 基本數(shù)據(jù)類型320
A.4.3 派生數(shù)據(jù)類型321
A.4.4 枚舉數(shù)據(jù)類型326
A.4.5 typedef語(yǔ)句326
A.4.6 類型限定符const、volatile和restrict327
A.5 表達(dá)式327
A.5.1 C語(yǔ)言運(yùn)算符總結(jié)328
A.5.2 常量表達(dá)式329
A.5.3 算術(shù)運(yùn)算符330
A.5.4 邏輯運(yùn)算符330
A.5.5 關(guān)系運(yùn)算符331
A.5.6 位運(yùn)算符331
A.5.7 遞增和遞減運(yùn)算符331
A.5.8 賦值運(yùn)算符332
A.5.9 條件運(yùn)算符332
A.5.10 類型轉(zhuǎn)換運(yùn)算符332
A.5.11 sizeof運(yùn)算符332
A.5.12 逗號(hào)運(yùn)算符333
A.5.13 數(shù)組的基本操作333
A.5.14 結(jié)構(gòu)體的基本操作333
A.5.15 指針的基本操作334
A.5.16 復(fù)合字面量335
A.5.17 基本數(shù)據(jù)類型的轉(zhuǎn)換335
A.6 存儲(chǔ)類和作用域336
A.6.1 函數(shù)336
A.6.2 變量336
A.7 函數(shù)337
A.7.1 函數(shù)定義337
A.7.2 函數(shù)調(diào)用338
A.7.3 函數(shù)指針338
A.8 語(yǔ)句339
A.8.1 復(fù)合語(yǔ)句339
A.8.2 break語(yǔ)句339
A.8.3 continue語(yǔ)句339
A.8.4 do語(yǔ)句339
A.8.5 for語(yǔ)句339
A.8.6 goto語(yǔ)句340
A.8.7 if語(yǔ)句340
A.8.8 空語(yǔ)句341
A.8.9 return語(yǔ)句341
A.8.10 switch語(yǔ)句341
A.8.11 while語(yǔ)句342
A.9 預(yù)處理器342
A.9.1 三字符組342
A.9.2 預(yù)處理器指令343
A.9.3 預(yù)定義標(biāo)識(shí)符346
附錄B 標(biāo)準(zhǔn)C語(yǔ)言庫(kù)347
B.1 標(biāo)準(zhǔn)頭文件347
B.1.1 347
B.1.2 347
B.1.3 348
B.1.4 348
B.1.5 349
B.2 字符串函數(shù)349
B.3 內(nèi)存函數(shù)351
B.4 字符函數(shù)352
B.5 I O函數(shù)353
B.6 內(nèi)存中的格式轉(zhuǎn)換函數(shù)357
B.7 字符串轉(zhuǎn)換為數(shù)字358
B.8 動(dòng)態(tài)內(nèi)存分配函數(shù)359
B.9 數(shù)學(xué)函數(shù)360
B.10 通用函數(shù)368
附錄C 使用GCC編譯程序371
C.1 通用命令格式371
C.2 命令行選項(xiàng)371
附錄D 常見的程序錯(cuò)誤373
附錄E 參考資源377
E.1 C語(yǔ)言377
E.1.1 圖書377
E.1.2 網(wǎng)站377
E.1.3 網(wǎng)絡(luò)論壇377
E.2 C語(yǔ)言編譯器和集成開發(fā)環(huán)境377
E.2.1 GCC378
E.2.2 MinGW378
E.2.3 Cygwin378
E.2.4 Visual Studio378
E.2.5 CodeWarrior378
E.2.6 Code::Blocks378