圖書內容
本書從最基本的C語言概念入手,由淺入深,綜合典型的實例,引導初學者由淺入深地掌握C語言知識。全書共17章。其中,第1~6章是入門篇,包括C語言概述和Visual Studio 2008開發工具的介紹,數據類型,運算符與表達式,順序結構、選擇結構和循環結構程式設計等內容。第7~13章是提高篇,包括數組、函式、指針、預處理、結構體和聯合體、鍊表與檔案等內容。第14~17章是技術篇,包括常用算法、網路編程、綜合套用案例──圖書管理系統和C語言調試技術等內容。
本書內容全面,不僅涵蓋了C語言的基本語法與程式設計知識,還較為深入介紹了相關常用算法知識和實用案例、調試技術。本書在講解知識的同時,指出了編程時一些應注意的地方和易犯的錯誤,給出了不少關於C語言方面的調試經驗。全書案例豐富,講解非常細緻,語言通俗易懂,所有實例代碼均在Visual Studio 2008開發環境下運行通過。
目錄
第1章 C語言的前世今生 1
1.1 C語言的前世今生 1
1.1.1 計算機語言的發展階段 1
1.1.2 C語言的產生 3
1.2 為什麼要選擇C語言 4
1.2.1 選擇C語言的好處 4
1.2.2 C語言的特點 5
1.2.3 如何學好C語言 6
1.3 第一個C語言程式 7
1.4 小結 8
習題 9
第2章 C程式開發步驟及開發環境 10
2.1 C程式的開發步驟 10
2.2 Visual Studio 2008開發環境介紹 11
2.2.1 使用Visual Studio 2008
新建項目 11
2.2.2 在Visual Studio 2008的項目中
新建程式檔案 13
2.2.3 使用Visual Studio 2008開發
C語言程式 14
2.3 小結 16
習題 16
第3章 基本數據類型 17
3.1 另一個簡單的C語言程式 17
3.2 C語言中的數據類型 19
3.3 變數與常量 21
3.3.1 變數 21
3.3.2 常量 23
3.4 整型變數 24
3.4.1 整型變數的定義 24
3.4.2 整型變數占用的位元組數與
表示範圍 25
3.4.3 整型變數的存儲 26
3.4.4 整型變數的賦值 27
3.4.5 一個簡單的C程式——輸出
整型變數的值 27
3.5 實型變數 28
3.5.1 實型變數的定義與賦值 28
3.5.2 實型變數的表示範圍 28
3.5.3 一個簡單的C程式——輸出
實型變數的值 28
3.6 字元型變數 29
3.6.1 字元型變數的定義與賦值 29
3.6.2 字元型數據的存儲形式 29
3.6.3 字元數據與字元串數據的
區別 31
3.7 小結 31
習題 32
第4章 運算符與表達式 33
4.1 常見運算符初識 33
4.2 算術運算符與算術表達式 34
4.2.1 +、-、*、/、%——雙目
運算符 34
4.2.2 算術表達式 34
4.2.3 多種類型的數據混合運算——
自動類型轉換 35
4.2.4 強制類型轉換 37
4.2.5 ++與--、+與- ——單目
運算符 37
4.3 賦值運算符與賦值表達式 39
4.3.1 直接賦值運算符與直接賦值
表達式 39
4.3.2 賦值表達式中的類型轉換 40
4.3.3 複合算術賦值運算符與
表達式 45
4.4 關係運算符與關係表達式 46
4.4.1 關係運算符 46
4.4.2 關係表達式 46
4.5 邏輯運算符與邏輯表達式 48
4.5.1 邏輯運算符 48
4.5.2 邏輯表達式 48
4.6 逗號運算符與逗號表達式 50
4.6.1 逗號運算符 50
4.6.2 逗號表達式 50
4.6.3 逗號運算符套用舉例 51
4.7 小結 52
習題 52
第5章 結構化程式開發(一) 54
5.1 算法及描述方法 54
5.1.1 什麼是算法 54
5.1.2 偽碼 55
5.1.3 流程圖 56
5.2 控制結構 57
5.2.1 什麼是語句 57
5.2.2 語句的分類 57
5.2.3 順序結構程式設計 59
5.2.4 選擇結構程式設計——
if選擇結構 64
5.2.5 選擇結構程式設計——
switch選擇結構 72
5.2.6 條件運算符與條件表達式 77
5.2.7 選擇結構程式設計套用舉例 79
5.3 小結 82
習題 83
第6章 結構化程式設計(二) 86
6.1 為什麼要有循環結構 86
6.1.1 如何重複輸出100以內的
整數 86
6.1.2 如何求連續的n個自然數
的和 87
6.2 goto語句 88
6.2.1 goto語句——無條件轉移
語句 88
6.2.2 goto語句構成的循環語句——
向前跳轉 88
6.3 while循環語句 90
6.4 do-while循環語句 92
6.5 for循環語句 94
6.6 break語句和continue語句 98
6.6.1 為什麼要有break語句 98
6.6.2 break語句 98
6.6.3 為什麼要有continue語句 100
6.6.4 continue語句 100
6.7 循環結構的嵌套 102
6.8 循環結構程式設計套用舉例 106
6.9 小結 110
習題 110
第7章 數組 114
7.1 為什麼引入數組 114
7.1.1 多變數的解決之路——
引入數組 114
7.1.2 認識數組 115
7.2 一維數組 116
7.2.1 聲明一維數組 116
7.2.2 引用一維數組 117
7.2.3 初始化一維數組的幾種
方式 118
7.2.4 一維數組套用舉例 118
7.3 二維數組 124
7.3.1 為什麼引入二維數組——
維度的出現 124
7.3.2 聲明二維數組 127
7.3.3 引用二維數組 127
7.3.4 初始化二維數組的幾種
方式 128
7.3.5 二維數組套用舉例 130
7.4 字元數組與字元串 134
7.4.1 聲明字元數組與初始化 134
7.4.2 引用字元數組 135
7.4.3 字元數組與字元串 135
7.4.4 字元數組的輸入與輸出 136
7.4.5 字元串的相關函式 137
7.4.6 字元串套用舉例 141
7.5 小結 145
習題 145
第8章 函式 150
8.1 函式初識與函式的分類 150
8.1.1 為什麼要有函式 150
8.1.2 函式的分類 151
8.2 函式的定義 152
8.2.1 無參函式的定義 152
8.2.2 有參函式的定義 152
8.2.3 有參函式傳統的定義方式 153
8.3 函式的參數與函式返回值 153
8.3.1 實際參數與形式參數 154
8.3.2 函式返回值 155
8.4 函式的調用 156
8.4.1 函式的一般調用 157
8.4.2 函式原型 159
8.4.3 函式的嵌套調用 161
8.5 函式的遞歸調用 163
8.5.1 遞歸調用的定義 164
8.5.2 遞歸調用套用舉例 164
8.6 數組作為函式的參數 167
8.6.1 數組元素作為函式參數 167
8.6.2 數組名作為函式參數 169
8.6.3 多維數組名作為函式參數 172
8.7 變數的作用域 173
8.7.1 局部變數 173
8.7.2 全局變數 175
8.8 變數的存儲類別 178
8.8.1 自動變數 178
8.8.2 靜態變數 178
8.8.3 暫存器變數 180
8.8.4 外部變數 180
8.9 內部函式與外部函式 183
8.9.1 內部函式 183
8.9.2 外部函式 183
8.10 小結 184
習題 185
第9章 指針 190
9.1 地址和指針 190
9.1.1 什麼是地址 190
9.1.2 什麼是指針——間接存取 191
9.2 指針與變數 192
9.2.1 定義指針變數 192
9.2.2 引用指針變數 193
9.2.3 指針變數作為函式參數 196
9.3 指針與數組 198
9.3.1 指向數組元素的指針與指向
數組的指針 198
9.3.2 指向多維數組的指針變數 201
9.3.3 數組名(指針)作為函式
參數 205
9.3.4 指針數組 212
9.3.5 二級指針 213
9.4 指針與字元串 214
9.4.1 字元串指針 214
9.4.2 字元串指針作為函式參數 215
9.4.3 字元指針數組 217
9.4.4 指針數組作為main的參數 218
9.5 指針與函式 220
9.5.1 函式指針——指向函式的
指針 220
9.5.2 函式指針作為函式參數 221
9.5.3 指針函式——返回指針值的
函式 224
9.5.4 void指針 225
9.6 指針與const 226
9.6.1 常量指針——指向常量的
指針 226
9.6.2 指針常量——指針不可以
改變 227
9.6.3 常量指針常量——指向常量的
指針常量 227
9.7 小結 228
習題 229
第10章 預處理命令 233
10.1 宏定義——#define 233
10.1.1 不帶參數的宏定義 233
10.1.2 帶參數的宏定義 235
10.1.3 條件編譯命令中的運算符——
#和## 237
10.2 檔案包含命令——#include 238
10.2.1 檔案包含命令的兩種方式 238
10.2.2 檔案包含命令套用舉例 239
10.3 條件編譯命令 240
10.3.1 條件編譯命令——#ifdef 240
10.3.2 條件編譯命令——#ifndef 242
10.3.3 條件編譯命令——#if 242
10.4 小結 243
習題 243
第11章 結構體與聯合體 246
11.1 結構體 246
11.1.1 為什麼要有結構體 246
11.1.2 定義結構體類型 247
11.1.3 定義結構體變數 248
11.1.4 引用結構體變數 249
11.1.5 初始化結構體變數 250
11.2 結構體數組 252
11.2.1 定義結構體數組 252
11.2.2 初始化結構體數組 253
11.2.3 結構體數組套用舉例 254
11.3 指針與結構體 256
11.3.1 指向結構體變數的指針 257
11.3.2 指向結構體數組的指針 258
11.3.3 結構體變數作為函式的
參數 260
11.3.4 指向結構體變數的指針作為
函式的參數 261
11.4 用typedef定義類型 262
11.4.1 使用typedef定義類型 262
11.4.2 typedef套用舉例 264
11.5 聯合體 265
11.5.1 定義联合體類型及變數 265
11.5.2 引用聯合體 266
11.5.3 使用聯合體應注意的問題 266
11.5.4 聯合體的套用舉例 267
11.6 枚舉類型 269
11.6.1 定義枚舉類型及變數 269
11.6.2 使用枚舉類型的一些說明 270
11.6.3 枚舉類型套用舉例 270
11.7 小結 272
習題 273
第12章 鍊表 276
12.1 鍊表的相關概念 276
12.1.1 為什麼要有鍊表——節省
記憶體單元,不用事先定義
空間大小 276
12.1.2 什麼是鍊表 277
12.1.3 動態記憶體分配 278
12.2 鍊表的操作 279
12.2.1 創建鍊表 279
12.2.2 輸出鍊表 281
12.2.3 鍊表的查找操作 282
12.2.4 鍊表的插入操作 282
12.2.5 鍊表的刪除操作 284
12.3 鍊表套用舉例 286
12.3.1 直接插入排序——使用鍊表
實現 286
12.3.2 一元多項式的相加 292
12.4 小結 297
習題 298
第13章 檔案 301
13.1 檔案的相關概念 301
13.1.1 為什麼要有檔案 301
13.1.2 檔案的分類 302
13.1.3 檔案類型指針 302
13.2 打開檔案與關閉檔案 303
13.2.1 打開檔案 303
13.2.2 關閉檔案 304
13.3 檔案的讀取與寫入 304
13.3.1 fgetc函式與fputc函式 304
13.3.2 fread函式與fwrite函式 306
13.3.3 fscanf函式與fprintf函式——
格式化讀寫函式 309
13.3.4 fgets函式與fputs函式——
字元串讀寫函式 312
13.4 檔案的定位 312
13.4.1 rewind函式——重置檔案
指針 312
13.4.2 fseek函式——定位檔案
指針 313
13.4.3 ftell函式——得到檔案指針
位置 315
13.5 出錯檢測 315
13.5.1 ferror函式 315
13.5.2 clearerr函式 316
13.6 小結 316
習題 316
第14章 常用算法 319
14.1 算法基礎 319
14.1.1 什麼是算法 319
14.1.2 算法的特性 321
14.1.3 算法設計的目標 321
14.1.4 算法的時間複雜度和空間
複雜度 322
14.2 疊代與遞推 323
14.2.1 算法思想 323
14.2.2 求一個數的平方根 323
14.2.3 角谷猜想 324
14.2.4 母牛生小牛問題 325
14.2.5 分西瓜 326
14.3 窮舉法 327
14.3.1 算法思想 327
14.3.2 填數遊戲 327
14.3.3 背包問題 328
14.3.4 五猴分桃 330
14.4 遞歸 331
14.4.1 算法思想 332
14.4.2 數制轉換 332
14.4.3 求n個數中的最大者 333
14.5.4 字元串顛倒 334
14.5 分治 335
14.5.1 算法思想 335
14.5.2 求n個數的最大值和最
小值 336
14.5.3 賽程安排問題 338
14.6 貪心算法 340
14.6.1 算法思想 340
14.6.2 加油站問題 340
14.6.3 找零錢問題 342
14.6.4 0-1背包問題 343
14.7 小結 347
習題 347
第15章 網路編程基礎 349
15.1 網路相關概念 349
15.1.1 什麼是計算機網路 349
15.1.2 網路協定 350
15.1.3 連線埠 350
15.1.4 TCP/IP參考模型 351
15.1.5 套接字 352
15.2 基於TCP的簡單網路程式 352
15.2.1 基於TCP的socket編程 352
15.2.2 伺服器端的程式實現 354
15.2.3 客戶端程式的實現 359
15.3 基於UDP的簡單網路聊天程式 361
15.3.1 基於UDP的socket編程 362
15.3.2 伺服器端程式的實現 363
15.3.3 客戶端程式的實現 364
15.4 小結 367
第16章 綜合案例:圖書管理系統 368
16.1 系統分析與設計 368
16.2 數據描述與存儲 369
16.3 詳細設計與代碼實現 370
16.3.1 主函式模組 370
16.3.2 增加圖書信息模組 373
16.3.3 修改圖書信息模組 377
16.3.4 刪除圖書信息模組 381
16.3.5 借閱圖書和歸還圖書模組 382
16.3.6 檔案讀寫模組 385
16.4 程式調試與系統測試 386
16.5 小結 388
第17章 常見錯誤與程式調試 390
17.1 為什麼要調試程式 390
17.2 常見錯誤 391
17.2.1 錯誤分類 391
17.2.2 常見錯誤舉例 392
17.3 程式調試 395
17.3.1 如何利用Visual Studio 2008
開發環境調試程式 395
17.3.2 程式調試套用舉例 401
17.4 小結 410
參考文獻 412