時至今日,C語言仍然是計算機領域的通用語言之一,但今天的C語言已經(jīng)和最初的時候大不相同了。本書最主要的一個目的就是通過一種"現(xiàn)代方法"來介紹C語言,書中強調(diào)標準C,強調(diào)軟件工程,不再強調(diào)"手工優(yōu)化"。這一版中緊密結(jié)合了C99標準,并與C89標準進行對照,補充了C99中的特性。本書分為C語言的基礎特性、C語言的高級特性、C語言標準庫和參考資料4個部分。每章末尾都有一個"問與答"小節(jié)給出一系列與該章內(nèi)容相關的問題及答案,此外還包含適量的習題。 本書是為大學本科階段的C語言課程編寫的教材,同時也非常適合作為其他課程的輔助用書。
C語言的經(jīng)典之作
"近10年來好的一部C語言著作"
討論了標準C和C標準庫的全部特性
強調(diào)軟件工程和現(xiàn)代編程理念
突出工業(yè)界的實踐、實際經(jīng)驗和編程風格
已被包括哈佛大學、麻省理工學院、斯坦福大學等全球200多所學校采用為教材
K. N. King 世界知名的計算機程序設計教育家,現(xiàn)為佐治亞州立大學數(shù)學與計算機科學系副教授。他擁有耶魯大學計算機科學碩士學位,加州大學伯克利分校計算機科學博士學位,曾任教于佐治亞理工學院。除本書外,他還撰寫了廣受歡迎的著作Modula-2: A Complete Guide 和Java Programming: From the Beginning,并在Dr.Dobb's Journal等雜志上發(fā)表了許多文章。業(yè)余時間,King教授還在多部電影中扮演過角色。
目 錄
第1章 C語言概述 1
1.1 C語言的歷史 1
1.1.1 起源 1
1.1.2 標準化 1
1.1.3 基于C的語言 2
1.2 C語言的優(yōu)缺點 3
1.2.1 C語言的優(yōu)點 3
1.2.2 C語言的缺點 3
1.2.3 高效地使用C語言 4
問與答 5
第2章 C語言基本概念 7
2.1 編寫一個簡單的C程序 7
程序 顯示雙關語 7
2.1.1 編譯和鏈接 8
2.1.2 集成開發(fā)環(huán)境 8
2.2 簡單程序的一般形式 9
2.2.1 指令 9
2.2.2 函數(shù) 9
2.2.3 語句 10
2.2.4 顯示字符串 10
2.3 注釋 11
2.4 變量和賦值 12
2.4.1 類型 12
2.4.2 聲明 13
2.4.3 賦值 13
2.4.4 顯示變量的值 14
程序 計算箱子的空間重量 14
2.4.5 初始化 15
2.4.6 顯示表達式的值 16
2.5 讀入輸入 16
程序 計算箱子的空間重量(改進版) 16
2.6 定義常量的名字 17
程序 華氏溫度轉(zhuǎn)換為攝氏溫度 17
2.7 標識符 18
2.8 C程序的書寫規(guī)范 19
問與答 21
練習題 23
編程題 24
第3章 格式化輸入/輸出 26
3.1 printf函數(shù) 26
3.1.1 轉(zhuǎn)換說明 27
程序 用printf函數(shù)格式化數(shù) 28
3.1.2 轉(zhuǎn)義序列 28
3.2 scanf函數(shù) 29
3.2.1 scanf函數(shù)的工作方法 30
3.2.2 格式串中的普通字符 31
3.2.3 易混淆的printf函數(shù)和scanf函數(shù) 32
程序 分數(shù)相加 32
問與答 33
練習題 34
編程題 35
第4章 表達式 36
4.1 算術(shù)運算符 36
程序 計算通用產(chǎn)品代碼的校驗位 38
4.2 賦值運算符 39
4.2.1 簡單賦值 40
4.2.2 左值 41
4.2.3 復合賦值 41
4.3 自增運算符和自減運算符 42
4.4 表達式求值 43
4.5 表達式語句 45
問與答 45
練習題 47
編程題 49
第5章 選擇語句 50
5.1 邏輯表達式 50
5.1.1 關系運算符 50
5.1.2 判等運算符 51
5.1.3 邏輯運算符 51
5.2 if語句 52
5.2.1 復合語句 53
5.2.2 else子句 53
5.2.3 級聯(lián)式if語句 54
程序 計算股票經(jīng)紀人的傭金 55
5.2.4 "懸空else"的問題 56
5.2.5 條件表達式 57
5.2.6 C89中的布爾值 58
5.2.7 C99中的布爾值 58
5.3 switch語句 59
程序 顯示法定格式的日期 61
問與答 62
練習題 65
編程題 67
第6章 循環(huán) 69
6.1 while語句 69
程序 顯示平方表 71
程序 數(shù)列求和 71
6.2 do語句 72
程序 計算整數(shù)的位數(shù) 73
6.3 for語句 73
6.3.1 for語句的慣用法 74
6.3.2 在for語句中省略表達式 75
6.3.3 C99中的for語句 75
6.3.4 逗號運算符 76
程序 顯示平方表(改進版) 77
6.4 退出循環(huán) 78
6.4.1 break語句 78
6.4.2 continue語句 78
6.4.3 goto語句 79
程序 賬簿結(jié)算 80
6.5 空語句 81
問與答 83
練習題 84
編程題 85
第7章 基本類型 88
7.1 整數(shù)類型 88
7.1.1 C99中的整數(shù)類型 90
7.1.2 整數(shù)常量 90
7.1.3 C99中的整數(shù)常量 91
7.1.4 整數(shù)溢出 91
7.1.5 讀/寫整數(shù) 91
程序 數(shù)列求和(改進版) 92
7.2 浮點類型 93
7.2.1 浮點常量 94
7.2.2 讀/寫浮點數(shù) 94
7.3 字符類型 94
7.3.1 字符操作 95
7.3.2 有符號字符和無符號字符 95
7.3.3 算術(shù)類型 96
7.3.4 轉(zhuǎn)義序列 96
7.3.5 字符處理函數(shù) 97
7.3.6 用scanf和printf讀/寫字符 98
7.3.7 用getchar和putchar讀/寫字符 98
程序 確定消息的長度 99
7.4 類型轉(zhuǎn)換 100
7.4.1 常用算術(shù)轉(zhuǎn)換 101
7.4.2 賦值過程中的轉(zhuǎn)換 102
7.4.3 C99中的隱式轉(zhuǎn)換 103
7.4.4 強制類型轉(zhuǎn)換 103
7.5 類型定義 105
7.5.1 類型定義的優(yōu)點 105
7.5.2 類型定義和可移植性 105
7.6 sizeof運算符 106
問與答 107
練習題 109
編程題 110
第8章 數(shù)組 113
8.1 一維數(shù)組 113
8.1.1 數(shù)組下標 113
程序 數(shù)列反向 115
8.1.2 數(shù)組初始化 115
8.1.3 指定初始化式 116
程序 檢查數(shù)中重復出現(xiàn)的數(shù)字 116
8.1.4 對數(shù)組使用sizeof運算符 117
程序 計算利息 118
8.2 多維數(shù)組 119
8.2.1 多維數(shù)組初始化 120
8.2.2 常量數(shù)組 121
程序 發(fā)牌 121
8.3 C99中的變長數(shù)組 122
問與答 123
練習題 124
編程題 125
第9章 函數(shù) 129
9.1 函數(shù)的定義和調(diào)用 129
程序 計算平均值 129
程序 顯示倒計數(shù) 130
程序 顯示雙關語(改進版) 131
9.1.1 函數(shù)定義 132
9.1.2 函數(shù)調(diào)用 133
程序 判定素數(shù) 134
9.2 函數(shù)聲明 135
9.3 實際參數(shù) 136
9.3.1 實際參數(shù)的轉(zhuǎn)換 137
9.3.2 數(shù)組型實際參數(shù) 138
9.3.3 變長數(shù)組形式參數(shù) 140
9.3.4 在數(shù)組參數(shù)聲明中使用static 141
9.3.5 復合字面量 141
9.4 return語句 142
9.5 程序終止 143
9.6 遞歸 144
程序 快速排序 146
問與答 147
練習題 150
編程題 153
第10章 程序結(jié)構(gòu) 155
10.1 局部變量 155
10.1.1 靜態(tài)局部變量 156
10.1.2 形式參數(shù) 156
10.2 外部變量 156
10.2.1 示例:用外部變量實現(xiàn)棧 156
10.2.2 外部變量的利與弊 157
程序 猜數(shù) 158
10.3 程序塊 161
10.4 作用域 162
10.5 構(gòu)建C程序 163
程序 給一手牌分類 163
問與答 169
練習題 169
編程題 170
第11章 指針 172
11.1 指針變量 172
11.2 取地址運算符和間接尋址運算符 173
11.2.1 取地址運算符 173
11.2.2 間接尋址運算符 174
11.3 指針賦值 174
11.4 指針作為參數(shù) 176
程序 找出數(shù)組中的較大元素和最小元素 177
11.5 指針作為返回值 179
問與答 180
練習題 181
編程題 182
第12章 指針和數(shù)組 184
12.1 指針的算術(shù)運算 184
12.1.1 指針加上整數(shù) 185
12.1.2 指針減去整數(shù) 185
12.1.3 兩個指針相減 186
12.1.4 指針比較 186
12.1.5 指向復合常量的指針 186
12.2 指針用于數(shù)組處理 186
12.3 用數(shù)組名作為指針 188
程序 數(shù)列反向(改進版) 189
12.3.1 數(shù)組型實際參數(shù)(改進版) 189
12.3.2 用指針作為數(shù)組名 191
12.4 指針和多維數(shù)組 191
12.4.1 處理多維數(shù)組的元素 191
12.4.2 處理多維數(shù)組的行 192
12.4.3 處理多維數(shù)組的列 192
12.4.4 用多維數(shù)組名作為指針 192
12.5 C99中的指針和變長數(shù)組 193
問與答 194
練習題 195
編程題 197
第13章 字符串 198
13.1 字符串字面量 198
13.1.1 字符串字面量中的轉(zhuǎn)義序列 198
13.1.2 延續(xù)字符串字面量 199
13.1.3 如何存儲字符串字面量 199
13.1.4 字符串字面量的操作 200
13.1.5 字符串字面量與字符常量 200
13.2 字符串變量 200
13.2.1 初始化字符串變量 201
13.2.2 字符數(shù)組與字符指針 202
13.3 字符串的讀和寫 203
13.3.1 用printf函數(shù)和puts函數(shù)寫字符串 203
13.3.2 用scanf函數(shù)和gets函數(shù)讀字符串 203
13.3.3 逐個字符讀字符串 204
13.4 訪問字符串中的字符 205
13.5 使用C語言的字符串庫 206
13.5.1 strcpy函數(shù) 207
13.5.2 strlen函數(shù) 208
13.5.3 strcat函數(shù) 208
13.5.4 strcmp函數(shù) 209
程序 顯示一個月的提醒列表 209
13.6 字符串慣用法 211
13.6.1 搜索字符串的結(jié)尾 211
13.6.2 復制字符串 213
13.7 字符串數(shù)組 214
程序 核對行星的名字 217
問與答 218
練習題 220
編程題 222
第14章 預處理器 225
14.1 預處理器的工作原理 225
14.2 預處理指令 227
14.3 宏定義 227
14.3.1 簡單的宏 227
14.3.2 帶參數(shù)的宏 229
14.3.3 #運算符 231
14.3.4 ##運算符 231
14.3.5 宏的通用屬性 232
14.3.6 宏定義中的圓括號 233
14.3.7 創(chuàng)建較長的宏 233
14.3.8 預定義宏 234
14.3.9 C99中新增的預定義宏 235
14.3.10 空的宏參數(shù) 236
14.3.11 參數(shù)個數(shù)可變的宏 236
14.3.12 __func__標識符 237
14.4 條件編譯 237
14.4.1 #if指令和#endif指令 238
14.4.2 defined運算符 238
14.4.3 #ifdef指令和#ifndef指令 239
14.4.4 #elif指令和#else指令 239
14.4.5 使用條件編譯 240
14.5 其他指令 240
14.5.1 #error指令 240
14.5.2 #line指令 241
14.5.3 #pragma指令 242
14.5.4 _Pragma運算符 242
問與答 243
練習題 245
第15章 編寫大型程序 248
15.1 源文件 248
15.2 頭文件 249
15.2.1 #include指令 249
15.2.2 共享宏定義和類型定義 250
15.2.3 共享函數(shù)原型 251
15.2.4 共享變量聲明 252
15.2.5 嵌套包含 253
15.2.6 保護頭文件 253
15.2.7 頭文件中的#error指令 254
15.3 把程序劃分成多個文件 254
程序 文本格式化 255
15.4 構(gòu)建多文件程序 260
15.4.1 makefile 260
15.4.2 鏈接期間的錯誤 262
15.4.3 重新構(gòu)建程序 262
15.4.4 在程序外定義宏 264
問與答 264
練習題 265
編程題 266
第16章 結(jié)構(gòu)、聯(lián)合和枚舉 267
16.1 結(jié)構(gòu)變量 267
16.1.1 結(jié)構(gòu)變量的聲明 267
16.1.2 結(jié)構(gòu)變量的初始化 269
16.1.3 指定初始化 269
16.1.4 對結(jié)構(gòu)的操作 270
16.2 結(jié)構(gòu)類型 270
16.2.1 結(jié)構(gòu)標記的聲明 271
16.2.2 結(jié)構(gòu)類型的定義 272
16.2.3 結(jié)構(gòu)作為參數(shù)和返回值 272
16.2.4 復合字面量 273
16.3 嵌套的數(shù)組和結(jié)構(gòu) 274
16.3.1 嵌套的結(jié)構(gòu) 274
16.3.2 結(jié)構(gòu)數(shù)組 274
16.3.3 結(jié)構(gòu)數(shù)組的初始化 275
程序 維護零件數(shù)據(jù)庫 275
16.4 聯(lián)合 281
16.4.1 用聯(lián)合來節(jié)省空間 282
16.4.2 用聯(lián)合來構(gòu)造混合的數(shù)據(jù)結(jié)構(gòu) 284
16.4.3 為聯(lián)合添加"標記字段" 284
16.5 枚舉 285
16.5.1 枚舉標記和類型名 286
16.5.2 枚舉作為整數(shù) 286
16.5.3 用枚舉聲明"標記字段" 286
問與答 287
練習題 289
編程題 293
第17章 指針的高級應用 294
17.1 動態(tài)存儲分配 294
17.1.1 內(nèi)存分配函數(shù) 294
17.1.2 空指針 295
17.2 動態(tài)分配字符串 296
17.2.1 使用malloc函數(shù)為字符串分配內(nèi)存 296
17.2.2 在字符串函數(shù)中使用動態(tài)存儲分配 296
17.2.3 動態(tài)分配字符串的數(shù)組 297
程序 顯示一個月的提醒列表(改進版) 297
17.3 動態(tài)分配數(shù)組 299
17.3.1 使用malloc函數(shù)為數(shù)組分配存儲空間 299
17.3.2 calloc函數(shù) 300
17.3.3 realloc函數(shù) 300
17.4 釋放存儲空間 301
17.4.1 free函數(shù) 301
17.4.2 "懸空指針"問題 301
17.5 鏈表 302
17.5.1 聲明結(jié)點類型 302
17.5.2 創(chuàng)建結(jié)點 303
17.5.3 ->運算符 303
17.5.4 在鏈表的開始處插入結(jié)點 304
17.5.5 搜索鏈表 306
17.5.6 從鏈表中刪除結(jié)點 307
17.5.7 有序鏈表 308
程序 維護零件數(shù)據(jù)庫(改進版) 309
17.6 指向指針的指針 313
17.7 指向函數(shù)的指針 314
17.7.1 函數(shù)指針作為參數(shù) 314
17.7.2 qsort函數(shù) 314
17.7.3 函數(shù)指針的其他用途 316
程序 列三角函數(shù)表 317
17.8 受限指針 318
17.9 靈活數(shù)組成員 319
問與答 320
練習題 323
編程題 325
第18章 聲明 327
18.1 聲明的語法 327
18.2 存儲類型 328
18.2.1 變量的性質(zhì) 328
18.2.2 auto存儲類型 329
18.2.3 static存儲類型 329
18.2.4 extern存儲類型 330
18.2.5 register存儲類型 331
18.2.6 函數(shù)的存儲類型 332
18.2.7 小結(jié) 332
18.3 類型限定符 333
18.4 聲明符 334
18.4.1 解釋復雜聲明 335
18.4.2 使用類型定義來簡化聲明 336
18.5 初始化式 336
18.6 內(nèi)聯(lián)函數(shù) 337
18.6.1 內(nèi)聯(lián)定義 338
18.6.2 對內(nèi)聯(lián)函數(shù)的限制 339
18.6.3 在GCC中使用內(nèi)聯(lián)函數(shù) 339
問與答 339
練習題 342
第19章 程序設計 345
19.1 模塊 345
19.1.1 內(nèi)聚性與耦合性 347
19.1.2 模塊的類型 347
19.2 信息隱藏 347
19.3 抽象數(shù)據(jù)類型 350
19.3.1 封裝 351
19.3.2 不完整類型 351
19.4 棧抽象數(shù)據(jù)類型 352
19.4.1 為棧抽象數(shù)據(jù)類型定義接口 352
19.4.2 用定長數(shù)組實現(xiàn)棧抽象數(shù)據(jù)類型 353
19.4.3 改變棧抽象數(shù)據(jù)類型中數(shù)據(jù)項的類型 354
19.4.4 用動態(tài)數(shù)組實現(xiàn)棧抽象數(shù)據(jù)類型 355
19.4.5 用鏈表實現(xiàn)棧抽象數(shù)據(jù)類型 357
19.5 抽象數(shù)據(jù)類型的設計問題 359
19.5.1 命名慣例 359
19.5.2 錯誤處理 359
19.5.3 通用抽象數(shù)據(jù)類型 359
19.5.4 新語言中的抽象數(shù)據(jù)類型 360
問與答 360
練習題 361
編程題 362
第20章 底層程序設計 363
20.1 位運算符 363
20.1.1 移位運算符 363
20.1.2 按位求反運算符、按位與運算符、按位異或運算符和按位或運算符 364
20.1.3 用位運算符訪問位 365
20.1.4 用位運算符訪問位域 366
程序 XOR加密 366
20.2 結(jié)構(gòu)中的位域 367
20.3 其他底層技術(shù) 369
20.3.1 定義依賴機器的類型 369
20.3.2 用聯(lián)合提供數(shù)據(jù)的多個視角 370
20.3.3 將指針作為地址使用 371
程序 查看內(nèi)存單元 371
20.3.4 volatile類型限定符 373
問與答 374
練習題 374
編程題 376
第21章 標準庫 377
21.1 標準庫的使用 377
21.1.1 對標準庫中所用名字的限制 377
21.1.2 使用宏隱藏的函數(shù) 378
21.2 C89標準庫概述 378
21.3 C99標準庫更新 380
21.4 :常用定義 381
21.5 :布爾類型和值 381
問與答 382
練習題 382
編程題 383
第22章 輸入/輸出 384
22.1 流 384
22.1.1 文件指針 385
22.1.2 標準流和重定向 385
22.1.3 文本文件與二進制文件 385
22.2 文件操作 386
22.2.1 打開文件 386
22.2.2 模式 387
"我沉浸在閱讀的過程中,我迫切地想用這本書作為授課教材。" ——Karen Reid,多倫多大學計算機科學系博學講師 "我將這本書用作工程系新生的教材。它語言簡潔,闡述清晰,并且覆蓋了C語言的方方面面,非常適用于初學者。" ——Maekus Bussmann,多倫多大學機械工業(yè)工程系教授 "這是我目前讀到過的一本好的C語言書籍,15年前如果有這本書的話,我大概會少走很多彎路。" ——互動網(wǎng)讀者評論
書挺不錯的!內(nèi)容很細!確實值得購買!尤其對于新學者!
老外寫的書,真詳細啊!還有比這本更好的嗎?看了很多電子版的C語言教材,最終選擇這本,非常滿意,值得推薦!當當?shù)奈锪饕操澮粋€,過年時段,也兩天到哈!
作者的言語極為謙虛,介紹C語言特別詳細,講的很詳細
只有部分比較底層的概念沒看說清楚,外國的寫作風格相比老譚 和 清華大出版的藍皮的那本教材好,以前翻過2頁同學的老譚的C,沒法看...可能是我看外國寫的書比較多的原因...N年沒碰C了重新溫習下
書不錯,物流非常快,晚上10點多下單,第二天上午就送到了
質(zhì)量很好,知識面很全,有很高的參考價值,值得好好研究下!
買這本書時一直在糾結(jié)要不要換買C primer,后來還是選擇了這本:這本書講訴了軟件工程和現(xiàn)代編程方法,語法是死的,但人的思維是活的,編程能力的提高實質(zhì)_是編程思維的提高,原因僅此而已。啰嗦一句:紙質(zhì)很好。
很好的,聽別人推薦說很好,現(xiàn)在看的確挺好 講的很詳細
已經(jīng)看完,C語言講解全面,而且有講解部分陷阱,編程規(guī)范。很不錯,入門級的首選,比四大經(jīng)典之一的c語言程序,好多了。
非常好的一本C語言書籍,講解特別詳細,幾乎所有疑慮,書中都能找到答案。
書很好,內(nèi)容全面,而且講解詳細,不知道比一些國內(nèi)書高到哪里去了。
紙質(zhì)很好,是正品,講解也很全面,很適合我這種初學者
很不錯,書內(nèi)容非常細致,不愧是c語言第一書,幫助很大,紙質(zhì)很好,非常滿意
我是一個大一新生,感覺很有幫助,推薦嘔!站在巨人的肩上,就是這樣
C語言程序設計:現(xiàn)代方法很不錯的一本書,正在學習中!!!
的確是好書,最適合一邊操作一邊學習。理論結(jié)合實際。不愧是最好的C語言教科書。至少我是這么認為
老師推薦下購買的,確實很細,學到很多知識,強化了c語言。好評!
這本書對于我這個初學者對比其他書我覺得都沒這本c語言好學。
C語言,一門很老的語言,但是至今仍然霸占著霸主地位。很多經(jīng)典的c書籍都年代久遠,想要看現(xiàn)代方法的就看這一本。
C語言入門的一本書,是我的編程啟蒙讀物,想學C語言非常推薦這一本,比直接啃英文的C Bible好多了。
近年來最好的C語言書了,一直沒買,看的PDF,終于買來收藏了。有很多新的思維,值得學習。
很喜歡的一本書,因為貴猶豫了好久才買,不過確實很好看,很喜歡。很值得喜愛C語言的同志學習閱讀啊
油墨味極重,手上都沾有怪味。書稍有褶皺,應是運輸包裝問題。但內(nèi)容很好,書推薦,建議實體店買。
書很厚實,印刷不錯。內(nèi)容很詳細,C語言各方面都講到了。不過,對于初學者來,本書沒有給出推薦的C語言編譯器(軟件),所以初學者可能對選哪個編譯器感到迷茫。個人建議:如果是人生第一門編程語言、完全零基礎入門的話,那用VC配合本書足矣;等到對C有了較多的了解后,再轉(zhuǎn)向GCC。
剛送來的包裝很簡陋,但是并沒有讓書有任何破損,也就無所謂了。紙質(zhì)很好,網(wǎng)上的強烈推薦,買來加強一下C語言基礎
C語言入門的一本書,是我的編程啟蒙讀物,想學C語言非常推薦這一本
比譚浩強那本好太多了,高校的教材用譚浩強的那本完全是誤人子弟,希望高校的C語言教材換成這本。