《C Primer Plus 》第6版 中文版_作者:[美]史蒂芬·普拉達_全文免費完整版pdf下載
內容簡介
《C Primer Plus(第6版)中文版》詳細講解了C語言的基本概念和程式設計技巧。《C Primer Plus(第6版)中文版》共17章。第1、2章介紹了C語言程式設計的預備知識。第3~15章詳細講解了C語言的相關知識,包括資料型別、格式化輸入/輸出、運算子、表示式、語句、迴圈、字元輸入和輸出、函式、陣列和指標、字元和字串函式、記憶體管理、檔案輸入輸出、結構、位操作等。第16章、17章介紹C前處理器、C庫和高階資料表示。本書以完整的程式為例,講解C語言的知識要點和注意事項。每章末設計了大量複習題和程式設計練習,幫助讀者鞏固所學知識和提高實際程式設計能力。附錄給出了各章複習題的參考答案和豐富的參考資料。《C Primer Plus(第6版)中文版》可作為C語言的教材,適用於需要系統學習C語言的初學者,也適用於鞏固C語言知識或希望進一步提高程式設計技術的程式設計師。
作者簡介
Stephen Prata曾在加利福尼亞的馬林學院(肯特菲爾德)教授天文學、物理學和程式設計課程,現已退休。他在加州理工學院獲得學士學位,在加州大學伯克利分校獲得博士學位。他接觸程式設計,是為了利用計算機給星團建模。Stephen撰寫和與他人合著了十幾本書籍,其中包括C Primer Plus和Unix Primer Plus。
目錄
第1章初識C語言1
1.1 C語言的起源1
1.2選擇C語言的理由1
1.2.1設計特性1
1.2.2高效性1
1.2.3可移植性2
1.2.4強大而靈活3
1.2.5面向程式設計師3
1.2.6缺點3
1.3 C語言的應用範圍3
1.4計算機能做什麼4
1.5高階計算機語言和編譯器5
1.6語言標準6
1.6.1第1個ANSI/ISO C標準6
1.6.2 C99標準6
1.6.3 C11標準7
1.7使用C語言的7個步驟7
1.7.1第1步:定義程式的目標8
1.7.2第2步:設計程式8
1.7.3第3步:編寫程式碼8
1.7.4第4步:編譯8
1.7.5第5步:執行程式9
1.7.6第6步:測試和除錯程式9
1.7.7第7步:維護和修改程式碼9
1.7.8說明9
1.8程式設計機制10
1.8.1目的碼檔案、可執行檔案和庫10
1.8.2 UNIX系統11
1.8.3 GNU編譯器集合和LLVM專案13
1.8.4 Linux系統13
1.8.5 PC的命令列編譯器14
1.8.6整合開發環境(Windows)14
1.8.7 Windows/Linux 15
1.8.8 Macintosh中的C 15
1.9本書的組織結構15
1.10本書的約定16
1.10.1字型16
1.10.2程式輸出16
1.10.3特殊元素17
1.11本章小結17
1.12複習題18
1.13程式設計練習18
第2章C語言概述19
2.1簡單的C程式示例19
2.2示例解釋20
2.2.1第1遍:快速概要21
2.2.2第2遍:程式細節21
2.3簡單程式的結構28
2.4提高程式可讀性的技巧28
2.5進一步使用C 29
2.5.1程式說明30
2.5.2多條宣告30
2.5.3乘法30
2.5.4列印多個值30
2.6多個函式30
2.7除錯程式32
2.7.1語法錯誤32
2.7.2語義錯誤33
2.7.3程式狀態34
2.8關鍵字和保留識別符號34
2.9關鍵概念35
2.10本章小結35
2.11複習題36
2.12程式設計練習37
第3章資料和C 39
3.1示例程式39
3.2變數與常量資料42
3.3資料:資料型別關鍵字42
3.3.1整數和浮點數43
3.3.2整數43
3.3.3浮點數43
3.4 C語言基本資料型別44
3.4.1 int型別44
3.4.2其他整數型別47
3.4.3使用字元:char型別50
3.4.4 _Bool型別54
3.4.5可移植型別:stdint.h和inttypes.h 55
3.4.6 float、double和long double 56
3.4.7複數和虛數型別60
3.4.8其他型別60
3.4.9型別大小62
3.5使用資料型別63
3.6引數和陷阱63
3.7轉義序列示例64
3.7.1程式執行情況65
3.7.2重新整理輸出65
3.8關鍵概念66
3.9本章小結66
3.10複習題67
3.11程式設計練習68
第4章字串和格式化輸入/輸出71
4.1前導程式71
4.2字串簡介72
4.2.1 char型別陣列和null字元72
4.2.2使用字串73
4.2.3 strlen()函式74
4.3常量和C前處理器76
4.3.1 const限定符78
4.3.2明示常量78
4.4 printf()和scanf()80
4.4.1 printf()函式80
4.4.2使用printf()81
4.4.3 printf()的轉換說明修飾符83
4.4.4轉換說明的意義87
4.4.5使用scanf()92
4.4.6 printf()和scanf()的*修飾符95
4.4.7 printf()的用法提示97
4.5關鍵概念98
4.6本章小結98
4.7複習題99
4.8程式設計練習100
第5章運算子、表示式和語句103
5.1迴圈簡介103
5.2基本運算子105
5.2.1賦值運算子:=105
5.2.2加法運算子:107
5.2.3減法運算子:-107
5.2.4符號運算子:-和107
5.2.5乘法運算子:*108
5.2.6除法運算子:/110
5.2.7運算子優先順序110
5.2.8優先順序和求值順序112
5.3其他運算子113
5.3.1 sizeof運算子和size_t型別113
5.3.2求模運算子:%114
5.3.3遞增運算子:115
5.3.4遞減運算子:--118
5.3.5優先順序118
5.3.6不要自作聰明119
5.4表示式和語句120
5.4.1表示式120
5.4.2語句120
5.4.3複合語句(塊)123
5.5型別轉換124
5.6帶引數的函式127
5.7示例程式129
5.8關鍵概念130
5.9本章小結130
5.10複習題131
5.11程式設計練習134
第6章C控制語句:迴圈137
6.1再探while迴圈137
6.1.1程式註釋138
6.1.2 C風格讀取迴圈139
6.2 while語句140
6.2.1終止while迴圈140
6.2.2何時終止迴圈141
6.2.3 while:入口條件迴圈141
6.2.4語法要點141
6.3用關係運算符和表示式比較大小143
6.3.1什麼是真144
6.3.2其他真值145
6.3.3真值的問題146
6.3.4新的_Bool型別147
6.3.5優先順序和關係運算符148
6.4不確定迴圈和計數迴圈150
6.5 for迴圈151
6.6其他賦值運算子:=、-=、*=、/=、%=155
6.7逗號運算子156
6.8出口條件迴圈:do while 159
6.9如何選擇迴圈161
6.10巢狀迴圈162
6.10.1程式分析163
6.10.2巢狀變式163
6.11陣列簡介164
6.12使用函式返回值的迴圈示例166
6.12.1程式分析168
6.12.2使用帶返回值的函式169
6.13關鍵概念169
6.14本章小結170
6.15複習題170
6.16程式設計練習174
第7章C控制語句:分支和跳轉177
7.1 if語句177
7.2 if else語句179
7.2.1另一個示例:介紹getchar()和putchar()180
7.2.2 ctype.h系列的字元函式182
7.2.3多重選擇else if 184
7.2.4 else與if配對186
7.2.5多層巢狀的if語句187
7.3邏輯運算子190
7.3.1備選拼寫:iso646.h標頭檔案191
7.3.2優先順序192
7.3.3求值順序192
7.3.4範圍193
7.4一個統計單詞的程式194
7.5條件運算子:?:196
7.6迴圈輔助:continue和break 198
7.6.1 continue語句198
7.6.2 break語句200
7.7多重選擇:switch和break 202
7.7.1 switch語句204
7.7.2只讀每行的首字元205
7.7.3多重標籤206
7.7.4 switch和if else 208
7.8 goto語句208
7.9關鍵概念211
7.10本章小結211
7.11複習題212
7.12程式設計練習214
第8章字元輸入/輸出和輸入驗證217
8.1單字元I/O:getchar()和putchar()217
8.2緩衝區218
8.3結束鍵盤輸入219
8.3.1檔案、流和鍵盤輸入219
8.3.2檔案結尾220
8.4重定向和檔案222
8.5建立更友好的使用者介面226
8.5.1使用緩衝輸入226
8.5.2混合數值和字元輸入228
8.6輸入驗證230
8.6.1分析程式234
8.6.2輸入流和數字234
8.7選單瀏覽235
8.7.1任務235
8.7.2使執行更順利235
8.7.3混合字元和數值輸入237
8.8關鍵概念240
8.9本章小結240
8.10複習題241
8.11程式設計練習241
第9章函式243
9.1複習函式243
9.1.1建立並使用簡單函式244
9.1.2分析程式245
9.1.3函式引數247
9.1.4定義帶形式引數的函式248
9.1.5宣告帶形式引數函式的原型249
9.1.6呼叫帶實際引數的函式249
9.1.7黑盒視角250
9.1.8使用return從函式中返回值250
9.1.9函式型別252
9.2 ANSI C函式原型253
9.2.1問題所在253
9.2.2 ANSI的解決方案254
9.2.3無引數和未指定引數255
9.2.4函式原型的優點256
9.3遞迴256
9.3.1演示遞迴256
9.3.2遞迴的基本原理258
9.3.3尾遞迴258
9.3.4遞迴和倒序計算260
9.3.5遞迴的優缺點262
9.4編譯多原始碼檔案的程式262
9.4.1 UNIX 263
9.4.2 Linux 263
9.4.3 DOS命令列編譯器263
9.4.4 Windows和蘋果的IDE編譯器263
9.4.5使用標頭檔案263
9.5查詢地址:&運算子267
9.6更改主調函式中的變數268
9.7指標簡介269
9.7.1間接運算子:*270
9.7.2宣告指標270
9.7.3使用指標在函式間通訊271
9.8關鍵概念274
9.9本章小結275
9.10複習題275
9.11程式設計練習276
第10章陣列和指標277
10.1陣列277
10.1.1初始化陣列277
10.1.2指定初始化器(C99)281
10.1.3給陣列元素賦值282
10.1.4陣列邊界282
10.1.5指定陣列的大小284
10.2多維陣列284
10.2.1初始化二維陣列287
10.2.2其他多維陣列288
10.3指標和陣列288
10.4函式、陣列和指標290
10.4.1使用指標形參293
10.4.2指標表示法和陣列表示法294
10.5指標操作295
10.6保護陣列中的資料298
10.6.1對形式引數使用const 299
10.6.2 const的其他內容300
10.7指標和多維陣列302
10.7.1指向多維陣列的指標304
10.7.2指標的相容性305
10.7.3函式和多維陣列306
10.8變長陣列(VLA)309
10.9複合字面量312
10.10關鍵概念314
10.11本章小結315
10.12複習題316
10.13程式設計練習317
第11章字串和字串函式321
11.1表示字串和字串I/O 321
11.1.1在程式中定義字串322
11.1.2指標和字串328
11.2字串輸入329
11.2.1分配空間329
11.2.2不幸的gets()函式330
11.2.3 gets()的替代品331
11.2.4 scanf()函式336
11.3字串輸出337
11.3.1 puts()函式338
11.3.2 fputs()函式339
11.3.3 printf()函式339
11.4自定義輸入/輸出函式340
11.5字串函式342
11.5.1 strlen()函式342
11.5.2 strcat()函式343
11.5.3 strncat()函式345
11.5.4 strcmp()函式346
11.5.5 strcpy()和strncpy()函式351
11.5.6 sprintf()函式356
11.5.7其他字串函式357
11.6字串示例:字串排序359
11.6.1排序指標而非字串360
11.6.2選擇排序演算法361
11.7 ctype.h字元函式和字串362
11.8命令列引數363
11.8.1整合環境中的命令列引數365
11.8.2 Macintosh中的命令列引數365
11.9把字串轉換為數字365
11.10關鍵概念368
11.11本章小結368
11.12複習題369
11.13程式設計練習371
第12章儲存類別、連結和記憶體管理373
12.1儲存類別373
12.1.1作用域374
12.1.2連結376
12.1.3儲存期376
12.1.4自動變數377
12.1.5暫存器變數380
12.1.6塊作用域的靜態變數381
12.1.7外部連結的靜態變數382
12.1.8內部連結的靜態變數386
12.1.9多檔案386
12.1.10儲存類別說明符387
12.1.11儲存類別和函式389
12.1.12儲存類別的選擇389
12.2隨機數函式和靜態變數390
12.3擲骰子393
12.4分配記憶體:malloc()和free()396
12.4.1 free()的重要性399
12.4.2 calloc()函式400
12.4.3動態記憶體分配和變長陣列400
12.4.4儲存類別和動態記憶體分配401
12.5 ANSI C型別限定符402
12.5.1 const型別限定符403
12.5.2 volatile型別限定符404
12.5.3 restrict型別限定符405
12.5.4 _Atomic型別限定符(C11)406
12.5.5舊關鍵字的新位置406
12.6關鍵概念407
12.7本章小結407
12.8複習題408
12.9程式設計練習409
第13章檔案輸入/輸出413
13.1與檔案進行通訊413
13.1.1檔案是什麼413
13.1.2文字模式和二進位制模式413
13.1.3 I/O的級別415
13.1.4標準檔案415
13.2標準I/O 415
13.2.1檢查命令列引數416
13.2.2 fopen()函式416
13.2.3 getc()和putc()函式417
13.2.4檔案結尾418
13.2.5 fclose()函式419
13.2.6指向標準檔案的指標419
13.3一個簡單的檔案壓縮程式419
13.4檔案I/O:fprintf()、fscanf()、fgets()和fputs()421
13.4.1 fprintf()和fscanf()函式421
13.4.2 fgets()和fputs()函式422
13.5隨機訪問:fseek()和ftell()423
13.5.1 fseek()和ftell()的工作原理424
13.5.2二進位制模式和文字模式425
13.5.3可移植性425
13.5.4 fgetpos()和fsetpos()函式426
13.6標準I/O的機理426
13.7其他標準I/O函式427
13.7.1 int ungetc(int c,FILE*fp)函式427
13.7.2 int fflush()函式428
13.7.3 int setvbuf()函式428
13.7.4二進位制I/O:fread()和fwrite()428
13.7.5 size_t fwrite()函式429
13.7.6 size_t fread()函式430
13.7.7 int feof(FILE*fp)和int ferror(FILE*fp)函式430
13.7.8一個程式示例430
13.7.9用二進位制I/O進行隨機訪問433
13.8關鍵概念435
13.9本章小結435
13.10複習題435
13.11程式設計練習437
第14章結構和其他資料形式439
14.1示例問題:建立圖書目錄439
14.2建立結構宣告441
14.3定義結構變數441
14.3.1初始化結構442
14.3.2訪問結構成員443
14.3.3結構的初始化器443
14.4結構陣列444
14.4.1宣告結構陣列446
14.4.2標識結構陣列的成員447
14.4.3程式討論447
14.5巢狀結構448
14.6指向結構的指標449
14.6.1宣告和初始化結構指標450
14.6.2用指標訪問成員451
14.7向函式傳遞結構的資訊451
14.7.1傳遞結構成員451
14.7.2傳遞結構的地址452
14.7.3傳遞結構453
14.7.4其他結構特性454
14.7.5結構和結構指標的選擇458
14.7.6結構中的字元陣列和字元指標458
14.7.7結構、指標和malloc()459
14.7.8複合字面量和結構(C99)462
14.7.9伸縮型陣列成員(C99)463
14.7.10匿名結構(C11)465
14.7.11使用結構陣列的函式466
14.8把結構內容儲存到檔案中467
14.8.1儲存結構的程式示例468
14.8.2程式要點470
14.9鏈式結構471
14.10聯合簡介472
14.10.1使用聯合472
14.10.2匿名聯合(C11)473
14.11列舉型別474
14.11.1 enum常量475
14.11.2預設值475
14.11.3賦值475
14.11.4 enum的用法476
14.11.5共享名稱空間477
14.12 typedef簡介478
14.13其他複雜的宣告479
14.14函式和指標481
14.15關鍵概念487
14.16本章小結487
14.17複習題488
14.18程式設計練習490
第15章位操作493
15.1二進位制數、位和位元組493
15.1.1二進位制整數494
15.1.2有符號整數494
15.1.3二進位制浮點數495
15.2其他進位制數495
15.2.1八進位制495
15.2.2十六進位制496
15.3 C按位運算子496
15.3.1按位邏輯運算子497
15.3.2用法:掩碼498
15.3.3用法:開啟位(設定位)498
15.3.4用法:關閉位(清空位)499
15.3.5用法:切換位499
15.3.6用法:檢查位的值500
15.3.7移位運算子500
15.3.8程式設計示例501
15.3.9另一個例子503
15.4位欄位505
15.4.1位欄位示例506
15.4.2位欄位和按位運算子509
15.5對齊特性(C11)515
15.6關鍵概念516
15.7本章小結516
15.8複習題517
15.9程式設計練習518
第16章C前處理器和C庫521
16.1翻譯程式的第一步521
16.2明示常量:#define 522
16.2.1記號525
16.2.2重定義常量525
16.3在#define中使用引數525
16.3.1用巨集引數建立字串:#運算子527
16.3.2前處理器黏合劑:##運算子528
16.3.3變參巨集:...和_ _VA_ARGS_ _ 529
16.4巨集和函式的選擇530
16.5檔案包含:#include 531
16.5.1標頭檔案示例531
16.5.2使用標頭檔案533
16.6其他指令534
16.6.1#undef指令534
16.6.2從C前處理器角度看已定義534
16.6.3條件編譯535
16.6.4預定義巨集539
16.6.5#line和#error 540
16.6.6#pragma 540
16.6.7泛型選擇(C11)541
16.7行內函數(C99)542
16.8 _Noreturn函式(C11)544
16.9 C庫544
16.9.1訪問C庫544
16.9.2使用庫描述545
16.10數學庫546
16.10.1三角問題547
16.10.2型別變體548
16.10.3 tgmath.h庫(C99)550
16.11通用工具庫550
16.11.1 exit()和atexit()函式550
16.11.2 qsort()函式552
16.12斷言庫556
16.12.1 assert的用法556
16.12.2 _Static_assert(C11)557
16.13 string.h庫中的memcpy()和memmove()558
16.14可變引數:stdarg.h 560
16.15關鍵概念562
16.16本章小結562
16.17複習題562
16.18程式設計練習563
第17章高階資料表示567
17.1研究資料表示567
17.2從陣列到連結串列570
17.2.1使用連結串列572
17.2.2反思576
17.3抽象資料型別(ADT)576
17.3.1建立抽象577
17.3.2建立介面578
17.3.3使用介面581
17.3.4實現介面583
17.4佇列ADT 589
17.4.1定義佇列抽象資料型別590
17.4.2定義一個介面590
17.4.3實現介面資料表示591
17.4.4測試佇列598
17.5用佇列進行模擬600
17.6連結串列和陣列605
17.7二叉查詢樹608
17.7.1二叉樹ADT 608
17.7.2二叉查詢樹介面609
17.7.3二叉樹的實現611
17.7.4使用二叉樹624
17.7.5樹的思想628
17.8其他說明629
17.9關鍵概念630
17.10本章小結630
17.11複習題630
17.12程式設計練習631
附錄A複習題答案633
附錄B參考資料665
B.1參考資料I:補充閱讀665
B.2參考資料II:C運算子667
B.3參考資料III:基本型別和儲存類別671
B.4參考資料IV:表示式、語句和程式流675
B.5參考資料V:新增C99和C11的ANSI C庫679
B.6參考資料VI:擴充套件的整數型別714
B.7參考資料VII:擴充套件字元支援716
B.8參考資料VIII:C99/C11數值計算增強720
B.9參考資料IX:C和C的區別726
免責宣告:資料僅限個人學習之用,請在下載後24小時內刪除;本書版權歸原作者及出版商所有,如果您喜歡,請購買正版。
.