The C Programming Language

The C Programming Language

The C Programming Language譯作《C程序設計語言》,是由著名的計算機科學家Brian W. Kernighan和C語言之父的Dennis M. Ritchie合著的一部計算機科學著作,是第一部介紹C語言編程方法的書籍。它是一本必讀的程序設計語言方面的參考書。它在C語言的發展和普及過程中起到了非常重要的作用,被視為是C語言的業界標準規範,而且至今仍然廣泛使用。它也被公認為計算機技術著作的典範,以清晰簡潔的文字講述而著稱。書中用"hello world"為實例開始講解程序設計,也已經成為程序設計語言圖書的傳統。

本書的講述深入淺出,配合典型例證,通俗易懂,實用性強,適合作為大專院校計算機專業或非計算機專業的C語言教材,也可以作為從事計算機相關軟硬體開發的技術人員的參考書。在計算機發展的歷史上,沒有哪一種程序設計語言像C語言這樣應用如此廣泛。

目錄

正文


出版者的話
專家指導委員會
中文版序
譯者序
校譯者簡介
第1版序
引言
第1章 導言 1
1.1 入門 1
1.2 變數與算術表達式 3
1.3 for語句 8
1.5 字元輸入/輸出 9
1.5.1 文件複製 10
1.5.2 字元計數 11
1.5.3 行計數 13
1.5.4 單詞計數 14
1.6 數組 15
1.7 函數 17
.1.8 參數—傳值調用 19
1.9 字元數組 20
1.10 外部變數與作用域 22
第2章 類型、運算符與表達式 27
2.1 變數名 27
2.2 數據類型及長度 27
2.3 常量 28
2.4 聲明 31
2.5 算術運算符 32
2.6 關係運算符與邏輯運算符 32
2.7 類型轉換 33
2.8 自增運算符與自減運算符 37
2.9 按位運算符 38
2.10 賦值運算符與表達式 40
2.11 條件表達式 41
2.12 運算符優先順序與求值次序 42
第3章 控制流 45
3.1 語句與程序塊 45
3.2 if-else語句 45
3.3 else-if語句 46
3.4 switch語句 48
3.5 while循環與for循環 49
3.6 do-while循環 52
3.7 break語句與continue語句 53
3.8 goto語句與標號 54
第4章 函數與程序結構 57
4.1 函數的基本知識 57
4.2 返回非整型值的函數 60
4.3 外部變數 62
4.4 作用域規則 68
4.5 頭文件 69
4.6 靜態變數 70
4.7 寄存器變數 71
4.8 程序塊結構 72
4.9 初始化 72
4.10 遞歸 73
4.11 c預處理器 75
4.11.1 文件包含 75
4.11.2 宏替換 76
4.11.3 條件包含 78
第5章 指針與數組 79
5.1 指針與地址 79
5.2 指針與函數參數 81
5.3 指針與數組 83
5.4 地址算術運算 86
5.5 字元指針與函數 89
5.6 指針數組以及指向指針的指針 92
5.7 多維數組 95
5.8 指針數組的初始化 97
5.9 指針與多維數組 97
5.10 命令行參數 98
5.11 指向函數的指針 102
5.12 複雜聲明 105
第6章 結構 111
6.1 結構的基本知識 111
6.2 結構與函數 113
6.3 結構數組 115
6.4 指向結構的指針 119
6.5 自引用結構 121
6.6 表查找 125
6.7 類型定義(typedef) 127
6.8 聯合 128
6.9 位欄位 130
第7章 輸入與輸出 133
7.1 標準輸入/輸出 133
7.2 格式化輸出—printf函數 135
7.3 變長參數表 136
7.4 格式化輸入—scanf函數 137
7.5 文件訪問 140
7.6 錯誤處理—stderr和exit 143
7.7 行輸入和行輸出 144
7.8 其他函數 145
7.8.1 字元串操作函數 145
7.8.2 字元類別測試和轉換函數 146
7.8.3 ungetc函數 146
7.8.4 命令執行函數 146
7.8.5 存儲管理函數 147
7.8.6 數學函數 147
7.8.7 隨機數發生器函數 148
第8章 unix系統介面 149
8.1 文件描述符 149
8.2 低級i/o—read和write 150
8.3 open、creat、close和unlink 151
8.4 隨機訪問—lseek 153
8.5 實例—fopen和getc函數的實現 154
8.6 實例—目錄列表 157
8.7 實例—存儲分配程序 162
附錄a 參考手冊 167
a.1 引言 167
a.2 詞法規則 167
a.2.1 記號 167
a.2.2 註釋 167
a.2.3 標識符 167
a.2.4 關鍵字 168
a.2.5 常量 168
a.2.6 字元串字面值 170
a.3 語法符號 170
a.4 標識符的含義 170
a.4.1 存儲類 171
a.4.2 基本類型 171
a.4.3 派生類型 172
a.4.4 類型限定符 172
a.5 對象和左值 172
a.6 轉換 173
a.6.1 整型提升 173
a.6.2 整型轉換 173
a.6.3 整數和浮點數 173
a.6.4 浮點類型 173
a.6.5 算術類型轉換 173
a.6.6 指針和整數 174
a.6.7 void 175
a.6.8 指向void的指針 175
a.7 表達式 175
a.7.1 指針生成 176
a.7.2 初等表達式 176
a.7.3 後綴表達式 177
a.7.4 一元運算符 179
a.7.5 強制類型轉換 180
a.7.6 乘法類運算符 180
a.7.7 加法類運算符 181
a.7.8 移位運算符 181
a.7.9 關係運算符 182
a.7.10 相等類運算符 182
a.7.11 按位與運算符 183
a.7.12 按位異或運算符 183
a.7.13 按位或運算符 183
a.7.14 邏輯與運算符 183
a.7.15 邏輯或運算符 183
a.7.16 條件運算符 184
a.7.17 賦值表達式 184
a.7.18 逗號運算符 185
a.7.19 常量表達式 185
a.8 聲明 185
a.8.1 存儲類說明符 186
a.8.2 類型說明符 187
a.8.3 結構和聯合聲明 188
a.8.4 枚舉 191
a.8.5 聲明符 191
a.8.6 聲明符的含義 192
a.8.7 初始化 195
a.8.8 類型名 197
a.8.9 typedef 198
a.8.10 類型等價 199
a.9 語句 199
a.9.1 帶標號語句 199
a.9.2 表達式語句 199
a.9.3 複合語句 200
a.9.4 選擇語句 200
a.9.5 循環語句 201
a.9.6 跳轉語句 201
a.10 外部聲明 202
a.10.1 函數定義 202
a.10.2 外部聲明 204
a.11 作用域與連接 204
a.11.1 詞法作用域 205
a.11.2 連接 205
a.12 預處理 205
a.12.1 三字元序列 206
a.12.2 行連接 206
a.12.3 宏定義和擴展 206
a.12.4 文件包含 208
a.12.5 條件編譯 209
a.12.6 行控制 210
a.12.7 錯誤信息生成 210
a.12.8 pragma 210
a.12.9 空指令 210
a.12.10 預定義名字 211
a.13 語法 211
附錄b 標準庫 219
b.1 輸入與輸出:[stdio.h] 219
b.1.1 文件操作 220
b.1.2 格式化輸出 221
b.1.3 格式化輸入 223
b.1.4 字元輸入/輸出函數 224
b.1.5 直接輸入/輸出函數 225
b.1.6 文件定位函數 225
b.1.7 錯誤處理函數 226
b.2 字元類別測試:[ctype.h] 226
b.3 字元串函數:[string.h] 227
b.4 數學函數:[math.h] 228
b.5 實用函數:[stdlib.h] 229
b.6 診斷:[assert.h] 232
b.7 可變參數表:[stdarg.h] 232
b.8 非局部跳轉:[setjmp.h] 232
b.9 信號:[signal.h] 233
b.10 日期與時間函數:[time.h] 234
b.11 與具體實現相關的限制:
[limits.h] 和 [float.h] 236
附錄c 變更小結 237
索引 241