C語言程序設計
作 者: (美)金(King,K. N.) 著;呂秀鋒,黃倩 譯 著
定 價: 79
出?版?社: 人民郵電出版社
出版日期: 2010年02月01日
頁 數: 600
裝 幀: 平裝
ISBN: 9787115219572
●章C語言概述1
1.1C語言的歷史1
1.1.1起源1
1.1.2標準化1
1.1.3基於C的語言2
1.2C語言的優缺點3
1.2.1C語言的優點3
1.2.2C語言的缺點3
1.2.3高效地使用C語言4
問與答5
第2章C語言基本概念7
2.1編寫一個簡單的C程序7
程序顯示雙關語7
2.1.1編譯和鏈接8
2.1.2集成開發環境8
2.2簡單程序的一般形式9
2.2.1指令9
2.2.2函數9
2.2.3語句10
2.2.4顯示字符串10
2.3注釋11
2.4變量和賦值12
2.4.1類型12
2.4.2聲明13
2.4.3賦值13
2.4.4顯示變量的值14
程序計算箱子的空間重量14
2.4.5初始化15
2.4.6顯示表達式的值16
2.5讀入輸入16
程序計算箱子的空間重量(改進版)16
2.6定義常量的名字17
程序華氏溫度轉換為攝氏溫度17
2.7標識符18
2.8C程序的書寫規範19
問與答21
練習題23
編程題24
第3章格式化輸入/輸出26
3.1printf函數26
3.1.1轉換說明27
程序用printf函數格式化數28
3.1.2轉義序列28
3.2scanf函數29
3.2.1scanf函數的工作方法30
3.2.2格式串中的普通字符31
3.2.3易混淆的printf函數和scanf函數32
程序分數相加32
問與答33
練習題34
編程題35
第4章表達式36
4.1算術運算符36
程序計算通用產品代碼的校驗位38
4.2賦值運算符39
4.2.1簡單賦值40
4.2.2左值41
4.2.3復合賦值41
4.3自增運算符和自減運算符42
4.4表達式求值43
4.5表達式語句45
問與答45
練習題47
編程題49
第5章選擇語句50
5.1邏輯表達式50
5.1.1關繫運算符50
5.1.2判等運算符51
5.1.3邏輯運算符51
5.2if語句52
5.2.1復合語句53
5.2.2else子句53
5.2.3級聯式if語句54
程序計算股票經紀人的傭金55
5.2.4“懸空else”的問題56
5.2.5條件表達式57
5.2.6C89中的布爾值58
5.2.7C99中的布爾值58
5.3switch語句59
程序顯示法定格式的日期61
問與答62
練習題65
編程題67
第6章循環69
6.1while語句69
程序顯示平方表71
程序數列求和71
6.2do語句72
程序計算整數的位數73
6.3for語句73
6.3.1for語句的慣用法74
6.3.2在for語句中省略表達式75
6.3.3C99中的for語句75
6.3.4逗號運算符76
程序顯示平方表(改進版)77
6.4退出循環78
6.4.1break語句78
6.4.2continue語句78
6.4.3goto語句79
程序賬簿結算80
6.5空語句81
問與答83
練習題84
編程題85
第7章基本類型88
7.1整數類型88
7.1.1C99中的整數類型90
7.1.2整數常量90
7.1.3C99中的整數常量91
7.1.4整數溢出91
7.1.5讀/寫整數91
程序數列求和(改進版)92
7.2浮點類型93
7.2.1浮點常量94
7.2.2讀/寫浮點數94
7.3字符類型94
7.3.1字符操作95
7.3.2有符號字符和無符號字符95
7.3.3算術類型96
7.3.4轉義序列96
7.3.5字符處理函數97
7.3.6用scanf和printf讀/寫字符98
7.3.7用getchar和putchar讀/寫字符98
程序確定消息的長度99
7.4類型轉換100
7.4.1常用算術轉換101
7.4.2賦值過程中的轉換102
7.4.3C99中的隱式轉換103
7.4.4強制類型轉換103
7.5類型定義105
7.5.1類型定義的優點105
7.5.2類型定義和可移植性105
7.6sizeof運算符106
問與答107
練習題109
編程題110
第8章數組113
8.1一維數組113
8.1.1數組下標113
程序數列反向115
8.1.2數組初始化115
8.1.3指定初始化式116
程序檢查數中重復出現的數字116
8.1.4對數組使用sizeof運算符117
程序計算利息118
8.2多維數組119
8.2.1多維數組初始化120
8.2.2常量數組121
程序發牌121
8.3C99中的變長數組122
問與答123
練習題124
編程題125
第9章函數129
9.1函數的定義和調用129
程序計算平均值129
程序顯示倒計數130
程序顯示雙關語(改進版)131
9.1.1函數定義132
9.1.2函數調用133
程序判定素數134
9.2函數聲明135
9.3實際參數136
9.3.1實際參數的轉換137
9.3.2數組型實際參數138
9.3.3變長數組形式參數140
9.3.4在數組參數聲明中使用static141
9.3.5復合字面量141
9.4return語句142
9.5程序終止143
9.6遞歸144
程序快速排序146
問與答147
練習題150
編程題153
0章程序結構155
10.1局部變量155
10.1.1靜態局部變量156
10.1.2形式參數156
10.2外部變量156
10.2.1示例:用外部變量實現棧156
10.2.2外部變量的利與弊157
程序猜數158
10.3程序塊161
10.4作用域162
10.5構建C程序163
程序給一手牌分類163
問與答169
練習題169
編程題170
1章指針172
11.1指針變量172
11.2取地址運算符和間接尋址運算符173
11.2.1取地址運算符173
11.2.2間接尋址運算符174
11.3指針賦值174
11.4指針作為參數176
程序找出數素177
11.5指針作為返回值179
問與答180
練習題181
編程題182
2章指針和數組184
12.1指針的算術運算184
12.1.1指針加上整數185
12.1.2指針減去整數185
12.1.3兩個指針相減186
12.1.4指針比較186
12.1.5指向復合常量的指針186
12.2指針用於數組處理186
12.3用數組名作為指針188
程序數列反向(改進版)189
12.3.1數組型實際參數(改進版)189
12.3.2用指針作為數組名191
12.4指針和多維數組191
12.4.1處理多維素191
12.4.2處理多維數組的行192
12.4.3處理多維數組的列192
12.4.4用多維數組名作為指針192
12.5C99中的指針和變長數組193
問與答194
練習題195
編程題197
3章字符串198
13.1字符串字面量198
13.1.1字符串字面量中的轉義序列198
13.1.2延續字符串字面量199
13.1.3如何存儲字符串字面量199
13.1.4字符串字面量的操作200
13.1.5字符串字面量與字符常量200
13.2字符串變量200
13.2.1初始化字符串變量201
13.2.2字符數組與字符指針202
13.3字符串的讀和寫203
13.3.1用printf函數和puts函數寫字符串203
13.3.2用scanf函數和gets函數讀字符串203
13.3.3逐個字符讀字符串204
13.4訪問字符串中的字符205
13.5使用C語言的字符串庫206
13.5.1strcpy函數207
13.5.2strlen函數208
13.5.3strcat函數208
13.5.4strcmp函數209
程序顯示一個月的提醒列表209
13.6字符串慣用法211
13.6.1搜索字符串的結尾211
13.6.2復制字符串213
13.7字符串數組214
程序核對行星的名字217
問與答218
練習題220
編程題222
4章預處理器225
14.1預處理器的工作原理225
14.2預處理指令227
14.3宏定義227
14.3.1簡單的宏227
14.3.2帶參數的宏229
14.3.3#運算符231
14.3.4##運算符231
14.3.5宏的通用屬性232
14.3.6宏定義中的圓括號233
14.3.7創建較長的宏233
14.3.8預定義宏234
14.3.9C99中新增的預定義宏235
14.3.10空的宏參數236
14.3.11參數個數可變的宏236
14.3.12__func__標識符237
14.4條件編譯237
14.4.1#if指令和#endif指令238
14.4.2defined運算符238
14.4.3#ifdef指令和#ifndef指令239
14.4.4#elif指令和#else指令239
14.4.5使用條件編譯240
14.5其他指令240
14.5.1#error指令240
14.5.2#line指令241
14.5.3#pragma指令242
14.5.4_Pragma運算符242
問與答243
練習題245
5章編寫大型程序248
15.1源文件248
15.2頭文件249
15.2.1#include指令249
15.2.2共享宏定義和類型定義250
15.2.3共享函數原型251
15.2.4共享變量聲明252
15.2.5嵌套包含253
15.2.6保護頭文件253
15.2.7頭文件中的#error指令254
15.3把程序劃分成多個文件254
程序文本格式化255
15.4構建多文件程序260
15.4.1makefile260
15.4.2鏈接期間的錯誤262
15.4.3重新構建程序262
15.4.4在程序外定義宏264
問與答264
練習題265
編程題266
6章結構、聯合和枚舉267
16.1結構變量267
16.1.1結構變量的聲明267
16.1.2結構變量的初始化269
16.1.3指定初始化269
16.1.4對結構的操作270
16.2結構類型270
16.2.1結構標記的聲明271
16.2.2結構類型的定義272
16.2.3結構作為參數和返回值272
16.2.4復合字面量273
16.3嵌套的數組和結構274
16.3.1嵌套的結構274
16.3.2結構數組274
16.3.3結構數組的初始化275
程序維護零件數據庫275
16.4聯合281
16.4.1用聯合來空間282
16.4.2用聯合來構造混合的數據結構284
16.4.3為聯合添加“標記字段”284
16.5枚舉285
16.5.1枚舉標記和類型名286
16.5.2枚舉作為整數286
16.5.3用枚舉聲明“標記字段”286
問與答287
練習題289
編程題293
7章指針的不錯應用294
17.1動態存儲分配294
17.1.1內存分配函數294
17.1.2空指針295
17.2動態分配字符串296
17.2.1使用malloc函數為字符串分配內存296
17.2.2在字符串函數中使用動態存儲分配296
17.2.3動態分配字符串的數組297
程序顯示一個月的提醒列表(改進版)297
17.3動態分配數組299
17.3.1使用malloc函數為數組分配存儲空間299
17.3.2calloc函數300
17.3.3realloc函數300
17.4釋放存儲空間301
17.4.1free函數301
17.4.2“懸空指針”問題301
17.5鏈表302
17.5.1聲明結點類型302
17.5.2創建結點303
17.5.3->運算符303
17.5.4在鏈表的開始處插入結點304
17.5.5搜索鏈表306
17.5.6從鏈表中刪除結點307
17.5.7有序鏈表308
程序維護零件數據庫(改進版)309
17.6指向指針的指針313
17.7指向函數的指針314
17.7.1函數指針作為參數314
17.7.2qsort函數314
17.7.3函數指針的其他用途316
程序列三角函數表317
17.8受限指針318
17.9靈活數組成員319
問與答320
練習題323
編程題325
8章聲明327
18.1聲明的語法327
18.2存儲類型328
18.2.1變量的性質328
18.2.2auto存儲類型329
18.2.3static存儲類型329
18.2.4extern存儲類型330
18.2.5register存儲類型331
18.2.6函數的存儲類型332
18.2.7小結332
18.3類型限定符333
18.4聲明符334
18.4.1解釋復雜聲明335
18.4.2使用類型定義來簡化聲明336
18.5初始化式336
18.6內聯函數337
18.6.1內聯定義338
18.6.2對內聯函數的限制339
18.6.3在GCC中使用內聯函數339
問與答339
練習題342
9章程序設計345
19.1模塊345
19.1.1內聚性與耦合性347
19.1.2模塊的類型347
19.2信息隱藏347
19.3抽像數據類型350
19.3.1封裝351
19.3.2不完整類型351
19.4棧抽像數據類型352
19.4.1為棧抽像數據類型定義接口352
19.4.2用定長數組實現棧抽像數據類型353
19.4.3改變棧抽像數據類型中數據項的類型354
19.4.4用動態數組實現棧抽像數據類型355
19.4.5用鏈表實現棧抽像數據類型357
19.5抽像數據類型的設計問題359
19.5.1命名慣例359
19.5.2錯誤處理359
19.5.3通用抽像數據類型359
19.5.4新語言中的抽像數據類型360
問與答360
練習題361
編程題362
第20章底層程序設計363
20.1位運算符363
20.1.1移位運算符363
20.1.2按位求反運算符、按位與運算符、按位異或運算符和按位或運算符364
20.1.3用位運算符訪問位365
20.1.4用位運算符訪問位域366
程序XOR加密366
20.2結構中的位域367
20.3其他底層技術369
20.3.1定義依賴機器的類型369
20.3.2用聯合提供數據的多個視角370
20.3.3將指針作為地址使用371
程序查看371
20.3.4volatile類型限定符373
問與答374
練習題374
編程題376
第21章標準庫377
21.1標準庫的使用377
21.1.1對標準庫中所用名字的限制377
21.1.2使用宏隱藏的函數378
21.2C89標準庫概述378
21.3C99標準庫更新380
21.4:常用定義381
21.5:布爾類型和值381
問與答382
練習題382
編程題383
第22章輸入/輸出384
22.1流384
22.1.1文件指針385
22.1.2標準流和重定向385
22.1.3文本文件與二進制文件385
22.2文件操作386
22.2.1打開文件386
22.2.2模式387
22.2.3關閉文件388
22.2.4為打開的流附加文件389
22.2.5從命令行獲取文件名389
程序檢查文件是否可以打開389
22.2.6臨時文件390
22.2.7文件緩衝391
22.2.8其他文件操作392
22.3格式化的輸入/輸出393
22.3.1…printf函數393
22.3.2…printf轉換說明393
22.3.3C99對…printf轉換說明的修改395
22.3.4…printf轉換說明示例396
22.3.5…scanf函數398
22.3.6…scanf格式串398
22.3.7…scanf轉換說明398
22.3.8C99對...scanf轉換說明的改變400
22.3.9scanf示例400
22.3.10檢測文件末尾和錯誤條件401
22.4字符的輸入/輸出403
22.4.1輸出函數403
22.4.2輸入函數403
程序復制文件404
22.5行的輸入/輸出405
22.5.1輸出函數405
22.5.2輸入函數406
22.6塊的輸入/輸出406
22.7文件定位407
程序修改零件記錄文件409
22.8字符串的輸入/輸出409
22.8.1輸出函數410
22.8.2輸入函數410
問與答411
練習題414
編程題416
第23章庫對數值和字符數據的支持419
23.1:浮點類型的特性419
23.2:整數類型的大小421
23.3:數學計算(C89)422
23.3.1錯誤422
23.3.2三角函數422
23.3.3雙曲函數423
23.3.4指數函數和對數函數423
23.3.5冪函數424
23.3.6就近取整函數、值函數和取餘函數424
23.4:數學計算(C99)425
23.4.1IEEE浮點標準425
23.4.2類型426
23.4.3宏426
23.4.4錯誤426
23.4.5函數427
23.4.6分類宏427
23.4.7三角函數428
23.4.8雙曲函數428
23.4.9指數函數和對數函數429
23.4.10冪函數和值函數430
23.4.11誤差函數和伽瑪函數430
23.4.12就近取整函數431
23.4.13取餘函數432
23.4.14操作函數432
23.4.15值函數、小值函數和正差函數433
23.4.16浮點乘加433
23.4.17比較宏434
23.5:字符處理434
23.5.1字符分類函數435
程序測試字符分類函數436
23.5.2字符大小寫映射函數437
程序測試大小寫映射函數437
23.6:字符串處理437
23.6.1復制函數437
23.6.2拼接函數438
23.6.3比較函數439
23.6.4搜索函數440
23.6.5其他函數442
問與答442
練習題443
編程題444
第24章錯誤處理446
24.1ssert.h>:診斷446
24.2:錯誤447
24.3:信號處理448
24.3.1信號宏449
24.3.2signal函數449
24.3.3預定義的信號處理函數450
24.3.4raise函數450
程序測試信號451
24.4:非局部跳轉452
程序測試setjmp和longjmp452
問與答453
練習題454
第25章國際化特性456
25.1:本地化456
25.1.1類別456
25.1.2setlocale函數457
25.1.3localeconv函數458
25.2多字節字符和寬字符461
25.2.1多字節字符461
25.2.2寬字符461
25.2.3統一碼和通用字符集462
25.2.4統一碼編碼462
25.2.5多字節/寬字符轉換函數463
25.2.6多字節/寬字符串轉換函數465
25.3雙字符和三字符465
25.3.1三字符465
25.3.2雙字符466
25.3.3:拼寫替換467
25.4通用字符名467
25.5:擴展的多字節和寬字符實用工具467
25.5.1流傾向468
25.5.2格式化寬字符輸入/輸出函數468
25.5.3寬字符輸入/輸出函數470
25.5.4通用的寬字符串實用工具471
25.5.5寬字符時間轉換函數474
25.5.6擴展的多字節/寬字符轉換實用工具474
25.6:寬字符分類和映射實用工具477
25.6.1寬字符分類函數477
25.6.2可擴展的寬字符分類函數478
25.6.3寬字符大小寫映射函數478
25.6.4可擴展的寬字符大小寫映射函數478
問與答479
練習題479
編程題480
第26章其他庫函數482
26.1:可變參數482
26.1.1調用帶有可變參數列表的函數483
26.1.2v…printf函數484
26.1.3v…scanf函數485
26.2:通用的實用工具485
26.2.1數值轉換函數485
程序測試數值轉換函數486
26.2.2偽序列生成函數488
程序測試偽序列生成函數488
26.2.3與環境的通信489
26.2.4搜索和排序實用工具490
程序確定航空裡程491
26.2.5整數算術運算函數492
26.3:日期和時間492
26.3.1時間處理函數493
26.3.2時間轉換函數495
程序顯示日期和時間498
問與答500
練習題501
編程題502
第27章C99對數學計算的新增支持503
27.1:整數類型503
27.1.1類型503
27.1.2對指定寬度整數類型的限制504
27.1.3對其他整數類型的限制505
27.1.4用於整數常量的宏505
27.2:整數類型的格式轉換506
27.2.1用於格式說明符的宏506
27.2.2用於寬度整數類型的函數507
27.3復數508
27.3.1復數的定義508
27.3.2復數的算術運算509
27.3.3C99中的復數類型509
27.3.4復數的運算510
27.3.5復數類型的轉換規則510
27.4:復數算術運算511
27.4.1宏511
27.4.2CX_LIMITED_RANGE編譯提示512
27.4.3函數512
27.4.4三角函數512
27.4.5雙曲函數513
27.4.6指數函數和對數函數514
27.4.7冪函數和值函數514
27.4.8操作函數514
程序求二次方程的根515
27.5:泛型數學515
27.5.1泛型宏516
27.5.2調用泛型宏517
27.6:浮點環境518
27.6.1浮點狀態標志和控制模式518
27.6.2宏519
27.6.3FENV_ACCESS編譯提示519
27.6.4浮點異常函數520
27.6.5舍入函數520
27.6.6環境函數521
問與答521
練習題522
編程題523
附錄AC語言運算符524
附錄BC99與C89的比較525
附錄CC89與經典C的比較529
附錄D標準庫函數532
附錄EASCII字符集569
參考文獻570
索引573
內容簡介
時至今日,C語言仍然是計算機領域的通用語言之一,但今天的C語言已經和很初的時候大不相同了。本書很主要的一個目的就是通過一種“現代方法”來介紹C語言,書中強調標準C,強調軟件工程,不再強調“手工優化”。這一版中緊密結合了C99標準,並與C89標準進行對照,補充了C99中的很新特性。本書分為C語言的基礎特性、C語言的不錯特性、C語言標準庫和參考資料4個部分。每章末尾都有一個“問與答”小節給出一繫列與該章內容相關的問題及答案,此外還包含適量的習題。本書是為大學本科階段的C語言課程編寫的教材,同時也很好適合作為其他課程的輔助用書。
(美)金(King,K. N.) 著;呂秀鋒,黃倩 譯 著
K. N. King 世界知名的計算機程序設計教育家,現為佐治亞州立大學數學與計算機科學繫副教授。他擁有耶魯大學計算機科學碩士學位,加州大學伯克利分校計算機科學博士學位,曾任教於佐治亞理工學院。除本書外,他還撰寫了廣受歡迎的著作Modula-2: A Complete Guide 和Java Programming: From the Beginning,並在Dr.Dobb"s Journal等很好不錯雜志上發表了許多文章。業餘時間,King教授還在多部電影中扮演過角色。
"