前言
第0章 從零開始 1
0.1 為什麼要用C 1
0.2 ANSI C標準 2
0.3 從C到C++ 3
0.4 從C和C++到Java 3
第1章 C語言概述 4
1.1 編程和預備知識 4
1.2 程序輸齣 4
1.3 變量、錶達式和賦值 7
1.4 使用#define和#include 9
1.5 使用printf()和scanf() 12
1.6 控製流 14
1.7 函數 19
1.8 數組、字符串和指針 24
1.8.1 數組 24
1.8.2 字符串 25
1.8.3 指針 28
1.9 文件 31
1.10 與操作係統有關的內容 35
1.10.1 編寫和運行C程序 35
1.10.2 中斷程序 36
1.10.3 輸入文件尾標誌 37
1.10.4 輸入和輸齣的重定嚮 37
1.11 總結 38
1.12 練習 39
第2章 詞法元素、操作符和C係統 45
2.1 字符和詞法元素 46
2.2 語法規則 48
2.3 注釋 49
2.4 關鍵字 50
2.5 標識符 50
2.6 常量 51
2.7 字符串常量 52
2.8 操作符和標點符號 53
2.9 操作符的優先級和結閤性 53
2.10 增值操作符和減值操作符 55
2.11 賦值操作符 56
2.12 例子:計算2的乘方 57
2.13 C係統 58
2.13.1 預處理器 59
2.13.2 標準函數庫 59
2.14 總結 62
2.15 練習 63
第3章 基本數據類型 69
3.1 聲明、錶達式和賦值 69
3.2 基本數據類型 71
3.3 字符和char數據類型 72
3.4 int數據類型 75
3.5 整數類型short、long和unsigned 76
3.6 浮點類型 77
3.7 typedef的用法 79
3.8 sizeof操作符 79
3.9 使用getchar()和putchar() 80
3.10 數學函數 82
3.10.1 使用abs()和fabs() 84
3.10.2 UNIX和數學函數庫 84
3.11 隱式類型轉換和強製類型轉換 84
3.11.1 整型提升 85
3.11.2 尋常算術轉換 85
3.11.3 強製類型轉換 86
3.12 十六進製和八進製常量 87
3.13 總結 89
3.14 練習 89
第4章 控製流 96
4.1 關係操作符、相等操作符和邏輯操作符 96
4.2 關係操作符和錶達式 97
4.3 相等操作符和錶達式 99
4.4 邏輯操作符和錶達式 100
4.5 復閤語句 103
4.6 錶達式和空語句 103
4.7 if和if-else語句 104
4.8 while語句 106
4.9 for語句 108
4.10 例子:布爾變量 110
4.11 逗號操作符 111
4.12 do語句 112
4.13 例子:斐波那契數 113
4.14 goto語句 115
4.15 break和continue語句 116
4.16 switch語句 117
4.17 條件操作符 118
4.18 總結 119
4.19 練習 120
第5章 函數 128
5.1 函數定義 128
5.2 return語句 130
5.3 函數原型 131
5.4 例子:創建乘方錶 132
5.5 從編譯器的角度觀察函數原型 133
5.6 函數定義順序的另一種風格 134
5.7 函數調用和傳值調用 134
5.8 開發大型程序 136
5.9 使用斷言 138
5.10 作用域規則 139
5.10.1 平行和嵌套代碼塊 140
5.10.2 以調試為目的使用代碼塊 140
5.11 存儲類型 141
5.11.1 auto存儲類型 141
5.11.2 extern存儲類型 141
5.11.3 register存儲類型 143
5.11.4 static存儲類型 143
5.12 靜態外部變量 144
5.13 默認初始化 145
5.14 遞歸 145
5.15 例子:漢諾塔 149
5.16 總結 152
5.17 練習 153
第6章 數組、指針和字符串 159
6.1 一維數組 159
6.1.1 初始化 160
6.1.2 下標 160
6.2 指針 161
6.3 傳引用調用 164
6.4 數組和指針之間的關係 165
6.5 指針運算和元素的大小 166
6.6 數組作為函數的實參 166
6.7 例子:冒泡排序 167
6.8 用calloc()和malloc()進行動態內存分配 168
6.9 例子:歸並和歸並排序 171
6.10 字符串 175
6.11 標準函數庫中的字符串處理函數 177
6.12 多維數組 180
6.12.1 二維數組 180
6.12.2 存儲映射函數 180
6.12.3 形式參數聲明 181
6.12.4 三維數組 182
6.12.5 初始化 182
6.12.6 使用typedef 183
6.13 指針數組 184
6.14 main()函數的參數 188
6.15 不規則數組 189
6.16 函數作為參數 190
6.17 例子:使用二分法尋找函數的根 192
6.18 函數指針數組 196
6.19 類型限定符const和volatile 199
6.20 總結 200
6.21 練習 202
第7章 位操作符和枚舉類型 214
7.1 位操作符和錶達式 214
7.1.1 按位求反 215
7.1.2 補碼 215
7.1.3 位邏輯操作符 216
7.1.4 左移位和右移位操作符 217
7.2 掩碼 218
7.3 軟件工具:打印int值的二進製形式 219
7.4 包裝和解包 220
7.5 枚舉類型 223
7.6 例子:“石頭、剪刀、布”遊戲 225
7.7 總結 229
7.8 練習 230
第8章 預處理器 235
8.1 #include的使用 235
8.2 使用#define 236
8.3 帶參數的宏 237
8.4 stddef.h中的類型定義和宏 239
8.5 例子:用qsort()進行排序 239
8.6 例子:帶參數的宏 243
8.7 stdio.h和ctype.h中的宏 246
8.8 條件編譯 247
8.9 預定義的宏 249
8.10 “#”和“##”操作符 249
8.11 assert()宏 250
8.12 使用#error和#pragma 250
8.13 行號 251
8.14 對應的函數 251
8.15 例子:快速排序 251
8.16 總結 254
8.17 練習 254
第9章 結構和聯閤 262
9.1 結構 262
9.2 訪問結構成員 264
9.3 操作符的優先級和結閤性的總結 267
9.4 在函數中使用結構 268
9.5 結構的初始化 269
9.6 例子:玩撲剋牌 269
9.7 聯閤 273
9.8 位字段 275
9.9 例子:訪問位和字節 276
9.10 ADT堆棧 277
9.11 總結 280
9.12 練習 281
第10章 結構和列錶處理 288
10.1 自引用的結構 288
10.2 綫性鏈錶 289
10.3 鏈錶操作 290
10.4 一些鏈錶處理函數 293
10.4.1 插入 294
10.4.2 刪除 295
10.5 堆棧 296
10.6 例子:波蘭記法和堆棧求值 298
10.7 隊列 303
10.8 二叉樹 306
10.8.1 二叉樹的遍曆 307
10.8.2 創建樹 308
10.9 普通的樹 309
10.9.1 遍曆 311
10.9.2 calloc()的用法以及樹的創建 311
10.10 總結 312
10.11 練習 313
第11章 輸入/輸齣和操作係統 318
11.1 輸齣函數printf() 318
11.2 輸入函數scanf() 321
11.3 fprintf()、fscanf()、sprintf()
和sscanf()函數 324
11.4 fopen()和fclose()函數 325
11.5 例子:對文件進行空間加倍 327
11.6 使用臨時文件和優雅函數 329
11.7 隨機訪問文件 331
11.8 文件描述符輸入/輸齣 332
11.9 文件訪問權限 333
11.10 在C程序內部執行命令 334
11.11 在C程序內部使用管道 335
11.12 環境變量 336
11.13 C編譯器 337
11.14 使用性能評估程序 338
11.15 函數庫 339
11.16 對C代碼進行計時 340
11.17 使用make 343
11.18 使用touch 347
11.19 其他有用的工具 348
11.20 總結 349
11.21 練習 350
第12章 高級應用 358
12.1 用fork()創建並發進程 358
12.2 進程的疊加:exec...()函數族係 360
12.3 使用pipe()實現進程間的通信 362
12.4 信號 363
12.5 例子:哲學傢用餐問題 365
12.6 矩陣的動態分配 368
12.6.1 為什麼二維數組無法滿足要求 368
12.6.2 用指針數組創建矩陣 369
12.6.3 調整下標範圍 371
12.6.4 一次分配所有內存 373
12.7 返迴狀態 374
12.8 總結 377
12.9 練習 378
第13章 從C到C++ 383
13.1 輸齣 383
13.2 輸入 384
13.3 函數 386
13.4 類和抽象數據類型 387
13.5 重載 389
13.6 構造函數和析構函數 390
13.7 麵嚮對象編程和繼承 392
13.8 多態 393
13.9 模闆 395
13.10 C++的異常 396
13.11 麵嚮對象編程的優點 396
13.12 總結 397
13.13 練習 398
第14章 從C到Java 402
14.1 輸齣 402
14.2 變量和類型 403
14.3 類和抽象數據類型 404
14.4 重載 406
14.5 類的創建和銷毀 406
14.6 麵嚮對象編程和繼承 406
14.7 多態和重寫方法 407
14.8 Applet 408
14.9 Java的異常 409
14.10 Java和OOP的優勢 410
14.11 總結 410
14.12 練習 411
附錄A 標準函數庫 413
附錄B C的語法 441
附錄C ANSI C與傳統C的比較 446
附錄D ASCII字符碼 452
附錄E 操作符的優先級和結閤性 454
· · · · · · (
收起)