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