本書從最基本的C語言概念入手,由淺入深,綜合典型的實例,引導初學者由淺入深地掌握C語言知識。全書共17章。其中,第1~6章是入門篇,包括C語言概述和Visual Studio 2008開發工具的介紹,數據類型,運算符與表達式,順序結構、選擇結構和循環結構程序設計等內容。第7~13章是提高篇,包括數組、函數、指針、預處理、結構體和聯合體、鏈表與文件等內容。第14~17章是技術篇,包括常用算法、網絡編程、綜合應用案例──圖書管理系統和C語言調試技術等內容。本書內容全面,不僅涵蓋了C語言的基本語法與程序設計知識,還較為深入介紹了相關常用算法知識和實用案例、調試技術。本書在講解知識的同時,指出了編程時一些應注意的地方和易犯的錯誤,給出了不少關于C語言方面的調試經驗。全書案例豐富,講解非常細致,語言通俗易懂,所有實例代碼均在Visual Studio 2008開發環境下運行通過。本書配套資源:PPT、源代碼。技術支持QQ群:2345500678。
陳銳,軟件設計師,研究興趣和方向:人機交互、自然語言處理、數據結構與算法,熟悉C/C++、VC++、Visual Basic等開發語言和工具。在中文核心期刊論文多篇,已出版圖書有:《零基礎學數據結構》、《*新C/C++函數與算法速查速用大辭典》、《C/C++數據結構與算法速學速用大辭典》、《C語言入門與提高》、《Visual Basic多功能教材》等,不少作品已經多次再版或重印。
第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