《21天學(xué)通C語言(第7版)》是初學(xué)者學(xué)習(xí)C語言的經(jīng)典教程。本版按最新的C11標(biāo)準(zhǔn)(ISO/IEC9899:2011),以循序漸進(jìn)的方式介紹了C語言編程方面的知識,并提供了豐富的實(shí)例和大量的練習(xí)。通過學(xué)習(xí)實(shí)例,并將所學(xué)的知識用于完成練習(xí),讀者將逐步了解、熟悉并精通C語言。
《21天學(xué)通C語言(第7版)》總共分為4部分,第1部分是C語言基礎(chǔ),介紹了C語言的組成、變量、常量、語句、表達(dá)式、運(yùn)算符、函數(shù)和循環(huán)、信息讀寫;第2部分介紹了數(shù)組、指針、字符和字符串、結(jié)構(gòu)、聯(lián)合、TypeDef、變量作用域、高級程序控制、輸入/輸出等;第3部分介紹了指針、磁盤文件、字符串操縱、函數(shù)庫、內(nèi)存管理以及編譯器的高級用法等;第4部分是附錄,介紹了ASCII表、C/C++中的關(guān)鍵字、常用函數(shù),以及習(xí)題答案等內(nèi)容。
《21天學(xué)通C語言(第7版)》針對初中級程序員編寫,可作為學(xué)習(xí)C語言的教程或參考資料。
暢銷全球20余年中文版累計(jì)銷量過50000冊C語言初學(xué)者的最佳輕量級教程針對C11標(biāo)準(zhǔn)和C標(biāo)準(zhǔn)庫全面更新提供本書所有源代碼下載
Bradley L. Jones,Developer.com網(wǎng)站的管理者,負(fù)責(zé)管理Developer.com、CodeGuru和DevX等網(wǎng)站,有使用C、C#、C++、SQL Sever、PowerBuilder、Visual Basic、HTML5等開發(fā)系統(tǒng)的經(jīng)驗(yàn)。他的推特是@BradleyLJones。
Peter Aitken,杜克大學(xué)醫(yī)學(xué)中心的職員,把編程技術(shù)應(yīng)用到牙齒計(jì)算機(jī)開發(fā)程序研究中。他是IT領(lǐng)域應(yīng)用與編程方面資深作家,在計(jì)算機(jī)雜志上發(fā)表文章70多篇,編寫圖書40多本。Aitken目前是制藥工程方面的顧問。
Dean Miller,在出版和授權(quán)消費(fèi)產(chǎn)品業(yè)務(wù)方面有20多年經(jīng)驗(yàn)的作者兼編輯。期間,他策劃并推出了大量暢銷書籍和系列,包括Teach Yourself in 21 Days、Teach Yourself in 24 Hours以及Unleashed系列,這些都由Sam出版社出版。
目 錄
第1部分 C語言基礎(chǔ)
第1課 初識C語言 1
1.1 C語言發(fā)展簡史 1
1.2 為何要使用C語言 1
1.3 準(zhǔn)備編程 2 目 錄
第1部分 C語言基礎(chǔ)
第1課 初識C語言 1
1.1 C語言發(fā)展簡史 1
1.2 為何要使用C語言 1
1.3 準(zhǔn)備編程 2
1.4 程序開發(fā)周期 3
1.4.1 創(chuàng)建源代碼 3
1.4.2 使用編輯器 3
1.4.3 編譯源代碼 4
1.4.4 鏈接以創(chuàng)建可執(zhí)行文件 4
1.4.5 完成開發(fā)周期 5
1.5 第1個(gè)C程序 6
1.5.1 輸入并編譯hello.c 7
1.5.2 編譯錯(cuò)誤 8
1.5.3 鏈接器錯(cuò)誤消息 9
1.6 小結(jié) 9
1.7 答疑 9
1.8 課后研習(xí) 10
1.8.1 小測驗(yàn) 10
1.8.2 練習(xí)題 11
第2課 C程序的組成部分 12
2.1 簡短的C程序 12
2.2 程序的組成部分 13
2.2.1 main()函數(shù) 13
2.2.2 #include和#define指令 13
2.2.3 變量定義 14
2.2.4 函數(shù)原型 14
2.2.5 程序語句 14
2.2.6 函數(shù)定義 15
2.2.7 程序的注釋 15
2.2.8 使用花括號 16
2.2.9 運(yùn)行程序 16
2.2.10 補(bǔ)充說明 16
2.3 學(xué)以致用 17
2.4 小結(jié) 18
2.5 答疑 19
2.6 課后研習(xí) 19
2.6.1 小測驗(yàn) 19
2.6.2 練習(xí)題 19
第3課 儲存信息:變量和常量 21
3.1 計(jì)算機(jī)的內(nèi)存 21
3.2 用變量儲存信息 22
3.3 數(shù)值類型 23
3.3.1 變量聲明 26
3.3.2 typedef關(guān)鍵字 26
3.3.3 初始化變量 26
3.4 常量 27
3.4.1 字面常量 27
3.4.2 符號常量 28
3.5 小結(jié) 31
3.6 答疑 32
3.7 課后研習(xí) 32
3.7.1 小測驗(yàn) 32
3.7.2 練習(xí)題 33
第4課 語句、表達(dá)式和運(yùn)算符 34
4.1 語句 34
4.1.1 在語句中留白 34
4.1.2 創(chuàng)建空語句 35
4.1.3 復(fù)合語句 35
4.2 理解表達(dá)式 36
4.2.1 簡單表達(dá)式 36
4.2.2 復(fù)雜表達(dá)式 36
4.3 運(yùn)算符 37
4.3.1 賦值運(yùn)算符 37
4.3.2 數(shù)學(xué)運(yùn)算符 37
4.3.3 運(yùn)算符優(yōu)先級和圓括號 41
4.3.4 子表達(dá)式的計(jì)算順序 43
4.3.5 關(guān)系運(yùn)算符 43
4.4 if語句 44
4.5 對關(guān)系表達(dá)式求值 49
4.6 邏輯運(yùn)算符 51
4.7 詳議真/假值 52
4.7.1 運(yùn)算符的優(yōu)先級 52
4.7.2 復(fù)合賦值運(yùn)算符 54
4.7.3 條件運(yùn)算符 54
4.7.4 逗號運(yùn)算符 55
4.8 運(yùn)算符優(yōu)先級歸納 55
4.9 小結(jié) 56
4.10 答疑 56
4.11 課后研習(xí) 57
4.11.1 小測驗(yàn) 57
4.11.2 練習(xí)題 57
第5課 函數(shù) 59
5.1 理解函數(shù) 59
5.1.1 函數(shù)定義 59
5.1.2 函數(shù)示例 59
5.2 函數(shù)的工作原理 61
5.3 函數(shù)和結(jié)構(gòu)化程序設(shè)計(jì) 62
5.3.1 結(jié)構(gòu)化程序設(shè)計(jì)的優(yōu)點(diǎn) 63
5.3.2 規(guī)劃結(jié)構(gòu)化程序 63
5.3.3 自上而下的方法 64
5.4 編寫函數(shù) 65
5.4.1 函數(shù)頭 65
5.4.2 函數(shù)體 67
5.4.3 函數(shù)原型 71
5.5 給函數(shù)傳遞實(shí)參 72
5.6 調(diào)用函數(shù) 72
5.7 函數(shù)的位置 75
5.8 內(nèi)聯(lián)函數(shù) 75
5.9 小結(jié) 76
5.10 答疑 76
5.11 課后研習(xí) 76
5.11.1 小測驗(yàn) 76
5.11.2 練習(xí)題 77
第6課 基本程序控制 78
6.1 數(shù)組:基本概念 78
6.2 控制程序的執(zhí)行 79
6.2.1 for語句 79
6.2.2 嵌套for語句 83
6.2.3 while語句 85
6.2.4 嵌套while語句 88
6.2.5 do...while循環(huán) 89
6.3 嵌套循環(huán) 92
6.4 小結(jié) 93
6.5 答疑 94
6.6 課后研習(xí) 94
6.6.1 小測驗(yàn) 94
6.6.2 練習(xí)題 94
第7課 信息讀寫基礎(chǔ) 96
7.1 在屏幕上顯示信息 96
7.1.1 printf()函數(shù) 96
7.1.2 printf()的格式字符串 97
7.1.3 使用puts()顯示消息 103
7.2 使用scanf()輸入數(shù)值數(shù)據(jù) 104
7.3 三字符序列 108
7.4 小結(jié) 109
7.5 答疑 109
7.6 課后研習(xí) 109
7.6.1 小測驗(yàn) 109
7.6.2 練習(xí)題 110
第2部分 C語言應(yīng)用
第8課 數(shù)值數(shù)組 112
8.1 什么是數(shù)組 112
8.1.1 一維數(shù)組 113
8.1.2 多維數(shù)組 116
8.2 命名和聲明數(shù)組 116
8.2.1 初始化數(shù)組 119
8.2.2 初始化多維數(shù)組 120
8.3 小結(jié) 123
8.4 答疑 123
8.5 課后研習(xí) 124
8.5.1 小測驗(yàn) 124
8.5.2 練習(xí)題 124
第9課 指針 126
9.1 什么是指針 126
9.1.1 計(jì)算機(jī)的內(nèi)存 126
9.1.2 創(chuàng)建指針 127
9.2 指針和簡單變量 127
9.2.1 聲明指針 127
9.2.2 初始化指針 128
9.2.3 使用指針 128
9.3 指針和變量類型 130
9.4 指針和數(shù)組 131
9.4.1 數(shù)組名 131
9.4.2 儲存數(shù)組元素 131
9.4.3 指針?biāo)阈g(shù) 134
9.5 指針的注意事項(xiàng) 137
9.6 數(shù)組下標(biāo)表示法和指針 137
9.7 給函數(shù)傳遞數(shù)組 137
9.8 小結(jié) 141
9.9 答疑 142
9.10 課后研習(xí) 142
9.10.1 小測驗(yàn) 142
9.10.2 練習(xí)題 143
第10課 字符和字符串 144
10.1 char數(shù)據(jù)類型 144
10.2 使用字符變量 145
10.3 使用字符串 147
10.3.1 字符數(shù)組 147
10.3.2 初始化字符數(shù)組 148
10.4 字符串和指針 148
10.5 未儲存在數(shù)組中的字符串 148
10.5.1 在編譯期分配字符串的空間 149
10.5.2 malloc()函數(shù) 149
10.5.3 malloc()函數(shù)的用法 150
10.6 顯示字符串和字符 153
10.6.1 puts()函數(shù) 153
10.6.2 printf()函數(shù) 154
10.7 讀取從鍵盤輸入的字符串 154
10.7.1 用gets()函數(shù)輸入字符串 154
10.7.2 用scanf()函數(shù)輸入字符串 157
10.8 小結(jié) 159
10.9 答疑 160
10.10 課后研習(xí) 160
10.10.1 小測驗(yàn) 160
10.10.2 練習(xí)題 161
第11課 結(jié)構(gòu)、聯(lián)合和typedef 163
11.1 簡單結(jié)構(gòu) 163
11.1.1 聲明和定義結(jié)構(gòu) 163
11.1.2 訪問結(jié)構(gòu)的成員 164
11.2 復(fù)雜結(jié)構(gòu) 166
11.2.1 包含結(jié)構(gòu)的結(jié)構(gòu) 166
11.2.2 包含數(shù)組的結(jié)構(gòu) 169
11.3 結(jié)構(gòu)數(shù)組 171
11.4 初始化結(jié)構(gòu) 173
11.5 結(jié)構(gòu)和指針 175
11.5.1 包含指針成員的結(jié)構(gòu) 175
11.5.2 創(chuàng)建指向結(jié)構(gòu)的指針 177
11.5.3 使用指針和結(jié)構(gòu)數(shù)組 179
11.5.4 給函數(shù)傳遞結(jié)構(gòu)實(shí)參 181
11.6 聯(lián)合 182
11.6.1 聲明、定義并初始化聯(lián)合 182
11.6.2 訪問聯(lián)合成員 183
11.7 用typedef創(chuàng)建結(jié)構(gòu)的別名 187
11.8 小結(jié) 187
11.9 答疑 187
11.10 課后研習(xí) 188
11.10.1 小測驗(yàn) 188
11.10.2 練習(xí)題 188
第12課 變量作用域 190
12.1 什么是作用域 190
12.1.1 演示作用域 190
12.1.2 作用域的重要性 192
12.2 創(chuàng)建外部變量 192
12.2.1 外部變量作用域 192
12.2.2 何時(shí)使用外部變量 192
12.2.3 extern關(guān)鍵字 193
12.3 創(chuàng)建局部變量 194
12.3.1 靜態(tài)變量和自動變量 194
12.3.2 函數(shù)形參的作用域 196
12.3.3 外部靜態(tài)變量 196
12.3.4 寄存器變量 197
12.4 局部變量和main()函數(shù) 197
12.5 如何使用存儲類別 198
12.6 局部變量和塊 198
12.7 小結(jié) 199
12.8 答疑 200
12.9 課后研習(xí) 200
12.9.1 小測驗(yàn) 200
12.9.2 練習(xí)題 201
第13課 高級程序控制 203
13.1 提前結(jié)束循環(huán) 203
13.1.1 break語句 203
13.1.2 continue語句 205
13.2 goto語句 206
13.3 無限循環(huán) 208
13.4 switch語句 211
13.5 退出程序 218
13.6 小結(jié) 219
13.7 答疑 219
13.8 課后研習(xí) 219
13.8.1 小測驗(yàn) 220
13.8.2 練習(xí)題 220
第14課 輸入和輸出 221
14.1 C語言和流 221
14.1.1 程序的輸入/輸出 221
14.1.2 什么是流 221
14.1.3 文本流和二進(jìn)制流 222
14.1.4 預(yù)定義流 222
14.2 C語言的流函數(shù) 222
14.3 鍵盤輸入 224
14.3.1 字符輸入 224
14.3.2 行輸入 228
14.3.3 格式化輸入 230
14.4 屏幕輸出 236
14.4.1 使用putchar()、putc()和fputc()輸出字符 236
14.4.2 使用puts()和fputs()輸出字符串 238
14.4.3 使用printf()和fprintf()格式化輸出 239
14.5 何時(shí)使用fprintf() 243
14.6 小結(jié) 244
14.7 答疑 245
14.8 課后研習(xí) 245
14.8.1 小測驗(yàn) 245
14.8.2 練習(xí)題 246
第3部分 C語言進(jìn)階
第15課 指向指針的指針和指針數(shù)組 247
15.1 聲明指向指針的指針 247
15.2 指針和多維數(shù)組 248
15.3 指針數(shù)組 254
15.3.1 復(fù)習(xí)字符串和指針 255
15.3.2 聲明指向char類型的指針數(shù)組 255
15.3.3 示例 257
15.4 小結(jié) 261
15.5 答疑 262
15.6 課后研習(xí) 262
15.6.1 小測驗(yàn) 262
15.6.2 練習(xí)題 262
第16課 指向函數(shù)的指針和鏈表 264
16.1 函數(shù)指針 264
16.1.1 聲明函數(shù)指針 264
16.1.2 初始化函數(shù)指針及其用法 265
16.2 鏈 表 271
16.2.1 鏈表的基本知識 272
16.2.2 使用鏈表 273
16.2.3 簡單鏈表示例 277
16.2.4 實(shí)現(xiàn)鏈表 279
16.3 小結(jié) 285
16.4 答疑 285
16.5 課后研習(xí) 285
16.5.1 小測驗(yàn) 285
16.5.2 練習(xí)題 286
第17課 磁盤文件 287
17.1 將流與磁盤文件相關(guān)聯(lián) 287
17.2 磁盤文件的類型 287
17.3 文件名 288
17.4 打開文件 288
17.5 讀寫文件數(shù)據(jù) 291
17.5.1 格式化輸入和輸出 291
17.5.2 字符輸入和輸出 294
17.5.3 直接文件輸入/輸出 296
17.6 文件緩沖:關(guān)閉和刷新文件 299
17.7 順序文件訪問和隨機(jī)文件訪問 300
17.7.1 ftell()函數(shù)和rewind()函數(shù) 301
17.7.2 fseek()函數(shù) 303
17.8 檢測文件末尾 305
17.9 文件管理函數(shù) 307
17.9.1 刪除文件 307
17.9.2 重命名文件 308
17.9.3 拷貝文件 308
17.10 臨時(shí)文件 310
17.11 小結(jié) 312
17.12 答疑 312
17.13 課后研習(xí) 313
17.13.1 小測驗(yàn) 313
17.13.2 練習(xí)題 313
第18課 操縱字符串 315
18.1 確定字符串長度 315
18.2 拷貝字符串 316
18.2.1 strcpy()函數(shù) 316
18.2.2 strncpy()函數(shù) 317
18.3 拼接字符串 319
18.3.1 strcat()函數(shù) 319
18.3.2 strncat()函數(shù) 320
18.4 比較字符串 321
18.4.1 比較字符串本身 322
18.4.2 比較部分字符串 323
18.5 查找字符串 324
18.5.1 strchr()函數(shù) 324
18.5.2 strrchr()函數(shù) 325
18.5.3 strcspn()函數(shù) 326
18.5.4 strspn()函數(shù) 327
18.5.5 strpbrk()函數(shù) 328
18.5.6 strstr()函數(shù) 328
18.6 將字符串轉(zhuǎn)換為數(shù)字 329
18.6.1 將字符串轉(zhuǎn)換為整型值 329
18.6.2 將字符串轉(zhuǎn)換為long 330
18.6.3 將字符串轉(zhuǎn)換為long long類型值 330
18.6.4 將字符串轉(zhuǎn)換為浮點(diǎn)值 330
18.7 字符測試函數(shù) 331
18.8 小結(jié) 335
18.9 答疑 335
18.10 課后研習(xí) 336
18.10.1 小測驗(yàn) 336
18.10.2 練習(xí)題 336
第19課 函數(shù)的高級主題 338
19.1 給函數(shù)傳遞指針 338
19.2 void指針 341
19.3 帶可變數(shù)目參數(shù)的函數(shù) 344
19.4 返回指針的函數(shù) 346
19.5 小結(jié) 348
19.6 答疑 348
19.7 課后研習(xí) 348
19.7.1 小測驗(yàn) 348
19.7.2 練習(xí)題 349
第20課 C語言的函數(shù)庫 350
20.1 數(shù)學(xué)函數(shù) 350
20.1.1 三角函數(shù) 350
20.1.2 指數(shù)函數(shù)和對數(shù)函數(shù) 350
20.1.3 雙曲線函數(shù) 351
20.1.4 其他數(shù)學(xué)函數(shù) 351
20.1.5 演示數(shù)學(xué)函數(shù) 351
20.2 處理時(shí)間 352
20.2.1 表示時(shí)間 352
20.2.2 時(shí)間函數(shù) 353
20.2.3 使用時(shí)間函數(shù) 355
20.3 錯(cuò)誤處理 357
20.3.1 assert()宏 357
20.3.2 errno.h頭文件 359
20.3.3 perror()函數(shù) 359
20.4 查找和排序 361
20.4.1 用bsearch()函數(shù)進(jìn)行查找 361
20.4.2 用qsort()函數(shù)進(jìn)行排序 362
20.4.3 演示查找和排序 362
20.5 小結(jié) 367
20.6 答疑 367
20.7 課后研習(xí) 367
20.7.1 小測驗(yàn) 367
20.7.2 練習(xí)題 368
第21課 管理內(nèi)存 370
21.1 類型轉(zhuǎn)換 370
21.1.1 自動類型轉(zhuǎn)換 370
21.1.2 顯示轉(zhuǎn)換 372
21.2 分配內(nèi)存存儲空間 373
21.2.1 用malloc()函數(shù)分配內(nèi)存 374
21.2.2 用calloc()函數(shù)分配內(nèi)存 374
21.2.3 用realloc()函數(shù)分配更多內(nèi)存 375
21.2.4 用free()函數(shù)釋放內(nèi)存 377
21.3 操控內(nèi)存塊 378
21.3.1 用memset()函數(shù)初始化內(nèi)存 378
21.3.2 用memcpy()函數(shù)拷貝內(nèi)存的數(shù)據(jù) 379
21.3.3 用memmove()函數(shù)移動內(nèi)存的數(shù)據(jù) 379
21.4 位 380
21.4.1 移位運(yùn)算符 381
21.4.2 按位邏輯運(yùn)算符 382
21.4.3 求反運(yùn)算符 383
21.4.4 結(jié)構(gòu)中的位字段 383
21.5 小結(jié) 384
21.6 答疑 384
21.7 課后研習(xí) 385
21.7.1 小測驗(yàn) 386
21.7.2 練習(xí)題 386
第22課 編譯器的高級用法 388
22.1 多源代碼文件編程 388
22.1.1 模塊化編程的優(yōu)點(diǎn) 388
22.1.2 模塊化編程技術(shù) 388
22.1.3 模塊化的組成部分 392
22.1.4 外部變量和模塊化編程 392
22.2 C預(yù)處理器 393
22.2.1 #define預(yù)處理器指令 393
22.2.2 #include指令 397
22.2.3 #if、#elif、#else和#endif 397
22.2.4 使用#if…#endif幫助調(diào)試 398
22.2.5 避免多次包含頭文件 399
22.2.6 #undef指令 399
22.3 預(yù)定義宏 400
22.4 命令行參數(shù) 400
22.5 小結(jié) 402
22.6 答疑 402
22.7 課后研習(xí) 403
22.7.1 小測驗(yàn) 403
22.7.2 練習(xí)題 403
第4部分 附錄
附錄A ASCII表 405
附錄B C/C++關(guān)鍵字 409
附錄C 常用函數(shù) 411
附錄D 參考答案 415