1. 程式人生 > >《C Primer Plus 》第6版 中文版_作者:[美]史蒂芬·普拉達_全文免費完整版pdf下載

《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小時內刪除;本書版權歸原作者及出版商所有,如果您喜歡,請購買正版。

.