內容簡介
本書包括四周的課程,前三周詳細介紹了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
第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