圖書簡介
第6版保留了這本暢銷書的精髓,以簡潔、清晰且邏輯有序的方式講解C語言程式設計的概念,十分適合C語言的初學者。本書通過示例程式、案例學習、編程練習、項目設計以及其他教學手段來幫助讀者更好地理解C語言,使得學習過程更加愉悅。
圖書目錄
第1章C語言概述 1
1.1C語言的歷史 1
1.2C語言的主要特性 3
1.3示例程式1:顯示一條訊息 3
1.4示例程式2:兩個數相加 6
1.5示例程式3:利息計算 7
1.6示例程式4:子例程的使用 9
1.7示例程式5:數學函式的使用 10
1.8C程式的基本結構 11
1.9編程風格 12
1.10運行C程式 13
1.11在UNIX系統環境下 14
1.11.1創建程式 14
1.11.2編譯與連結 14
1.11.3運行程式 15
1.11.4創建自己的可運行檔案 15
1.11.5多個源檔案問題 15
1.12在MS-DOS系統環境下 16
複習題 17
編程練習 19
第2章常量、變數及數據類型 21
2.1概述 21
2.2字元集 21
2.3C標記符 23
2.4關鍵字與標識符 23
2.5常量 24
2.5.1整型常量 24
2.5.2實數常量 26
2.5.3單字元常量 27
2.5.4字元串常量 27
2.5.5反斜槓字元常量 27
2.6變數 28
2.7數據類型 29
2.7.1整型 30
2.7.2浮點型 31
2.7.3void類型 31
2.7.4字元類型 32
2.8變數的聲明 32
2.8.1基本類型的聲明 32
2.8.2自定義類型的聲明 34
2.9存儲類型的聲明 35
2.10變數的賦值 36
2.10.1賦值語句 36
2.10.2從鍵盤讀取數據 38
2.11符號常量的定義 41
2.11.1可修改性 41
2.11.2可理解性 41
2.12將變數聲明為常量 42
2.13將變數聲明為可變的 42
2.14數據的溢出 43
2.15案例學習 44
2.15.1平均數計算 44
2.15.2溫度轉換問題 44
複習題 45
編程練習 47
第3章運算符與表達式 49
3.1概述 49
3.2算術運算符 49
3.2.1整數算術運算 50
3.2.2實數算術運算 51
3.2.3混合算術運算 52
3.3關係運算符 52
3.4邏輯運算符 53
3.5賦值運算符 54
3.6遞增和遞減運算符 56
3.7條件運算符 57
3.8逐位運算符 57
3.9特殊運算符 58
3.9.1逗號運算符 58
3.9.2sizeof運算符 58
3.10算術表達式 60
3.11表達式的計算 60
3.12算術表達式的優先權 61
3.13一些可計算性問題 63
3.14表達式中的類型轉換 64
3.14.1隱式類型轉換 64
3.14.2顯式類型轉換 65
3.15運算符的優先權及其關聯性 67
3.16數學函式 69
3.17案例學習 70
3.17.1銷售人員的工資 70
3.17.2二次方程的求解 71
複習題 72
編程練習 76
第4章輸入輸出操作管理 79
4.1概述 79
4.2讀取一個字元 80
4.3寫一個字元 82
4.4格式化輸入 83
4.4.1整數輸入 84
4.4.2實數輸入 86
4.4.3字元串輸入 87
4.4.4混合數據類型的讀取 89
4.4.5錯誤輸入的檢測 89
4.4.6使用scanf函式時應記住的幾個要點 91
4.5格式化輸出 92
4.5.1整數的輸出 93
4.5.2實數的輸出 94
4.5.3單個字元的顯示 95
4.5.4字元串的顯示 96
4.5.5混合數據的輸出 97
4.5.6提高輸出的可讀性 98
4.6案例學習 99
4.6.1庫存報告 99
4.6.2可靠性圖形 100
複習題 102
編程練習 105
第5章判斷與分支 107
5.1概述 107
5.2if判斷語句 107
5.3簡單if語句 108
5.4if…else語句 111
5.5嵌套if…else語句 114
5.6階梯式elseif語句 117
5.7switch語句 120
5.8?:運算符 124
5.9goto語句 128
5.10案例學習 131
5.10.1數值的分布範圍 131
5.10.2賬單計算 132
練習題 135
編程練習 139
第6章判斷與循環 143
6.1概述 143
6.2while語句 145
6.3do語句 147
6.4for語句 149
6.4.1簡單的for循環 149
6.4.2for循環的其他特性 153
6.4.3for循環的嵌套 154
6.5循環中的跳轉 158
6.5.1跳出循環 158
6.5.2跳過循環的一部分 162
6.5.3避免使用goto語句 164
6.5.4跳出程式 164
6.6簡潔的測試表達式 164
6.7案例學習 166
6.7.1二項式係數表 166
6.7.2柱狀圖 167
6.7.3最小成本 169
6.7.4描繪兩函式的曲線圖 170
複習題 172
編程練習 175
第7章數組 179
7.1概述 179
7.2一維數組 180
7.3一維數組的聲明 182
7.4一維數組的初始化 184
7.4.1編譯時初始化 184
7.4.2運行時初始化 185
7.5二維數組 189
7.6二維數組的初始化 192
7.7多維數組 200
7.8動態數組 200
7.9與數組相關的其他內容 201
7.10案例學習 202
7.10.1數列的中值問題 202
7.10.2標準差的計算 204
7.10.3測試評分 205
7.10.4產品與銷售分析 207
複習題 213
編程練習 215
第8章字元數組與字元串 219
8.1概述 219
8.2字元串變數的聲明與初始化 220
8.3從終端讀取字元串 221
8.3.1使用scanf函式 221
8.3.2讀取文本行 223
8.3.3使用getchar和gets函式 223
8.4在螢幕上顯示字元串 227
8.4.1使用printf函式 227
8.4.2使用putchar和puts函式 230
8.5字元的算術運算 231
8.6將字元串組合在一起 232
8.7兩個字元串的比較 234
8.8字元串處理函式 234
8.8.1strcat函式 234
8.8.2strcmp函式 236
8.8.3strcpy函式 236
8.8.4strlen函式 236
8.8.5其他字元串函式 238
8.9字元串表 240
8.10字元串的其他特性 242
8.11案例學習 243
8.11.1計算文本中的單詞數 243
8.11.2客戶列表處理程式 244
複習題 246
編程練習 249
第9章用戶自定義函式 251
9.1概述 251
9.2為什麼需要自定義函式 251
9.3多函式程式 252
9.4自定義函式的元素 254
9.5函式定義 255
9.5.1函式頭 256
9.5.2函式體 257
9.6返回值及其類型 257
9.7函式調用 258
9.8函式聲明 260
9.9函式的類型 262
9.10無參數無返回值的函式 262
9.11有參數無返回值的函式 264
9.12有參數有返回值的函式 267
9.13無參數但有一個返回值的函式 271
9.14返回多個值的函式 271
9.15函式的嵌套 272
9.16函式的遞歸 273
9.17將數組傳遞給函式 275
9.17.1一維數組 275
9.17.2二維數組 278
9.18將字元串傳遞給函式 279
9.19變數的作用域、可見性和生存期 279
9.19.1自動變數 280
9.19.2外部變數 281
9.19.3外部聲明 284
9.19.4靜態變數 285
9.19.5暫存器變數 286
9.19.6嵌套代碼塊 287
9.20多檔案程式 288
9.21案例學習 290
複習題 293
編程練習 297
第10章結構體與共用體 299
10.1概述 299
10.2結構體的定義 299
10.3聲明結構體變數 301
10.4訪問結構體成員 303
10.5結構體的初始化 304
10.6結構體變數的複製與比較 305
10.7單個成員的運算 307
10.8結構體數組 308
10.9結構體中的數組 310
10.10結構體中的結構體 311
10.11結構體與函式 313
10.12共用體 316
10.13結構體的大小 317
10.14位域 317
10.15案例學習 321
複習題 324
編程練習 327
第11章指針 331
11.1概述 331
11.2理解指針 331
11.3訪問變數的地址 333
11.4指針變數的聲明 334
11.5指針變數的初始化 336
11.6通過指針訪問變數 337
11.7指針鏈 339
11.8指針表達式 340
11.9指針的遞增與比例因子 341
11.10指針與數組 342
11.11指針與字元串 345
11.12指針數組 347
11.13將指針作為函式的參數 348
11.14函式返回指針 351
11.15指向函式的指針 352
11.16指針與結構體 354
11.17指針存在的問題 357
11.18案例學習 358
11.18.1考試成績處理程式 358
11.18.2庫存更新程式 362
複習題 363
編程練習 366
第12章檔案管理 367
12.1概述 367
12.2定文並打開檔案 368
12.3關閉檔案 369
12.4檔案的輸入輸出操作 370
12.4.1getc與putc函式 370
12.4.2getw和putw函式 371
12.4.3fprintf與fscanf函式 373
12.5I/O操作的錯誤處理 375
12.6隨機訪問檔案 377
12.7命令行參數 382
複習題 385
編程練習 386
第13章動態記憶體分配與鍊表 387
13.1概述 387
13.2動態記憶體分配 387
13.3用malloc函式分配一塊記憶體 388
13.4用calloc函式分配多個記憶體塊 390
13.5用free函式釋放已用的空間 391
13.6用realloc函式改變記憶體塊的大小 391
13.7鍊表的概念 393
13.8鍊表的優點 395
13.9鍊表的種類 396
13.10再論指針 397
13.11創建鍊表 399
13.12插入一個數據項 402
13.13刪除一個數據項 405
13.14鍊表的套用 407
13.15案例學習 408
13.15.1在已排序鍊表中插入數據 408
13.15.2構建已排序的鍊表 411
複習題 413
編程練習 415
第14章預處理器 417
14.1概述 417
14.2宏替換指令 418
14.2.1簡單宏替換 418
14.2.2帶參數的宏 420
14.2.3宏嵌套 421
14.2.4取消宏定義 422
14.3檔案包含 422
14.4編譯器控制指令 423
14.4.1情形1 423
14.4.2情形2 424
14.4.3情形3 425
14.4.4情形4 425
14.5ANSIC的其他預處理指令 426
14.5.1#elif指令 426
14.5.2#pragma指令 427
14.5.3#error指令 427
14.5.4字元串化運算符# 427
14.5.5標記符貼上運算符## 428
複習題 429
編程練習 430
第15章C程式開發的一些指導原則 431
15.1概述 431
15.2程式設計 431
15.2.1問題分析 431
15.2.2勾勒出程式的結構 432
15.2.3算法開發 432
15.2.4控制結構的選擇 433
15.3程式編碼 433
15.3.1自身文檔化 433
15.3.2語句的構造 434
15.3.3輸入/輸出格式 434
15.3.4程式的通用性 435
15.4常見的程式錯誤 435
15.4.1丟失分號 435
15.4.2誤用分號 435
15.4.3丟失括弧 436
15.4.4丟失引號 437
15.4.5誤用引號 437
15.4.6使用不正確的注釋字元 437
15.4.7未聲明變數 438
15.4.8忽視了運算符的優先權 438
15.4.9忽視了遞增遞減運算符的計算順序 439
15.4.10忽視了函式參數的說明 439
15.4.11在函式調用中實參和形參類型不匹配 439
15.4.12函式未聲明 439
15.4.13在scanf函式的參數中丟失了&運算符 440
15.4.14超出了數組的邊界 440
15.4.15忘記了給字元串的空字元留出空間 441
15.4.16使用未初始化的指針 441
15.4.17丟失了間接運算符和地址運算符 441
15.4.18在指針表達式中丟失括弧 442
15.4.19宏定義語句中的參數遺漏了括弧 442
15.5程式測試與調試 442
15.5.1錯誤的類型 443
15.5.2程式測試 443
15.5.3程式調試 444
15.6程式的效率 444
15.6.1運行時間 445
15.6.2記憶體需求 445
複習題 445
附錄A位級程式設計 447
附錄B字元的ASCII值 453
附錄CANSIC語言的庫函式 455
附錄D項目設計 459
附錄EC99的特性 501