學習任何程序設計語言的最佳方法都是創(chuàng)建良好的程序,C 語言也不例外。一旦決定編寫程序我們就會發(fā)現,總是有至少兩種方法可以實現。那么,如何才能找到最好的方法來實現程序?本書就能幫助讀者解決此類問題。本書是一本C 語言程序設計的經典教材。多年來,本書被很多工程和科學研究所及院校指定為學習教材。
本書這一版本(第17 版)除了講解C 語言中基本的函數、指針、控制指令、數據類型、數組、字符串、輸入輸出、位操作等內容外,還增加了C 語言程序設計的各個主題的實例和面試問題,以便讀者盡快熟悉C 語言的實際應用。書中的實例和習題已經過作者認真挑選,集中體現了各個知識要點的具體用法。本書提供可供讀者下載的程序源代碼,并配套出版《C 語言程序設計 習題解答》。
本書結構合理,內容深入淺出,既適合用作高等學校本科和?茖W生學習C 語言程序設計的教材,也適合用作零基礎的程序設計初學者的自學用書。
(1)國外引進極受歡迎的C語言程序設計教材,目前英文原版更新到第17版。前16版被翻譯為印地語、古吉拉特語、英語、日語、韓語,分別在印度、美國、日本、新加坡、韓國出版。
(2)適合初學人士。對編程語言概念進行詳細解釋,尤其對復雜主題提供深入理解;每章配有隨學隨練的章末練習與總結提煉的課后筆記,幫助鞏固本章所涵蓋的概念和技巧。
(3)本書相較前16版,增加概念實例和面試常見問題。每個編程概念給出實例,使主題更容易理解;而且設有單獨的面試常見問題的章節(jié),是準備面試的參考手冊。
(4)本書提供C語言程序員快速參考卡片、可供讀者下載的程序源代碼,并配套出版《C 語言程序設計 習題解答》。
亞沙萬特·卡內特卡爾(Yashavant Kanetkar)是一位極受歡迎的IT 領域演說家,在TedEx、印度理工學院(IIT)、印度國家理工學院(NIT)、印度信息技術學院(IIIT)和一些全球軟件公司舉辦過研討會和講習班。他的作品在世界范圍內廣受歡迎,數以百萬計的學生和專業(yè)人員從中受益。他的作品被翻譯為印地語、古吉拉特語、英語、日語、韓語和漢語,分別在印度、美國、日本、韓國和中國出版。由于在創(chuàng)業(yè)、專業(yè)以及教育方面的建樹,他被印度理工學院坎普爾校區(qū)授予久負盛名的“杰出校友獎”(distinguished alumnus award)。連續(xù)5 年,他被微軟公司授予“最佳.NET 技術撰稿人”和“ 最有價值專家”稱號。
第 1 章 起步 001
本章內容 002
1.1 什么是C 語言 003
1.2 C 語言的基礎知識 003
1.2.1 字母、數字和特殊符號 004
1.2.2 常量、變量和關鍵字 004
1.2.3 C 語言的常量類型 004
1.2.4 整型常量的創(chuàng)建規(guī)則 005
1.2.5 浮點型常量的創(chuàng)建規(guī)則 005
1.2.6 字符型常量的創(chuàng)建規(guī)則 005
1.2.7 C 語言的變量類型 006
1.2.8 變量名的創(chuàng)建規(guī)則 006
1.2.9 C 語言的關鍵字 006
1.3 第 1 個C 語言程序 007
1.3.1 C 語言程序的格式 007
1.3.2 C 語言程序中的注釋 007
1.3.3 什么是main() 008
1.3.4 變量及其用法 009
1.3.5 printf() 及其用法 009
1.3.6 編譯和運行 010
1.4 接收輸入 010
1.5 程序 011
習題 012
課后筆記 014
第 2 章 C 語言的指令 017
本章內容 018
2.1 指令的類型 019
2.2 類型聲明指令 019
2.3 算術指令 019
2.4 整型和浮點型的轉換 021
2.5 賦值時的類型轉換 021
2.6 操作符的優(yōu)先層次 022
2.7 操作符的結合性 024
2.8 控制指令 024
2.9 程序 024
習題 026
課后筆記 028
第3 章 決策控制指令 031
本章內容 032
3.1 if-else 語句 033
3.2 if-else 中的多條語句 034
3.3 嵌套的if-else 語句 035
3.4 一點告誡 036
3.5 程序 037
習題 038
課后筆記 041
第4 章 更復雜決策的創(chuàng)建 043
本章內容 044
4.1 使用邏輯操作符:檢測范圍 045
4.2 使用邏輯操作符:是 否問題 046
4.3 ! 操作符 048
4.4 再論操作符的優(yōu)先層次 049
4.5 條件操作符 049
4.6 程序 050
習題 052
課后筆記 056
第5 章 循環(huán)控制指令 059
本章內容 060
5.1 循環(huán) 061
5.2 while 循環(huán) 061
5.2.1 提示和陷阱 062
5.2.2 其他操作符 063
5.3 程序 065
習題 066
課后筆記 068
第6 章 更復雜的循環(huán)控制
指令 069
本章內容 070
6.1 for 循環(huán) 071
6.1.1 循環(huán)的嵌套 073
6.1.2 for 循環(huán)的多重初始化 074
6.2 break 語句 074
6.3 continue 語句 075
6.4 do-while 循環(huán) 076
6.5 非常規(guī)循環(huán) 077
6.6 程序 078
習題 079
課后筆記 081
第7 章 case 控制指令 083
本章內容 084
7.1 使用switch 的決策 085
7.2 switch 與if-else 梯狀結構的對比 088
7.3 goto 關鍵字 088
7.4 程序 090
習題 092
課后筆記 095
第8 章 函數 097
本章內容 098
8.1 什么是函數 099
8.2 在函數之間傳遞值 101
8.3 參數的傳遞順序 104
8.4 使用庫函數 104
8.5 一個不確定的問題 105
8.6 函數的返回類型 105
8.7 程序 106
習題 108
課后筆記 109
第9 章 指針 111
本章內容 112
9.1 傳值調用和傳引用調用 113
9.2 指針概述 113
9.3 再論函數調用 116
9.4 結論 118
9.5 程序 118
習題 120
課后筆記 122
第 10 章 遞歸 125
本章內容 126
10.1 遞歸的概念 127
10.2 程序 128
習題 130
課后筆記 131
第 11 章 再論數據類型 133
本章內容 134
11.1 整型:long、short、signed、unsigned 135
11.2 字符型:signed、unsigned 136
11.3 浮點型:float、double、long double 136
11.4 一些其他問題 137
11.5 C 語言的存儲類型 138
11.5.1 自動存儲類型 138
11.5.2 寄存器存儲類型 139
11.5.3 靜態(tài)存儲類型 140
11.5.4 外部存儲類型 140
11.5.5 一些微妙的問題 142
11.5.6 何時何地使用存儲類型 143
習題 143
課后筆記 145
第 12 章 C 預處理器 149
本章內容 150
12.1 C 預處理器的特性 151
12.2 宏展開指令 151
12.2.1 帶參數的宏 152
12.2.2 宏與函數的比較 153
12.3 文件包含指令 153
12.4 條件編譯指令 154
12.5 #if 和#elif 指令 155
12.6 其他指令 156
12.6.1 #undef 指令 156
12.6.2 #pragma 指令 156
12.7 構建過程 158
12.8 程序 159
習題 161
課后筆記 162
第 13 章 數組 165
本章內容 166
13.1 什么是數組 167
13.2 關于數組的其他信息 168
13.2.1 數組的初始化 168
13.2.2 內存中的數組元素 168
13.2.3 邊界檢查 169
13.2.4 向函數傳遞數組元素 169
13.3 指針和數組 170
13.3.1 使用指針訪問數組元素 171
13.3.2 把數組傳遞給函數 172
13.4 可變長數組 174
13.5 程序 175
習題 176
課后筆記 179
第 14 章 多維數組 181
本章內容 182
14.1 二維數組 183
14.1.1 二維數組的初始化 183
14.1.2 二維數組的內存映射 184
14.1.3 指針和二維數組 184
14.1.4 指向數組的指針 186
14.1.5 把二維數組傳遞給函數 186
14.2 指針數組 187
14.3 三維數組 188
14.4 程序 189
習題 191
課后筆記 193
第 15 章 字符串 195
本章內容 196
15.1 什么是字符串 197
15.2 關于字符串的其他說明 197
15.3 指針和字符串 199
15.4 字符串處理函數 200
15.4.1 strlen() 201
15.4.2 strcpy() 202
15.4.3 strcat() 203
15.4.4 strcmp() 203
15.5 程序 204
習題 206
課后筆記 208
第 16 章 處理多個字符串 211
本章內容 212
16.1 二維字符數組 213
16.2 字符串指針數組 214
16.3 字符串指針數組的限制 216
16.4 程序 216
習題 218
課后筆記 219
第 17 章 結構體 221
本章內容 222
17.1 為什么要使用結構體 223
17.2 結構體數組 224
17.3 結構體的細節(jié) 225
17.3.1 結構體的聲明 225
17.3.2 結構體元素的存儲 226
17.3.3 復制結構體元素 227
17.3.4 嵌套的結構體 227
17.3.5 傳遞結構體元素 結構體變量 228
17.3.6 結構體元素的對齊 229
17.4 結構體的應用 230
17.5 程序 230
習題 233
課后筆記 234
第 18 章 控制臺輸入輸出 237
本章內容 238
18.1 I O 的類型 239
18.2 控制臺I O 函數 239
18.2.1 格式化的控制臺I O 函數 240
18.2.2 sprintf() 和sscanf() 函數 244
18.2.3 未格式化的控制臺I O 函數 245
習題 246
課后筆記 249
第 19 章 文件輸入輸出 251
本章內容 252
19.1 文件操作 253
19.1.1 打開文件 253
19.1.2 讀取文件 254
19.1.3 關閉文件 255
19.2 對字符、制表符、空格等進行計數 255
19.3 一個文件復制程序 256
19.4 文件打開模式 257
19.5 文件中的字符串(行)I O 257
19.6 文本文件和二進制文件 259
19.7 文件中的記錄I O 259
19.8 低層文件I O 262
19.9 程序 264
習題 266
課后筆記 267
第 20 章 關于輸入輸出的更多知識 271
本章內容 272
20.1 使用argc 和argv 273
20.2 在讀取 寫入時檢測錯誤 275
20.3 標準文件指針 276
20.4 I O 重定向 276
20.4.1 輸出重定向 276
20.4.2 輸入重定向 277
20.4.3 同時重定向 278
習題 278
課后筆記 279
第 21 章 對位進行操作 281
本章內容 282
21.1 位的編號和轉換 283
21.2 位操作 284
21.3 反碼操作符 284
21.4 右移位和左移位操作符 285
21.4.1 警告 286
21.4.2 << 操作符的用途 287
21.5 AND、OR 和XOR 位操作符 287
21.5.1 & 操作符的用途 288
21.5.2 | 操作符的用途 289
21.5.3 ^ 操作符的用途 289
21.6 showbits() 函數 290
21.7 位復合賦值操作符 290
21.8 程序 291
習題 292
課后筆記 294
第 22 章 C 語言的其他特性 295
本章內容 296
22.1 枚舉數據類型 297
22.1.1 枚舉數據類型的用途 297
22.1.2 枚舉真有必要嗎 298
22.2 使用typedef 對數據類型進行重命名 299
22.3 強制類型轉換 300
22.4 位段 300
22.5 函數指針 301
22.6 返回指針的函數 302
22.7 接收可變數量參數的函數 302
22.8 聯合體 303
22.9 volatile 限定符 306
22.10 程序 306
習題 307
課后筆記 309
第 23 章 常見的C 語言面試問題 311
附錄A 編譯和運行 325
附錄B 優(yōu)先級表格 331
附錄C 追蹤缺陷 333
附錄D ASCII 表 339
附錄E 階段測驗 343