為什么撰寫這本C語言著作市面上有關(guān)C語言的書籍比比皆是,讀者肯定會好奇為什么作者還要撰寫這本著作。
隨著計(jì)算機(jī)行業(yè)的持續(xù)發(fā)展,每年會創(chuàng)造數(shù)以百萬計(jì)的就業(yè)機(jī)會。因?yàn)檫@個(gè)原因,很多學(xué)生會選擇計(jì)算機(jī)作為本科或研究生專業(yè)。在學(xué)業(yè)完成之后,一定會希望能立即進(jìn)入計(jì)算機(jī)行業(yè)并開始其職業(yè)生涯。很多公司會直接到高校舉辦招聘會來挑選計(jì)算機(jī)人才。在這些面試中,兩種編程語言被考察得最多,它們是C和Java。
盡管大學(xué)生在校期間已經(jīng)學(xué)習(xí)了編程語言,但這種學(xué)習(xí)通常是為了通過考試。他們很難掌握好日常工作真正需要的編程技能。因此,大學(xué)生畢業(yè)以后,需要進(jìn)一步提高一些能力,如下所列:
邏輯思維深入理解編程語言中的概念使用編程語言開發(fā)實(shí)際的程序面試技能請記住,其他C語言著作或多或少遺漏了上面的一些目標(biāo)。某些書籍會陳列一些代碼,但是不會討論代碼邏輯。某些書籍會側(cè)重理論,缺乏與編程實(shí)踐相關(guān)的內(nèi)容。最糟糕的是,很少有書籍會專門討論C語言的面試題,而這個(gè)直接影響面試者能否順利拿到offer!基于我20多年的教學(xué)經(jīng)驗(yàn),本書介紹的簡單的方法可同時(shí)達(dá)成前面提到過的那些目標(biāo)。可參考下面這個(gè)簡單的式子:
概念+范例程序+面試題本書使用非常通俗易懂的語言來介紹C語言基本概念,即便是在校生也能輕松讀懂。介紹完概念以后,會通過范例程序來幫助讀者理解編程概念。每個(gè)范例程序的代碼邏輯都會詳細(xì)討論。最后會提煉出一些非常經(jīng)典的面試題,正好能覆蓋當(dāng)前章節(jié)介紹的C語言知識。而這些面試題都是頂級軟件公司面試中會經(jīng)常碰到的。
如何使用本書本書以非常輕松和簡潔的方式覆蓋了幾乎所有的C語言概念,以便于幫助讀者從零基礎(chǔ)開始上手,直至進(jìn)階。本書也會詳細(xì)討論每個(gè)程序的代碼邏輯,以提高學(xué)生編程方面的邏輯思維能力。
本書提供了數(shù)百個(gè)范例程序,可采用本書作為考試題庫。
本書提供的面試題都附有答案,可以幫助讀者應(yīng)付校內(nèi)或校外的各種面試。
專業(yè)軟件開發(fā)人員也可以使用本書作為參考書籍。
本書涵蓋了哪些內(nèi)容本書按從易到難的順序來組織。一共有15章(第16章為C語言中的常見庫函數(shù),因此未包括在內(nèi))。建議初學(xué)者從頭開始逐章閱讀。
第1~7章介紹的是C語言的基礎(chǔ)知識,用來幫助讀者理解C程序的基本構(gòu)件,如數(shù)據(jù)類型、函數(shù)、數(shù)組及字符串等。這些概念對于實(shí)現(xiàn)程序邏輯非常有用,掌握了這些知識,C程序看起來也不那么晦澀難懂了。
后續(xù)的第8~15章介紹C語言的高級概念。第8章介紹了指針,這是C語言中最令人生畏的話題。該章一開始介紹指針的基本概念,之后介紹一些復(fù)雜的概念,如指針的指針、函數(shù)指針及回調(diào)函數(shù)等。
第9章關(guān)于結(jié)構(gòu)體和聯(lián)合體,這些數(shù)據(jù)類型用來存儲一組相同類型的數(shù)據(jù)元素。兩者不同之處在于前者為每個(gè)數(shù)據(jù)元素分配一塊內(nèi)存,而后者中的數(shù)據(jù)元素共用同一塊內(nèi)存。
第10章介紹文件相關(guān)知識。當(dāng)有大量數(shù)據(jù)需要持久存儲、檢索或加工成報(bào)表時(shí),文件就非常有用了。
第11章探討的是命令行參數(shù)相關(guān)話題,如果我們想開發(fā)能直接在系統(tǒng)提示符中運(yùn)行的程序,這些概念就非常有用了。例如,可利用該章所學(xué)內(nèi)容開發(fā)DOS或UNIX中的自定義命令。
第12章介紹宏與枚舉。宏是一組代碼語句的引用標(biāo)簽,在預(yù)編譯期間,標(biāo)簽會被真實(shí)的代碼文本替換。而枚舉代表的是一組常量。
第13章涉及的是與數(shù)據(jù)結(jié)構(gòu)相關(guān)的話題,所謂數(shù)據(jù)結(jié)構(gòu)就是一些內(nèi)存存儲和檢索的特殊模型。
第14章介紹搜索、排序和合并技術(shù)。當(dāng)在科學(xué)分析中處理數(shù)據(jù)時(shí),這些技術(shù)非常有用。
第15章討論繪圖與動畫,讀者可以學(xué)習(xí)一些基本的繪圖函數(shù)用于繪圖和創(chuàng)建動畫。
致謝衷心感謝Narasimha Karumanchi先生,在本書付梓之前為我提供了種種幫助和鼓勵(lì)。
讀者反饋盡管本書在撰寫之時(shí)經(jīng)過反復(fù)斟酌與審校,但錯(cuò)誤依然是難以避免的,衷心希望讀者在閱讀過程中碰到任何錯(cuò)誤或值得商榷之處,主動與我們聯(lián)系,以提高本書的質(zhì)量。
譯者序
前 言
第1章 C語言中的基礎(chǔ)概念 1
1.1 C語言的誕生 2
1.2 C程序的構(gòu)成 2
1.3 C語言中的字符集 2
1.4 C語言中的詞語 2
1.5 C語言中的語句 4
1.6 printf()的格式說明符 11
1.7 C程序的執(zhí)行 12
1.8 在Turbo C中執(zhí)行C程序 14
1.9 查看Turbo C中的C語言幫助 16
1.10 單步調(diào)試C程序 17
1.11 在UNIX中執(zhí)行C程序 18
1.12 在Microsoft Visual Studio中執(zhí)行C程序 18
1.13 使用命令行參數(shù)執(zhí)行C程序 21
第2章 數(shù)據(jù)類型與操作符 23
2.1 C語言中的數(shù)據(jù)類型 24
2.2 基本數(shù)據(jù)類型 25
2.3 修飾符 27
2.4 各種數(shù)據(jù)類型的最大值和最小值 28
2.5 限定符 29
2.6 C語言中的操作符 30
第3章 C語言中的控制語句 45
3.1 順序執(zhí)行 45
3.2 隨機(jī)執(zhí)行 46
3.3 if…else語句 47
3.4 do…while循環(huán) 50
3.5 while循環(huán) 51
3.6 for循環(huán) 53
3.7 switch語句 59
3.8 clrscr() 60
3.9 gotoxy() 61
3.10 getche() 61
3.11 break語句 63
3.12 continue語句 65
3.13 goto語句 66
3.14 return語句 68
第4章 數(shù)組 74
4.1 一維數(shù)組 75
4.2 創(chuàng)建一維數(shù)組 75
4.3 為什么數(shù)組下標(biāo)從零開始 76
4.4 二維數(shù)組 83
4.5 創(chuàng)建二維數(shù)組 84
4.6 三維數(shù)組 90
4.7 創(chuàng)建三維數(shù)組 91
第5章 函數(shù) 94
5.1 函數(shù)的組成 95
5.2 函數(shù)的形式 97
5.3 函數(shù)調(diào)用 100
5.4 函數(shù)應(yīng)該寫在何處 100
5.5 函數(shù)定義 101
5.6 形參和實(shí)參 104
5.7 向函數(shù)傳遞數(shù)組 104
5.8 遞歸函數(shù) 109
5.9 函數(shù)中變量的作用域 110
5.10 結(jié)構(gòu)化編程 112
5.11 創(chuàng)建自定義頭文件 114
第6章 字符與字符串 118
6.1 字符處理 118
6.2 字符檢測函數(shù) 120
6.3 字符串 122
6.4 字符串的內(nèi)存布局 124
6.5 字符串處理函數(shù) 126
6.6 strlen() 126
6.7 strcpy()與strncpy() 127
6.8 strcat() 128
6.9 strcmp()與stricmp() 129
6.10 strncmp()與strnicmp() 130
6.11 strupr()與strlwr() 131
6.12 strrev() 131
6.13 strchr() 132
6.14 strstr() 133
6.15 函數(shù)的字符串傳參 134
第7章 存儲類型 138
7.1 auto存儲類型 139
7.2 register存儲類型 140
7.3 static存儲類型 141
7.4 extern存儲類型 143
7.5 局部變量 145
第8章 指針 147
8.1 指針運(yùn)算 149
8.2 數(shù)組與指針 152
8.3 動態(tài)內(nèi)存分配 157
8.4 靜態(tài)內(nèi)存與動態(tài)內(nèi)存的區(qū)別 159
8.5 malloc() 160
8.6 realloc() 161
8.7 calloc() 161
8.8 free() 162
8.9 指針數(shù)組 164
8.10 函數(shù)的指針傳參和指針返回值 165
8.11 函數(shù)指針 171
8.12 回調(diào)函數(shù)機(jī)制 173
8.13 dangling指針 176
8.14 null指針 176
8.15 野指針 177
8.16 near、far和huge指針 177
8.17 void指針 178
8.18 指針的長度 179
8.19 指向指針的指針 181
8.20 指針的優(yōu)缺點(diǎn) 182
第9章 結(jié)構(gòu)體和聯(lián)合體 183
9.1 訪問結(jié)構(gòu)體成員 184
9.2 聲明和初始化結(jié)構(gòu)體 184
9.3 結(jié)構(gòu)體指針 186
9.4 結(jié)構(gòu)體數(shù)組 187
9.5 結(jié)構(gòu)體指針數(shù)組 192
9.6 向函數(shù)傳遞結(jié)構(gòu)體參數(shù) 194
9.7 拷貝結(jié)構(gòu)體變量 197
9.8 嵌套結(jié)構(gòu)體 198
9.9 聯(lián)合體 202
第10章 文件操作 205
10.1 打開文件 206
10.2 關(guān)閉文件 208
10.3 文件類型 208
10.4 文本文件與二進(jìn)制文件的差別 208
10.5 在文本文件中存儲字符 209
10.6 在文本文件中存儲字符串 212
10.7 格式化文本文件 214
10.8 二進(jìn)制文件 218
10.9 打印程序輸出 222
10.10 將程序輸出重定向到文件 222
10.11 隨機(jī)訪問文件 224
10.12 獲取文件大小及記錄數(shù) 225
10.13 更新記錄 227
10.14 刪除記錄 229
10.15 獲取目錄中的文件信息 231
第11章 命令行參數(shù) 233
11.1 無參main()函數(shù) 234
11.2 帶void類型參數(shù)的main()函數(shù) 234
11.3 帶兩個(gè)參數(shù)的main()函數(shù) 234
11.4 帶三個(gè)參數(shù)的main()函數(shù) 236
11.5 在main()函數(shù)退出后執(zhí)行代碼 239
11.6 在main()函數(shù)中調(diào)用其他程序 240
11.7 使用命令行參數(shù) 242
11.8 顯示文件內(nèi)容:show命令 243
11.9 拷貝文件內(nèi)容:cpy命令 244
11.10 刪除文件:destroy命令 245
11.11 刷新顯示屏:fresh命令 246
11.12 字符、單詞、文本行計(jì)數(shù):count命令 247
第12章 宏與枚舉 249
12.1 宏 250
12.2 條件編譯 252
12.3 枚舉 253
第13章 C語言與數(shù)據(jù)結(jié)構(gòu) 258
13.1 棧 259
13.2 創(chuàng)建棧 260
13.3 push操作 260
13.4 pop操作 260
13.5 使用棧驗(yàn)證表達(dá)式 264
13.6 隊(duì)列 266
13.7 隊(duì)列的創(chuàng)建 267
13.8 往隊(duì)列中插入一個(gè)元素 267
13.9 從隊(duì)列中刪除一個(gè)元素 267
13.10 循環(huán)隊(duì)列 270
13.11 鏈表 273
13.12 創(chuàng)建鏈表 275
13.13 顯示鏈表 275
13.14 在鏈表頭部插入新節(jié)點(diǎn) 277
13.15 在鏈表尾部插入新節(jié)點(diǎn) 279
13.16 在鏈表中部插入新節(jié)點(diǎn) 280
13.17 刪除鏈表頭節(jié)點(diǎn) 282
13.18 刪除鏈表尾節(jié)點(diǎn) 283
13.19 刪除鏈表中間節(jié)點(diǎn) 284
13.20 雙鏈表 285
13.21 創(chuàng)建雙鏈表 286
13.22 雙鏈表中的遍歷 286
13.23 前向遍歷 287
13.24 后向遍歷 287
13.25 在雙鏈表頭部插入節(jié)點(diǎn) 289
13.26 在雙鏈表指定位置之后插入節(jié)點(diǎn) 289
13.27 刪除雙鏈表頭節(jié)點(diǎn) 291
13.28 刪除雙鏈表指定位置的節(jié)點(diǎn) 291
第14章 搜索、排序與合并 293
14.1 搜索技術(shù) 294
14.2 線性搜索或順序搜索 294
14.3 大O記號 294
14.4 二分搜索 296
14.5 排序技術(shù) 298
14.6 冒泡排序 299
14.7 快速排序 300
14.8 選擇排序 305
14.9 插入排序 306
14.10 合并 308
第15章 圖形與動畫 311
15.1 繪制像素點(diǎn) 313
15.2 繪制圓 316
15.3 繪制線段 317
15.4 繪制矩形和正方形 318
15.5 繪制橢圓 319
15.6 繪制圓弧 321
15.7 繪制扇形 321
15.8 繪制多邊形 321
15.9 前景色和背景色 322
15.10 使用顏色填充圖形 323
15.11 使用字體 326
15.12 在圖形模式中使用鼠標(biāo) 328
15.13 創(chuàng)建GUI組件 332
15.14 創(chuàng)建菜單 335
15.15 拷貝圖像 337
15.16 實(shí)現(xiàn)動畫 339
15.17 播放聲音 344
第16章 C語言中常見庫函數(shù) 346
16.1 數(shù)學(xué)函數(shù) 346
16.2 數(shù)據(jù)轉(zhuǎn)換函數(shù) 346
16.3 字符串操作函數(shù) 347
16.4 字符檢測與轉(zhuǎn)換函數(shù) 347
16.5 I/O及文件相關(guān)函數(shù) 348
16.6 內(nèi)存相關(guān)函數(shù) 348
16.7 繪圖函數(shù) 349
16.8 系統(tǒng)函數(shù) 349