21天學通C語言

21天學通C語言

本書譯自《Teach Yourself C in 21 Days》第6版,該書的前五版都登上了暢銷書排行榜,是初學者學習C語言的經典之作。本版按最新的標準(ISO/IEC:9899-1999),以循序漸進的方式介紹了C語言編程方面的知識,並提供了豐富的實例和大量的練習。通過學習實例,並將所學知識用於完成練習,讀者將逐步了解、熟悉並精通C語言。

基本信息

內容簡介

21天學通C語言

本書包括四周的課程,前三周詳細介紹了C語言,第四周是附加課程,簡要地介紹了最流行的面向對象語言--C++、Java和C#,附加課程的內容在光碟中以pdf格式檔案提供。第一周的課程介紹了C語言程式的基本元素,包括變數、常量、語句、表達式、函式和循環;第二周介紹了數組、指針、字元和字元串、結構和共用體、變數的作用域、輸入/輸出等;第三周介紹了有關指針和函式的高級主題、磁碟檔案讀寫、字元串操縱函式、函式館、記憶體管理以及編譯器的高級用法等。

本書是為國中級程式設計師編寫的,可作為學習C語言的教程或參考資料。

目錄

第一周課程

第1天課程 C語言初步 2

1.1 C語言簡史2

1.2 為何要使用C語言 2

1.3 編程前的準備工作 3

1.4程式開發周期4

1.4.1 創建原始碼 4

1.4.2 編譯原始碼 4

1.4.3 連結以創建執行檔 5

1.4.4 結束開發周期 6

1.5 第一個C語言程式 7

1.5.1 輸入並編譯hello.c 7

1.6 總結 9

1.7 問與答 9

1.8 作業 10

1.8.1 小測驗 10

1.8.2 練習 10

TYPE&RUN1 列印程式清單 12

第一個TYPE&RUN 12

第2天課程 C語言程式的組成部分 14

2.1 一個簡短的C語言程式 14

2.2 程式的組成部分 15

2.2.1 main( )函式(第8~23行) 15

2.2.2 #include編譯指令(第2行) 15

2.2.3 變數定義(第4行) 15

2.2.4 函式原型(第6行) 16

2.2.5 程式語句(第11、12、15、16、19、20、22和28行) 16

2.2.6 函式定義(第26~29行) 16

2.2.7 程式注釋(第1、10、14、18和25行) 16

2.2.8 使用花括弧(第9、23、27和29行) 17

2.2.9 運行程式 17

2.2.10 有關精度的說明 18

2.3 重溫程式的組成部分 18

2.4 總結 20

2.5 問與答 20

2.6 作業 20

2.6.1 小測驗 20

2.6.2 練習 21

第3天課程 存儲信息:變數和常量 23

3.1 計算機記憶體 23

3.2 使用變數存儲信息 24

3.2.1 變數名 24

3.3 數值變數的類型 25

3.3.1 變數聲明 27

3.3.2 typedef關鍵字 27

3.3.3 初始化變數 28

3.4 常量 28

3.4.1 字面常量 28

3.4.2 符號常量 29

3.5 總結 31

3.6 問與答 32

3.7 作業 32

3.7.1 小測驗 32

3.7.2 練習 32

第4天課程 語句、表達式和運算符 34

4.1 語句 34

4.1.1 空白對語句的影響 34

4.1.2 創建空語句 35

4.1.3 使用複合語句 35

4.2 表達式 35

4.2.1 簡單表達式 35

4.2.2 複雜表達式 36

4.3 運算符 36

4.3.1 賦值運算符 36

4.3.2 數學運算符 37

4.3.3 運算符優先權和圓括弧 40

4.3.4 子表達式的計算順序 41

4.3.5 關係運算符 41

4.4 if語句 42

4.4.1 else子句 44

4.5 判斷關係表達式 46

4.5.1 關係運算符的優先權 47

4.6 邏輯運算符 48

4.7 再談true/false值 48

4.7.1 運算符的優先權 49

4.7.2 複合賦值運算符 50

4.7.3 條件運算符 50

4.7.4 逗號運算符 51

4.8 再談運算符優先權 51

4.9 總結 52

4.10 問與答 52

4.11 作業 53

4.11.1 小測驗 53

4.11.2 練習 53

TYPE&RUN2 猜數遊戲 55

第5天課程 使用函式封裝代碼 57

5.1 函式是什麼 57

5.1.1 函式的定義 57

5.1.2 函式的用法 57

5.2 函式的工作原理 59

5.3 函式和結構化編程 60

5.3.1 結構化編程的優點 60

5.3.2 規劃結構化程式 60

5.3.3 從頂向下的方法 61

5.4 編寫函式 61

5.4.1函式頭62

5.4.2 函式的返回類型 62

5.4.3 函式名 62

5.4.4 參數列表 62

5.4.5 函式體 64

5.4.6 函式原型 67

5.5 將參數傳遞給函式 67

5.6 調用函式 68

5.6.1 遞歸 69

5.7 函式的位置 70

5.8 內聯函式 70

5.9 總結 71

5.10 問與答 71

5.11 作業 72

5.11.1 小測驗 72

5.11.2 練習 72

第6天課程 基本的程式流程控制 74

6.1 數組的基本知識 74

6.2 控制程式的執行 75

6.2.1 for語句 75

6.2.2 嵌套for語句 79

6.2.3 while語句 80

6.2.4 嵌套while語句 82

6.2.5 do…while循環 84

6.3 嵌套循環 87

6.4 總結 88

6.5 問與答 88

6.6 作業 88

6.6.1 小測驗 89

6.6.2 練習 89

第7天課程 信息讀寫基礎 90

7.1 在螢幕上顯示信息 90

7.1.1 printf( )函式 90

7.1.2 格式化字元串 90

7.1.3 轉義序列 91

7.1.4 使用puts( )顯示訊息 96

7.2 使用scanf( )函式輸入數值數據 97

7.3 三字元序列 100

7.4 總結 101

7.5 問與答 101

7.6 作業 102

7.6.1 小測驗 102

7.6.2 練習 102

第一周複習 104

第二周課程

第8天課程 使用數值數組 110

8.1 數組是什麼 110

8.1.1 一維數組 110

8.1.2 多維數組 113

8.2 命名和聲明數組 114

8.2.1 初始化數組 115

8.2.2 初始化多維數組 116

8.2.3 數組的最大長度 119

8.3 總結 121

8.4 問與答 121

8.5 作業 121

8.5.1 小測驗 121

8.5.2 練習 122

第9天課程 指針 123

9.1 指針是什麼 123

9.1.1 計算機記憶體 123

9.1.2 創建指針 123

9.2 指針和簡單變數 124

9.2.1 聲明指針 124

9.2.2 初始化指針 124

9.2.3 使用指針 125

9.3 指針和變數類型 126

9.4 指針和數組 127

9.4.1 作為指針的數組名 128

9.4.2 數組元素的存儲 128

9.4.3 指針算術 130

9.5 有關指針的注意事項 133

9.6 數組下標表示法和指針 133

9.7 將數組傳遞給函式 133

9.8 總結 137

9.9 問與答 137

9.10 作業 138

9.10.1 小測驗 138

9.10.2 練習 138

TYPE&RUN3程式暫停139

第10天課程 字元和字元串 141

10.1 char數據類型 141

10.2 使用字元變數141

10.3 使用字元串 144

10.3.1 字元數組 144

10.3.2 初始化字元數組 144

10.4 字元串和指針 144

10.5 不存儲在數組中的字元串 145

10.5.1 編譯時分配字元空間 145

10.5.2 malloc( )函式 145

10.5.3 使用malloc( )函式 146

10.6 顯示字元串和字元 148

10.6.1 puts( )函式 149

10.6.2 printf( )函式 149

10.7 從鍵盤讀取字元串 150

10.7.1 使用gets( )函式輸入字元串 150

10.7.2 使用scanf( )函式輸入字元串 152

10.8 總結 154

10.9 問與答 154

10.10 作業 155

10.10.1 小測驗 155

10.10.2 練習 156

第11天課程 結構、共用體和TypeDef 157

11.1 簡單結構 157

11.1.1 定義和聲明結構 157

11.1.2 存取結構的成員 158

11.2 複雜結構 160

11.2.1 包含其他結構的結構 160

11.2.2 包含數組的結構 162

11.3 結構數組 164

11.4 初始化結構 167

11.5 結構和指針 168

11.5.1 將指針作為結構的成員 168

11.5.2 創建指向結構的指針 170

11.5.3 使用指針和結構數組 171

11.5.4 將結構作為參數傳遞給函式 173

11.6 共用體 174

11.6.1 定義、聲明和初始化共用體 175

11.6.2 存取共用體的成員 175

11.7 使用typedef給結構創建別名 179

11.8 總結 179

11.9 問與答 179

11.10 作業 180

11.10.1 小測驗 180

11.10.2 練習 180

第12天課程 變數作用域 182

12.1 作用域是什麼 182

12.1.1 演示作用域 182

12.1.2 作用域為何重要 184

12.2 外部變數 184

12.2.1 外部變數的作用域 184

12.2.2 何時使用外部變數 184

12.2.3 extern關鍵字 184

12.3 局部變數 185

12.3.1 靜態變數和動態變數 186

12.3.2 函式參數的作用域 187

12.3.3 外部靜態變數 188

12.3.4 暫存器變數 188

12.4 局部變數和main( )函式 189

12.5 應使用哪種存儲類型 189

12.6 局部變數和代碼塊 189

12.7 總結 190

12.8 問與答 191

12.9 作業 191

12.9.1 小測驗 191

12.9.2 練習 191

TYPE&RUN4 機密訊息 194

第13天課程 高級程式流程控制 197

13.1 提早結束循環 197

13.1.1 break語句 197

13.1.2 continue語句 199

13.2 goto語句 200

13.3 死循環 202

13.4 switch語句 205

13.5 退出程式 212

13.5.1 exit( )函式 212

13.6 在程式中執行作業系統命令 213

13.7 總結 214

13.8 問與答 215

13.9 作業 215

13.9.1 小測驗 215

13.9.2 練習 215

第14天課程 操縱螢幕、印表機和鍵盤 217

14.1 流和C語言 217

14.1.1 何為程式的輸入/輸出 217

14.1.2 什麼是流 217

14.1.3 文本流和二進制流 218

14.1.4 預定義的流 218

14.2 使用C語言的流函式 219

14.2.1 例子 219

14.3 讀取鍵盤輸入 220

14.3.1 字元輸入 220

14.3.2 格式化輸入 225

14.4 控制螢幕輸出 231

14.4.1 使用putchar( )、putc( )和fputc( )輸出字元 231

14.4.2 使用puts( )和fputs( )輸出字元串 233

14.4.3 使用printf( )和fprintf( )格式化輸出 234

14.5 重定向輸入/輸出 238

14.5.1 重定向輸入 239

14.6 何時使用fprintf( ) 239

14.6.1 使用stderr 240

14.7 總結 241

14.8 問與答 241

14.9 作業 242

14.9.1 小測驗 242

14.9.2 練習 242

第二周複習 244

第三周課程

第15天課程 有關指針的高級主題 252

15.1 聲明指向指針的指針 252

15.2 指針和多維數組 253

15.3 指針數組 259

15.3.1 複習字元串和指針 259

15.3.2 聲明char類型指針數組 259

15.3.3 範例 261

15.4 函式指針 265

15.4.1 聲明函式指針 265

15.4.2 初始化並使用函式指針 266

15.5 鍊表 273

15.5.1 有關鍊表的基本知識 273

15.5.2 使用鍊表 274

15.5.3 演示簡單鍊表 278

15.5.4 實現鍊表 280

15.6 總結 286

15.7 問與答 286

15.8 作業 286

15.8.1 小測驗 287

15.8.2 練習 287

第16天課程 使用磁碟檔案 289

16.1 將流與磁碟檔案關聯起來 289

16.2 磁碟檔案的類型 289

16.3 檔案名稱 290

16.4 打開檔案 290

16.5 讀寫檔案數據 292

16.5.1 格式化檔案輸入/輸出 293

16.5.2 字元輸入/輸出 296

16.5.3直接檔案輸入/輸出 297

16.6 檔案緩衝技術:關閉和刷新檔案 300

16.7 順序檔案存取和隨機檔案存取 301

16.7.1ftell( )和rewind( )函式 301

16.7.2 fseek( )函式 303

16.8 檢測檔案尾 305

16.9 檔案管理函式 307

16.9.1 刪除檔案 307

16.9.2 給檔案重命名 308

16.9.3 複製檔案 309

16.10 使用臨時檔案 311

16.11 總結 312

16.12 問與答 312

16.13 作業 313

16.13.1 小測驗 313

16.13.2 練習 313

TYPE&RUN5 計算字元數 314

第17天課程 操縱字元串 318

17.1 確定字元串的長度 318

17.2 複製字元串 319

17.2.1 strcpy( )函式 319

17.2.2strncpy( )函式 320

17.2.3strdup( )函式 321

17.3 拼接字元串 322

17.3.1 strcat( )函式 322

17.3.2strncat( )函式 324

17.4 比較字元串 325

17.4.1 比較兩個完整字元串 325

17.4.2 比較字元串的一部分 326

17.4.3 比較字元串時忽略大小寫 328

17.5 查找字元串 328

17.5.1strchr( )函式 328

17.5.2strrchr( )函式 329

17.5.3strcspn( )函式 329

17.5.4strspn( )函式 330

17.5.5strpbrk( )函式 331

17.5.6strstr( )函式 331

17.6 字元串轉換 332

17.7 其他字元串函式 333

17.7.1strrev( )函式 333

17.7.2strset( )和strnset( )函式 334

17.8 將字元串轉換為數字 334

17.8.1 將字元串轉換為int 335

17.8.2 將字元串轉換為long值 335

17.8.3 將字元串轉換為long long值 335

17.8.4 將字元串轉換為浮點數 335

17.9字元檢測函式 336

17.9.1 ANSI對大小寫轉換的支持 339

17.10 總結 340

17.11 問與答 340

17.12 作業 341

17.12.1 小測驗 341

17.12.2 練習 341

第18天課程 有關函式的高級主題 343

18.1 將指針傳遞給函式 343

18.2 void類型的指針 346

18.3 接受可變數目參數的函式 348

18.4 返回指針的函式 350

18.5 總結 352

18.6 問與答 352

18.7 作業 352

18.7.1 小測驗 352

18.7.2 練習 353

第19天課程 函式館 354

19.1 數學函式 354

19.1.1 三角函式 354

19.1.2指數函式和對數函式354

19.1.3 雙曲線函式 355

19.1.4 其他數學函式 355

19.1.5 演示數學函式 355

19.2 處理時間 356

19.2.1 時間的表示 356

19.2.2 時間函式 356

19.2.3 使用時間函式 359

19.3 處理錯誤 360

19.3.1 assert( )宏 361

19.3.2 頭檔案errno.h 362

19.3.3perror( )函式 362

19.4 查找和排序 364

19.4.1 使用bsearch( )進行查找 364

19.4.2 使用qsort( )進行排序 365

19.4.3 演示查找和排序 365

19.5 總結 370

19.6 問與答 370

19.7 作業 370

19.7.1 小測驗 370

19.7.2 練習 371

TYPE&RUN6 計算抵押貸款的償還金額 372

第20天課程 管理記憶體 374

20.1 類型轉換 374

20.1.1 自動類型轉換 374

20.1.2 顯式轉換 376

20.2 分配記憶體的存儲空間 377

20.2.1 使用malloc( )函式分配記憶體 377

20.2.2 使用calloc( )函式分配記憶體 379

20.2.3 使用realloc( )函式分配更多的記憶體 380

20.2.4 使用free( )函式釋放記憶體 381

20.3 操縱記憶體塊 383

20.3.1 使用memset( )函式初始化記憶體 383

20.3.2 使用memcpy( )複製記憶體中的數據 383

20.3.3 使用memmove( )函式移動記憶體中的數據 383

20.4 位的用法 385

20.4.1 移位運算符 385

20.4.2 按位邏輯運算符 386

20.4.3 求補運算符 387

20.4.4 結構中的位欄位387

20.5 總結 389

20.6 問與答 389

20.7 作業 390

20.7.1 小測驗 390

20.7.2 練習 390

第21天課程 編譯器的高級用法 392

21.1 使用多個原始碼檔案的編程 392

21.1.1 模組化編程的優點 392

21.1.2 模組化編程技術 392

21.1.3 模組的組成部分 394

21.1.4 外部變數和模組化編程 395

21.1.5 使用.obj檔案395

21.1.6 使用生成工具 396

21.2 C語言的預處理器 396

21.2.1 #define預處理器編譯指令 397

21.2.2 使用編譯指令#include 400

21.2.3 使用#if、#elif、#else和#endif 400

21.2.4 使用#if…#endif來幫助調試 401

21.2.5 避免將頭檔案包含多次 401

21.2.6 #undef編譯指令 402

21.3 預定義的宏 402

21.4 使用命令行參數 403

21.5 總結 405

21.6 問與答 405

21.7 作業 405

21.7.1 小測驗 405

21.7.2 練習 406

第三周複習 407

附加課程(具體內容見光碟) 413

附錄A ASCII字元集 414

附錄B C/C++中的保留字 418

附錄C 使用二進制和十六進制數 420

C.1 十進制 420

C.2 二進制 420

C.3 十六進制 420

附錄D 移植性問題 422

D.1 ANSI標準 422

D.2 ANSI關鍵字 422

D.3 區分大小寫 422

D.4 可移植的字元 424

D.5 確保ANSI兼容性 424

D.6 繞開ANSI標準 424

D.7 使用可移植的數值變數 425

D.7.1 最大值和最小值 426

D.7.2 確定數字的類型 430

D.7.3 轉換字元的大小寫:一個可移植性範例 434

D.8 可移植的結構和共用體 434

D.8.1 字對齊 434

D.8.2 讀寫結構 435

D.8.3 在可移植的程式中使用非-ANSI特性 436

D.8.4 ANSI標準頭檔案 437

D.9 總 結 438

D.10 問與答 438

D.11 作 業 438

D.11.1 小測驗 438

D.11.2 練習 439

附錄E 常用的C語言函式 440

附錄F 作業答案 444

第1天課程的答案 444

小測驗 444

練習 444

第2天課程的答案 445

小測驗 445

練習 445

第3天課程的答案 446

小測驗 446

練習 446

第4天課程的答案 447

小測驗 447

練習 447

第5天課程的答案 449

小測驗 449

練習 449

第6天課程的答案 452

小測驗 452

練習 452

第7天課程的答案 453

小測驗 453

練習 453

第8天課程的答案 457

小測驗 457

練習 457

第9天課程的答案 461

小測驗 461

練習 461

第10天課程的答案 463

小測驗 463

練習 463

第11天課程的答案 465

小測驗 465

練習 466

第12天課程的答案 467

小測驗 467

練習 467

第13天課程的答案 470

小測驗 470

練習 471

第14天課程的答案 471

小測驗 471

練習 472

第15天課程的答案 472

小測驗 472

練習 473

第16天課程的答案 473

小測驗 473

練習 474

第17天課程的答案 474

小測驗 474

練習 474

第18天課程的答案 475

小測驗 475

練習 475

第19天課程的答案 475

小測驗 475

練習 476

第20天課程的答案 476

小測驗 476

練習 477

第21天課程的答案 477

小測驗 477

附加課程1的答案 478

小測驗 478

附加課程2的答案 478

小測驗 478

附加課程3的答案 478

小測驗 478

附加課程4的答案 479

小測驗 479

附加課程5的答案 479

小測驗 479

附加課程6的答案 480

小測驗 480

附加課程7的答案 480

小測驗 480

練習 480

附錄G Dev-C++編譯器 482

G.1 Dev-C++簡介 482

G.2 在Microsoft Windows上安裝Dev-C++ 482

G.3 Dev-C++中的程式 484

G.4 使用Dev-C++ 484

G.4.1 針對C語言編程定製Dev-C++ 485

G.4.2 在Dev-C++中輸入並編譯程式 486

G.4.3 編譯Dev-C++程式 488

G.4.4 運行Dev-C++程式 488

G.5 總 結 489

相關詞條

相關搜尋

熱門詞條

聯絡我們