內容簡介
本書循序漸進、由淺入深地詳細講解了C語言開發的技術,並通過具體實例的實現過程演練了各個知識點的具體使用流程。全書共22章,第 1~4章分別講解了C語言開發的基礎知識,包括C語言簡介,安裝開發工具等;第5~10章分別講解了函式、輸入/輸出、流程控制、數組操作等知識,這些內容都是C語言技術的核心知識;第 11~20章分別講解了指針、結構體、共用體和枚舉、鍊表、位運算、預編譯、檔案操作、錯誤調試和高 級編程技術的知識,這些內容是C語言開發技術的重點和難點;第 21~22章分別通過2個綜合實例的實現過程,介紹了C語言在綜合項目中的開發過程。全書內容以“技術解惑”和“範例演練”貫穿全書,引 領讀者全面掌握C語言。
本書不但適用C語言的初學者,也適合有一定C語言基礎的讀者學習,還可以作為大專院校相關專業的師生用書和培訓學校的教材。
圖書目錄
第 1章 C語言之定位 1
(視頻總計24分鐘,實例1個,拓展實例2個,技術解惑3個)
1.1 C語言的誕生 2
1.2 第 一印象的建立 2
1.3 理解編譯系統——學習的第 一步 3
1.4 揭開存儲器的層次 5
1.5 技術解惑 6
1.5.1 學習C語言還有用嗎 6
1.5.2 怎樣學好C語言 7
1.5.3 學好C語言的建議 7
第 2章 C語言開發工具詳解 8
(視頻總計15分鐘,技術解惑3個)
2.1 用DOS開發C程式 9
2.1.1 安裝Turbo C 3.0 9
2.1.2 認識Turbo C 3.0集成開發環境 11
2.1.3 Turbo C 3.0開發演習 14
2.2 在Windows環境下開發C程式 15
2.2.1 Visual Studi2o 2010介紹 15
2.2.2 安裝Visual Studio 2010 15
2.2.3 認識Visual Studio 2010
開發環境 17
2.3 在Linux下開發C程式 18
2.3.1 裝備GCC 18
2.3.2 GCC基本使用介紹 20
2.4 技術解惑 22
2.4.1 安裝Visual Studio的幾個
常見問題 22
2.4.2 有沒有輕量級的、可以複製和貼上代碼的工具 22
2.4.3 Windows 7中安裝Visual
Studio的常見問題 22
第3章 算法——抓住程式的靈魂 23
(視頻總計25分鐘,技術解惑2個)
3.1 我們對算法的理解 24
3.1.1 為什麼是程式靈魂 24
3.1.2 何謂算法 24
3.1.3 算法的特性 25
3.2 算法表示法——流程圖 26
3.3 用計算機語言表示算法 27
3.4 技術解惑 27
3.4.1 初學者的一個困惑 27
3.4.2 另外一種表示方法—
N-S流程圖 28
第4章 程式設計師的基本素質培養 29
(視頻總計15分鐘,技術解惑1個)
4.1 養成好的命名習慣 30
4.2 C程式檔案結構 30
4.2.1 C程式組成部分 30
4.2.2 C程式格式總結 31
4.3 養成好的C語言編程風格 32
4.3.1 隨時使用縮進格式 32
4.3.2 注意大符號的位置 32
4.3.3 函式的規則 33
4.3.4 注意注釋 33
4.4 如何成為一名優 秀的程式設計師 33
4.5 技術解惑 35
第5章 C語言語法 36
(視頻總計23分鐘,實例5個,拓展實例10個,技術解惑4個)
5.1 標識符和關鍵字 37
5.2 最基本的數據類型 37
5.3 常量和變數的深入理解 38
5.3.1 常量詳解 39
5.3.2 變數詳解 40
5.4 整型數據 42
5.4.1 整型常量詳解 42
5.4.2 整型變數詳解 44
5.5 實型數據 46
5.5.1 實型常量詳解 46
5.5.2 實型變數詳解 46
5.5.3 了解實型常量的類型 48
5.6 字元型數據 48
5.6.1 字元常量詳解 49
5.6.2 字元串常量詳解 50
5.6.3 字元變數詳解 51
5.7 初始化變數 52
5.8 整型、實型和字元型數據間的
運算總結 53
5.8.1 自動轉換 53
5.8.2 強制轉換 54
5.9 技術解惑 54
5.9.1 C語言中無符號整型變數和
有符號整型變數指什麼? 54
5.9.2 C語言中字元變數是怎么
回事 55
5.9.3 怎么理解字元型數據取值
範圍為0~255 55
5.9.4 怎樣將帶小數點的字元型
數據轉換成浮點型的 55
第6章 運算符和表達式 56
(視頻總計29分鐘,實例8個,拓展實例16個,技術解惑5個)
6.1 運算符和表達式的基本概況 57
6.1.1 先看運算符的種類 57
6.1.2 再看運算符的優先權 58
6.2 算術運算符和算術表達式詳解 59
6.2.1 單目運算符 59
6.2.2 雙目運算符 60
6.3 賦值運算符和賦值表達式 60
6.3.1 基本賦值運算符 61
6.3.2 複合賦值運算符 61
6.3.3 賦值表達式 62
6.4 關係運算符和關係表達式詳解 63
6.4.1 關係運算符 63
6.4.2 關係表達式 63
6.5 邏輯運算符和邏輯表達式詳解 64
6.5.1 邏輯運算符 64
6.5.2 邏輯表達式 64
6.6 逗號運算符和逗號表達式詳解 66
6.6.1 逗號運算符 66
6.6.2 逗號表達式 66
6.7 求位元組數運算符詳解 67
6.8 技術解惑 68
6.8.1 C語言運算符優先權的
詳細情況 68
6.8.2 有少數運算符有規定表達式
求值的順序 70
6.8.3 在C語言中可以進行混合
運算嗎 70
6.8.4 在一個邏輯條件語句中
常數項永遠在左側 70
6.8.5 賦值處理的自動類型轉換 70
第7章 輸入和輸出 72
(視頻總計25分鐘,實例7個,拓展實例14個,技術解惑3個)
7.1 先來了解C語句初步 73
7.1.1 C語句簡介 73
7.1.2 賦值語句 74
7.2 打通任督二脈——數據輸入和
輸出詳解 75
7.2.1 putchar函式(字元輸出
函式) 76
7.2.2 getchar函式(字元輸入
函式) 77
7.2.3 printf函式(格式輸出
函式) 78
7.2.4 scanf函式(格式輸入
函式) 81
7.2.5 puts函式(字元串輸出
函式) 84
7.2.6 gets函式(字元串輸入
函式) 84
7.3 技術解惑 85
7.3.1 gets函式和scanf函式的
區別 85
7.3.2 克服gets函式的缺陷 85
7.3.3 一個C語言的輸入和輸出
問題 87
第8章 流程控制 88
(視頻總計32分鐘,實例8個,拓展實例16個,技術解惑3個)
8.1 最常見的順序結構 89
8.2 選擇結構 89
8.2.1 單分支結構語句 90
8.2.2 雙分支結構語句 91
8.2.3 還要使用多分支結構語句 94
8.2.4 條件運算符和條件表達式 96
8.3 循環結構詳解 97
8.3.1 for語句循環 98
8.3.2 while語句 99
8.3.3 do-while語句 101
8.3.4 正確對待goto語句 102
8.3.5 break/continue跳躍 103
8.3.6 死循環/退出程式 104
8.4 技術解惑 105
8.4.1 循環中的低效問題 105
8.4.2 分析C語言循環語句的
效率 105
8.4.3 使用for循環語句的注意
事項 106
第9章 數組和字元串——數據存在形式 107
(視頻總計49分鐘,實例13個,拓展實例26個,技術解惑4個)
9.1 一維數組 108
9.1.1 定義一維數組 108
9.1.2 引用一維數組元素 108
9.1.3 初始化一維數組 109
9.2 多維數組 110
9.2.1 二維數組 110
9.2.2 多維數組 113
9.3 字元數組與字元串 115
9.3.1 字元數組 116
9.3.2 字元串與字元數組 116
9.3.3 字元數組的輸入和輸出 117
9.4 字元串處理函式 119
9.4.1 測試字元串長度函式 119
9.4.2 字元串大小寫轉換函式 119
9.4.3 字元串複製函式 120
9.4.4 字元串比較函式 121
9.4.5 字元串連線函式 123
9.4.6 其他的字元串函式 124
9.4.7 將字元串轉換成數值的
函式 124
9.5 字元處理函式 125
9.5.1 字元檢測函式詳解 125
9.5.2 字元大小寫轉換函式
詳解 127
9.6 技術解惑 128
9.6.1 數組的下標總是從0
開始嗎 128
9.6.2 C語言對數組的處理是
非常有效的嗎 128
9.6.3 初始化賦值一維數組的
注意事項 129
9.6.4 冒泡排序 129
第 10章 函式——C語言的CPU 130
(視頻總計65分鐘,實例14個,拓展實例28個,技術解惑10個)
10.1 C語言函式的基礎知識 131
10.1.1 函式的分類 131
10.1.2 函式的定義 132
10.2 必須知道的函式聲明和函式
原型 133
10.3 函式的參數 135
10.3.1 形參和實參詳解 135
10.3.2 可以將數組名作為函式
參數 136
10.3.3 可以將數組作為函式
參數 138
10.4 函式的返回值 140
10.5 怎樣實現函式的調用 142
10.5.1 函式的調用格式 142
10.5.2 函式調用的方式 142
10.5.3 被調函式的聲明方式 144
10.5.4 對調用函式的方式進行
深入分析 144
10.6 函式的嵌套調用和遞歸調用 146
10.6.1 函式嵌套調用詳解 146
10.6.2 函式遞歸調用詳解 148
10.7 必須了解變數的作用域和
生存期 151
10.7.1 變數作用域詳解 151
10.7.2 靜態存儲變數和動態存儲
變數 153
10.8 談談C的內部函式和外部函式 159
10.8.1 內部函式詳解 159
10.8.2 外部函式詳解 160
10.9 必須知道的庫函式 161
10.10 技術解惑 162
10.10.1 深入分析項目檔案 162
10.10.2 要儘量避免不必要的
函式調用 164
10.10.3 請確保聲明和定義是
靜態的,除非希望從
不同的檔案中調用該
函式 164
10.10.4 避免過長的main
(函式) 164
10.10.5 函式的地址本身也是
數據 166
10.10.6 什麼時候說明函式 167
10.10.7 一個函式可以有多少個
參數 168
10.10.8 如果一個函式沒有
返回值,是否需要
加入return語句 168
10.10.9 在程式退出main函式
之後還有可能執行
一部分代碼 168
10.10.10 exit()函式和return語句有什麼不同 169
第 11章 指針是學習C語言的最大障礙 170
(視頻總計61分鐘,實例14個,拓展實例28個,技術解惑8個)
11.1 基本概念 171
11.2 變數的指針和指向變數的指針
變數 171
11.2.1 聲明指針變數 172
11.2.2 指針變數的初始化 172
11.2.3 指針變數的引用 173
11.2.4 關於指針運算符的說明 174
11.2.5 指針變數的運算 175
11.2.6 指針變數作為函式參數 176
11.2.7 void類型的指針 179
11.3 指針和數組 180
11.3.1 數組元素的指針 181
11.3.2 指向一維數組元素的
指針變數 182
11.3.3 通過指針引用數組元素 182
11.3.4 數組名作函式參數 185
11.4 指針和多維數組 187
11.4.1 多維數組的地址 187
11.4.2 指向多維數組的指針
變數 189
11.5 指針和字元串 192
11.5.1 指針訪問字元串 192
11.5.2 字元串指針作函式參數 193
11.5.3 使用字元串指針變數與
字元數組的區別 194
11.6 指針數組和多級指針 195
11.6.1 指針數組 195
11.6.2 多級指針的定義和套用 196
11.6.3 指向指針的指針 198
11.6.4 main函式的參數 198
11.7 指針函式和函式指針 199
11.7.1 指針函式 199
11.7.2 函式指針 200
11.8 技術解惑 202
11.8.1 指針初始化時應注意的
問題 202
11.8.2 指針賦值時應注意的
問題 203
11.8.3 指針用於數組時應注意的
問題 204
11.8.4 結構中使用指針時應
注意的問題 204
11.8.5 避免不必要的記憶體引用 205
11.8.6 避免懸空指針和野指針 205
11.8.7 數組下標與指針的效率
解析 205
11.8.8 使用指針時的常見錯誤 206
第 12章 數據的熔爐——結構體、共用
體和枚舉 208
(視頻總計49分鐘,實例12個,拓展實例24個,技術解惑4個)
12.1 結構體 209
12.1.1 定義結構體類型 209
12.1.2 定義結構體類型變數 209
12.1.3 引用結構體變數 211
12.1.4 初始化結構體變數 213
12.2 進一步談結構體數組 214
12.2.1 定義結構體數組 214
12.2.2 初始化結構體數組 215
12.2.3 引用結構體數組 216
12.3 詳談結構體指針 217
12.3.1 定義結構體指針變數 217
12.3.2 初始化結構體指針變數 218
12.3.3 引用結構體指針變數 218
12.3.4 指向結構變數的指針 219
12.3.5 指向結構體數組的
指針 220
12.4 在函式中使用結構體 220
12.4.1 結構體變數和結構體指針
可以作為函式參數 221
12.4.2 函式可以返回結構體
類型的值 222
12.5 共用體(聯合) 223
12.5.1 定義共用體和共用體
變數 223
12.5.2 引用和初始化共用體
變數 224
12.6 枚舉 225
12.6.1 定義枚舉類型 225
12.6.2 定義枚舉變數 226
12.6.3 引用枚舉變數 227
12.7 為什麼需要用typedef定義
類型 228
12.7.1 類型定義符typedef
基礎 228
12.7.2 使用typedef 229
12.8 技術解惑 230
12.8.1 可以省略結構名嗎 230
12.8.2 是否可以定義一種通用
數據類型方便地存儲
任意類型的數據呢 230
12.8.3 分析結構和共用體的
區別 231
12.8.4 一個定義C結構體的
問題 231
第 13章 鍊表 232
(視頻總計25分鐘,實例4個,拓展實例8個,技術解惑3個)
13.1 動態記憶體分配 233
13.1.1 為什麼用動態記憶體
分配 233
13.1.2 如何實現動態記憶體分配
及其管理 233
13.2 鍊表詳解 236
13.2.1 鍊表基本介紹 236
13.2.2 單向鍊表 237
13.2.3 創建一個鍊表 239
13.2.4 刪除整個鍊表 240
13.2.5 在鍊表中插入節點 240
13.2.6 在鍊表中刪除節點 241
13.2.7 雙向鍊表 242
13.2.8 循環鍊表 243
13.3 技術解惑 244
13.3.1 一段代碼對鍊表的
總結 244
13.3.2 面試題—判斷單鍊表是
否有環 248
13.3.3 面試題—實現單鍊表
逆置 248
第 14章 位運算 250
(視頻總計22分鐘,實例2個,拓展實例4個,技術解惑3個)
14.1 位運算符和位運算 251
14.1.1 按位與運算(&) 251
14.1.2 按位或運算 252
14.1.3 按位異或運算 252
14.1.4 取反運算 253
14.1.5 左移運算 253
14.1.6 右移運算 254
14.1.7 位運算套用實例 254
14.2 位域 256
14.2.1 位域的定義和位域變數的
說明 256
14.2.2 位域的使用 257
14.3 技術解惑 257
14.3.1 二進制補碼運算公式 257
14.3.2 面試題:從某個數中取出
指定的某些位 258
14.3.3 位域的記憶體對齊原則 258
第 15章 預編譯處理 259
(視頻總計27分鐘,實例3個,拓展實例6個,技術解惑6個)
15.1 預編譯基礎 260
15.2 宏定義 260
15.2.1 不帶參數的宏定義 260
15.2.2 帶參數的宏定義 262
15.2.3 字元串化運算符 264
15.2.4 並接運算符 264
15.3 檔案包含詳解 265
15.4 條件編譯 267
15.4.1 #ifdef… #else…#endif
命令 267
15.4.2 #if defined… #else…
#endif 268
15.4.3 #ifndef… #else…#endif 268
15.4.4 #if !defined… #else…
#endif 268
15.4.5 #ifdef…#elif… #elif…
#else… #endif 269
15.5 技術解惑 270
15.5.1 還有其他預編譯
指令嗎 270
15.5.2 帶參的宏定義和函式
不同 271
15.5.3 總結C語言中的預處理
指令 271
15.5.4 預編譯指令的本質是
什麼 271
15.5.5 sizeof(int)在預編譯
階段是不會被求值的 272
15.5.6 多行預處理指令的
寫法 272
第 16章 檔案操作 273
(視頻總計56分鐘,實例14個,拓展實例28個,技術解惑5個)
16.1 C領域中的檔案 274
16.1.1 文本檔案 274
16.1.2 檔案分類 275
16.2 檔案指針 275
16.3 實現檔案打開與關閉 276
16.3.1 打開檔案 276
16.3.2 關閉檔案 278
16.4 檔案讀寫詳解 279
16.4.1 字元讀寫函式 280
16.4.2 字元串讀寫函式 282
16.4.3 格式化讀寫函式 283
16.4.4 數據塊讀寫函式 284
16.4.5 其他的讀寫函式 286
16.5 必須掌握檔案的隨機讀寫 287
16.5.1 fseek函式詳解 287
16.5.2 rewind函式詳解 289
16.5.3 ftell函式詳解 289
16.6 檔案管理函式詳解 290
16.6.1 刪除檔案 290
16.6.2 重命名檔案 291
16.6.3 複製檔案 291
16.7 檔案狀態檢測函式詳解 293
16.7.1 feof函式詳解 293
16.7.2 ferror函式詳解 293
16.7.3 clearerr函式詳解 294
16.8 Win32 API中的檔案操作
函式 294
16.8.1 創建和打開檔案 295
16.8.2 讀取、寫入和刪除
檔案 295
16.9 技術解惑 296
16.9.1 檔案指針和檔案內部的
位置指針是一個
含義嗎 296
16.9.2 fseek函式的換行問題 296
16.9.3 怎樣解決gets函式的
溢出問題 296
16.9.4 feof函式會多讀一個
數據嗎 297
16.9.5 流和檔案有何關係 297
第 17章 錯誤和程式調試 298
(視頻總計9分鐘,技術解惑3個)
17.1 常見錯誤分析 299
17.1.1 語法錯誤 299
17.1.2 邏輯錯誤(語義錯誤) 300
17.1.3 記憶體錯誤 303
17.2 錯誤的檢出與分離 308
17.3 調試時的注意事項 309
17.3.1 上機前要先熟悉程式
運行的環境 309
17.3.2 程式設計過程中要為
程式調試做好準備 309
17.4 技術解惑 310
17.4.1 編譯通過並不代表運行
正確 310
17.4.2 兩段代碼的編譯差別 310
17.4.3 調試程式的方法與
技巧 310
第 18章 組件技術 313
(視頻總計19分鐘)
18.1 組件技術概述 314
18.2 體系結構 314
18.2.1 體系結構的概念 314
18.2.2 CORBA技術體系 315
18.2.3 DCOM技術 319
第 19章 C語言高 級編程技術 322
(視頻總計33分鐘,實例12個,拓展實例
8個)
19.1 何謂C的高 級編程技術 323
19.2 分析文本的螢幕輸出和鍵盤
輸入 323
19.2.1 實現文本的螢幕輸出 323
19.2.2 實現鍵盤輸入 329
19.2.3 套用實例 330
19.3 分析圖形顯示方式和滑鼠
輸入 332
19.3.1 初始化圖形模式 332
19.3.2 清屏和恢復顯示函式
詳解 334
19.3.3 建立獨立圖形運行
程式 335
19.3.4 基本繪圖函式詳解 335
19.3.5 線性函式詳解 339
19.3.6 顏色控制函式詳解 340
19.3.7 分析填色函式和畫圖
函式 344
19.3.8 圖形視窗函式詳解 347
19.3.9 分析圖形方式下的
文本輸出函式 347
19.4 選單設計 350
19.4.1 實現下拉式選單 350
19.4.2 實現彈出式選單 353
第 20章 網路編程技術 358
(視頻總計33分鐘,實例3個,拓展實例
2個)
20.1 OSI七層網路模型 359
20.2 TCP/IP子協定 360
20.2.1 IP協定 361
20.2.2 TCP協定 362
20.2.3 UDP協定 363
20.2.4 ICMP協定 363
20.3 使用C語言開發網路項目 363
20.3.1 網路編程方式 364
20.3.2 網路通信基本流程 364
20.3.3 搭建開發環境 365
20.3.4 兩個常用的數據結構 365
20.3.5 Windows Sockets基礎 365
20.4 常用的Winsock函式 366
20.4.1 WSAStartup函式 366
20.4.2 socket函式 366
20.4.3 inet_addr函式 367
20.4.4 gethostbyname函式 367
20.4.5 bind函式 367
20.4.6 connect函式 367
20.4.7 select函式 367
20.4.8 recv函式 368
20.4.9 sendto函式 368
20.5 MAC地址 368
20.6 NetBIOS編程 369
20.6.1 處理過程 369
20.6.2 NetBIOS命令 369
20.6.3 NetBIOS名字解析 370
20.6.4 何謂NetBEUI 372
20.6.5 NetBIOS範圍 373
20.6.6 NetBios控制塊 373
20.7 實戰演練——獲取當前機器
MAC地址 373
20.7.1 選擇開發工具 373
20.7.2 設計MFC窗體 373
20.7.3 具體編碼 374
第 21章 初入江湖——遊戲項目設計 381
(視頻總計45分鐘)
21.1 遊戲功能描述 382
21.2 遊戲總體設計 382
21.2.1 功能模組設計 383
21.2.2 數據結構設計 385
21.2.3 構成函式介紹 386
21.3 遊戲具體實現 387
21.3.1 預處理 387
21.3.2 主函式 389
21.3.3 初始化界面處理 390
21.3.4 時鐘中斷處理 391
21.3.5 成績、速度和幫助
處理 391
21.3.6 滿行處理 392
21.3.7 方塊顯示和消除處理 394
21.3.8 遊戲方塊操作判斷
處理 395
第 22章 風雲再起——網路項目設計 398
(視頻總計28分鐘)
22.1 系統功能描述 399
22.2 系統總體設計 399
22.2.1 功能模組設計 399
22.2.2 數據結構設計 401
22.2.3 構成函式介紹 402
22.3 系統具體實現 403
22.3.1 預處理 403
22.3.2 初始化處理 404
22.3.3 控制模組 405
22.3.4 數據報解讀處理 406
22.3.5 Ping測試處理 408
22.3.6 主函式 409