![]() ![]() |
C編程從入門到實踐 ![]()
本書循序漸進、由淺入深地講解了C語言開發(fā)的技術。全書共25章。本書不僅介紹了C語言的基礎和核心知識(如開發(fā)工具、語法、運算符、表達式、輸入/輸出、流程控制、數(shù)組、字符串、函數(shù)),還講解了C語言中的重點和難點(如指針、結構體、共用體和枚舉、鏈表、位運算、預編譯、文件操作、調試、內存管理、高級編程技術、算法、數(shù)據(jù)結構、網(wǎng)絡編程技術等)。此外,本書還通過4個綜合實例,介紹了C語言在綜合項目中的應用。全書內容以“技術解惑”和“范例演練”貫穿全書,引領讀者全面掌握C語言。
本書不但適用C語言的初學者,也適合有一定C語言基礎的讀者學習,還可以作為大專院校相關專業(yè)的師生用書和培訓學校的教材。
《C編程從入門到實踐》融合了入門類、范例類和項目實戰(zhàn)類圖書的內容。最大特色是實現(xiàn)了入門知識、實例演示、范例演練、技術解惑、綜合實戰(zhàn)5大部分的融合。對于實戰(zhàn)知識,不是點到為止地講解,而是深入地探討。用“紙質書+配套資料(視頻和源程序)+網(wǎng)絡答疑”的方式,提供了“入門+范例+項目實戰(zhàn)”的一站式服務,幫助讀者從入門平滑過渡到順利完成項目。
本書特色:
- 以“從入門到精通”的方法寫作,有助于讀者快速入門。
為了使讀者能夠完全看懂本書的內容,本書遵循“從入門到精通”的寫法,循序漸進地講解C語言的基本知識。
- 破解語言難點,以“技術解惑”貫穿全書,繞過學習中的陷阱。
本書不會羅列式講解C語言的知識點。為了幫助讀者學懂基本知識點,每章都會有“技術解惑”板塊,它能讓讀者知其然又知其所以然,也就是看得明白,學得通。
- 書中包含大量實例和范例。
本書通過實例、范例和綜合實例,講述C語言中的知識點。每一個實例都有兩個與之相關的范例。這些實例及范例有助于讀者鞏固理論知識,達到舉一反三的效果。
- 通過視頻講解,降低學習難度。
對于本書的每一章,均提供了聲圖并茂的教學視頻,這些視頻能夠引導初學者快速入門,增強學習信心,從而快速理解所學知識。
- 提供源程序、視頻、PPT,讓學習更輕松。
因為本書的內容非常多,不可能用一本書的篇幅囊括“入門+范例+項目案例”的內容,所以本書配套網(wǎng)站toppr不但包含全書的源代碼,而且提供實例講解視頻和PPT。
- 用QQ群+網(wǎng)站論壇實現(xiàn)教學互動,形成互幫互學的朋友圈。
為了方便給讀者答疑,作者特提供了網(wǎng)站論壇、QQ群等交流方式(詳見本書前言部分),并且隨時在線與讀者互動,讓大家在互學互幫中形成一個良好的編程學習氛圍。
王長青,華為通信工程師,現(xiàn)負責電信BSS領域相關產(chǎn)品的詳細架構設計和開發(fā)實施工作。熟悉面向對象技術及UML,15年C和C++開發(fā)經(jīng)驗,10年C#開發(fā)經(jīng)驗,熟悉相關的編譯原理、數(shù)據(jù)結構、算法。精通Unix、Linux操作系統(tǒng),且能熟練使用常用操作命令,并且熟悉該環(huán)境下的C/C++開發(fā)。
目 錄
第1章 C語言之定位 1
1.1 計算機應用基礎 2
1.1.1 中央處理器 2
1.1.2 位和字節(jié) 2
1.1.3 二進制 2
1.1.4 編碼格式 3
1.2 C語言的誕生 4
1.3 第一印象的建立 5
1.4 理解編譯系統(tǒng)—學習的第一步 6
1.5 技術解惑 7
1.5.1 學習C語言還有用嗎 7
1.5.2 怎樣學好C語言 8
1.5.3 學好C語言的建議 8
1.6 課后練習 8
第2章 C語言開發(fā)工具詳解 9
2.1 用DOS開發(fā)C程序 10
2.1.1 安裝Turbo C 3.0 10
2.1.2 使用Turbo C 3.0 10
2.2 在Windows環(huán)境下使用
Visual Studio 2017 11
2.2.1 安裝Visual Studio 2017 11
2.2.2 使用Visual Studio 2017開發(fā)一個C程序 15
2.3 使用輕量級開發(fā)工具DEV C++ 18
2.3.1 安裝DEV C++ 18
2.3.2 使用DEV C++運行一個C程序 20
2.4 使用Vsiual C++ 6.0開發(fā)C程序 20
2.5 使用手機開發(fā)C程序 22
2.6 技術解惑 23
2.6.1 安裝Visual Studio 2017時遇到的常見問題 23
2.6.2 在Windows 7中安裝Visual Studio時遇到的常見問題 24
2.7 課后練習 24
第3章 程序員基本素質的培養(yǎng) 25
3.1 養(yǎng)成好的命名習慣 26
3.2 C程序文件結構 26
3.2.1 C程序的組成部分 26
3.2.2 C程序的格式總結 27
3.3 養(yǎng)成好的C語言編程風格 28
3.3.1 隨時使用縮進格式 28
3.3.2 注意大括號的位置 28
3.3.3 函數(shù)的規(guī)則 29
3.3.4 注意注釋 29
3.4 如何成為一名優(yōu)秀的程序員 29
3.5 技術解惑 31
3.6 課后練習 31
第4章 C語言語法 32
4.1 標識符和關鍵字 33
4.2 最基本的數(shù)據(jù)類型 33
4.3 常量和變量 34
4.3.1 常量 35
4.3.2 變量 36
4.4 整型數(shù)據(jù) 37
4.4.1 整型常量 38
4.4.2 整型變量 39
4.5 實型數(shù)據(jù) 41
4.5.1 實型常量 41
4.5.2 實型變量 42
4.5.3 實型常量的類型 43
4.6 字符型數(shù)據(jù) 43
4.6.1 字符常量 43
4.6.2 字符串常量 45
4.6.3 字符變量 46
4.7 初始化變量 47
4.8 整型、實型和字符型數(shù)據(jù)間的運算總結 47
4.8.1 自動轉換 47
4.8.2 強制轉換 49
4.9 技術解惑 49
4.9.1 在C語言中無符號整型變量和有符號整型變量
的定義 49
4.9.2 在C語言中字符變量的含義 50
4.9.3 如何理解字符型數(shù)據(jù)的取值范圍 50
4.9.4 怎樣將帶小數(shù)點的字符型數(shù)據(jù)轉換成浮點型 50
4.10 課后練習 51
第5章 運算符和表達式 52
5.1 運算符和表達式的概述 53
5.1.1 運算符的種類 53
5.1.2 運算符的優(yōu)先級 54
5.2 算術運算符和算術表達式 55
5.2.1 單目運算符 55
5.2.2 雙目運算符 56
5.3 賦值運算符和賦值表達式 56
5.3.1 基本賦值運算符 56
5.3.2 復合賦值運算符 57
5.3.3 賦值表達式 58
5.4 關系運算符和關系表達式 59
5.4.1 關系運算符 59
5.4.2 關系表達式 59
5.5 邏輯運算符和邏輯表達式 60
5.5.1 邏輯運算符 60
5.5.2 邏輯表達式 60
5.6 逗號運算符和逗號表達式 62
5.6.1 逗號運算符 62
5.6.2 逗號表達式 62
5.7 求字節(jié)數(shù)的運算符 63
5.8 技術解惑 64
5.8.1 C語言運算符優(yōu)先級的詳情 64
5.8.2 少數(shù)運算符在規(guī)定表達式中的求值順序 65
5.8.3 在C語言中是否可以進行混合運算 66
5.8.4 在一個邏輯條件語句中常數(shù)項永遠在左側 66
5.8.5 賦值處理的自動類型轉換 66
5.9 課后練習 67
第6章 輸入和輸出 68
6.1 C語句的初步知識 69
6.1.1 C語句簡介 69
6.1.2 賦值語句 70
6.2 打通任督二脈—數(shù)據(jù)輸入和輸出 71
6.2.1 putchar函數(shù) 71
6.2.2 getchar函數(shù) 72
6.2.3 printf函數(shù) 73
6.2.4 scanf函數(shù) 76
6.2.5 puts函數(shù) 79
6.2.6 C11標準函數(shù)gets_s 80
6.3 技術解惑 80
6.3.1 gets_s函數(shù)和scanf函數(shù)的區(qū)別 80
6.3.2 克服gets_s函數(shù)的缺陷 81
6.3.3 C語言的輸入和輸出問題 82
6.4 課后練習 83
第7章 流程控制 84
7.1 最常見的順序結構 85
7.2 選擇結構 85
7.2.1 單分支結構語句 86
7.2.2 雙分支結構語句 87
7.2.3 多分支結構語句 90
7.2.4 條件運算符和條件表達式 91
7.3 循環(huán)結構 92
7.3.1 for語句 93
7.3.2 while語句 94
7.3.3 do…while語句 96
7.3.4 正確對待goto語句 97
7.3.5 break/continue跳躍 98
7.3.6 死循環(huán)/退出程序 99
7.4 技術解惑 100
7.4.1 循環(huán)中的低效問題 100
7.4.2 分析C語言循環(huán)語句的效率 101
7.4.3 使用for循環(huán)語句的注意事項 102
7.5 課后練習 102
第8章 數(shù)組和字符串—數(shù)據(jù)的存在形式 104
8.1 一維數(shù)組 105
8.1.1 定義一維數(shù)組 105
8.1.2 引用一維數(shù)組的元素 105
8.1.3 初始化一維數(shù)組 106
8.2 多維數(shù)組 107
8.2.1 二維數(shù)組的用法 107
8.2.2 多維數(shù)組的用法 110
8.3 字符數(shù)組與字符串 112
8.3.1 字符數(shù)組 112
8.3.2 字符串與字符數(shù)組 113
8.3.3 字符數(shù)組的輸入和輸出 113
8.4 字符串處理函數(shù) 115
8.4.1 測試字符串長度的函數(shù) 115
8.4.2 字符串大小寫轉換函數(shù) 115
8.4.3 字符串復制函數(shù) 116
8.4.4 字符串比較函數(shù) 117
8.4.5 字符串連接函數(shù) 119
8.4.6 其他的字符串函數(shù) 119
8.4.7 將字符串轉換成數(shù)值的函數(shù) 120
8.5 字符處理函數(shù) 121
8.5.1 字符檢測函數(shù) 121
8.5.2 字符大小寫轉換函數(shù) 122
8.6 技術解惑 123
8.6.1 數(shù)組的下標總是從0開始嗎 123
8.6.2 C語言對數(shù)組的處理非常有效嗎 124
8.6.3 初始化一維數(shù)組的注意事項 124
8.6.4 冒泡排序 125
8.7 課后練習 125
第9章 函數(shù) 126
9.1 C函數(shù)的基礎知識 127
9.1.1 函數(shù)的分類 127
9.1.2 函數(shù)的定義 128
9.2 函數(shù)聲明和函數(shù)原型 129
9.3 函數(shù)的參數(shù) 131
9.3.1 形參和實參 131
9.3.2 以數(shù)組名作為函數(shù)的參數(shù) 132
9.3.3 以數(shù)組作為函數(shù)的參數(shù) 133
9.4 函數(shù)的返回值 135
9.5 函數(shù)的調用 136
9.5.1 函數(shù)調用的格式 136
9.5.2 函數(shù)的調用方式 137
9.5.3 被調函數(shù)的聲明方式 138
9.5.4 對調用函數(shù)的方式進行深入分析 139
9.6 函數(shù)的嵌套調用和遞歸調用 140
9.6.1 函數(shù)的嵌套調用 140
9.6.2 函數(shù)的遞歸調用 142
9.7 變量的作用域和生存期 145
9.7.1 變量作用域 145
9.7.2 靜態(tài)存儲變量和動態(tài)存儲變量 147
9.8 C的內部函數(shù)和外部函數(shù) 153
9.8.1 內部函數(shù) 153
9.8.2 外部函數(shù) 153
9.9 庫函數(shù) 154
9.10 技術解惑 156
9.10.1 通過Turbo C深入分析 項目文件 156
9.10.2 要盡量避免不必要的函數(shù)調用 157
9.10.3 請確保函數(shù)的聲明和定義是靜態(tài)的 158
9.10.4 避免過長的main()函數(shù) 158
9.10.5 函數(shù)的地址也是數(shù)據(jù) 160
9.10.6 說明函數(shù)的時機 160
9.10.7 一個函數(shù)可以有多少個參數(shù) 161
9.10.8 如果一個函數(shù)沒有返回值,是否需要加入return
語句 162 9.10.9 在程序退出main函數(shù)之后還有可能執(zhí)行一部分代碼 162 9.10.10 exit()函數(shù)和return語句的差異 162 9.11 課后練習 162 第10章 指針 164 10.1 基本概念 165 10.2 變量的指針和指向變量的指針變量 165 10.2.1 聲明指針變量 166 10.2.2 指針變量的初始化 166 10.2.3 指針變量的引用 167 10.2.4 關于指針運算符的說明 168 10.2.5 指針變量的運算 169 10.2.6 以指針變量作為函數(shù)參數(shù) 170 10.2.7 void類型的指針 173 10.3 指針和數(shù)組 174 10.3.1 數(shù)組元素的指針 174 10.3.2 指向一維數(shù)組元素的指針變量 175 10.3.3 通過指針引用數(shù)組元素 176 10.3.4 以數(shù)組名作為函數(shù)參數(shù) 179 10.4 指針和多維數(shù)組 180 10.4.1 多維數(shù)組的地址 180 10.4.2 指向多維數(shù)組的指針變量 182 10.5 指針和字符串 185 10.5.1 指針訪問字符串 185 10.5.2 以字符串指針作為函數(shù)參數(shù) 186 10.5.3 字符串指針變量與字符數(shù)組的區(qū)別 187 10.6 指針數(shù)組和多級指針 188 10.6.1 指針數(shù)組 188 10.6.2 多級指針的定義和應用 189 10.6.3 指向指針的指針 191 10.6.4 main函數(shù)的參數(shù) 191 10.7 指針函數(shù)和函數(shù)指針 192 10.7.1 指針函數(shù) 193 10.7.2 函數(shù)指針 193 10.8 技術解惑 195 10.8.1 初始化指針時的注意事項 195 10.8.2 為指針賦值時的注意事項 196 10.8.3 當指針用于數(shù)組時的注意事項 197 10.8.4 在結構中使用指針時的注意事項 197 10.8.5 避免不必要的內存引用 198 10.8.6 避免懸空指針和野指針 198 10.8.7 數(shù)組下標與指針的效率解析 199 10.8.8 使用指針時的常見錯誤 199 10.9 課后練習 200 第11章 數(shù)據(jù)的熔爐—結構體、共用體和枚舉 202 11.1 結構體 203 11.1.1 定義結構體類型 203 11.1.2 定義結構體類型變量 203 11.1.3 引用結構體變量 205 11.1.4 初始化結構體變量 206 11.2 結構體數(shù)組 207 11.2.1 定義結構體數(shù)組 208 11.2.2 初始化結構體數(shù)組 209 11.2.3 引用結構體數(shù)組 210 11.3 結構體指針 211 11.3.1 定義結構體指針變量 212 11.3.2 初始化結構體指針變量 212 11.3.3 引用結構體指針變量 212 11.3.4 指向結構變量的指針 213 11.3.5 指向結構體數(shù)組的指針 214 11.4 在函數(shù)中使用結構體 214 11.4.1 結構體變量和結構體指針可以作為函數(shù)參數(shù) 215 11.4.2 函數(shù)可以返回結構體類型的值 215 11.5 共用體(聯(lián)合) 217 11.5.1 定義共用體和共用體變量 217 11.5.2 引用和初始化共用體變量 218 11.6 枚舉 219 11.6.1 定義枚舉類型 219 11.6.2 定義枚舉變量 220 11.6.3 引用枚舉變量 220 11.7 typedef定義類型的作用 222 11.7.1 類型定義符typedef的基礎 222 11.7.2 使用typedef 223 11.8 技術解惑 224 11.8.1 可以省略結構名嗎 224 11.8.2 是否可以定義一種通用數(shù)據(jù)類型以存儲任意類型的數(shù)據(jù) 224 11.8.3 結構和共用體的區(qū)別 224 11.8.4 定義C結構體的問題 225 11.9 課后練習 225 第12章 鏈表 226 12.1 動態(tài)內存分配 227 12.1.1 動態(tài)內存分配的作用 227 12.1.2 實現(xiàn)動態(tài)內存分配及管理的方法 227 12.2 鏈表詳解 230 12.2.1 鏈表簡介 230 12.2.2 單向鏈表 231 12.2.3 創(chuàng)建一個鏈表 233 12.2.4 刪除整個鏈表 234 12.2.5 在鏈表中插入節(jié)點 234 12.2.6 在鏈表中刪除節(jié)點 235 12.2.7 雙向鏈表 236 12.2.8 循環(huán)鏈表 237 12.3 技術解惑 238 12.3.1 鏈表的總結 238 12.3.2 面試題—判斷單鏈表是否有環(huán) 242 12.3.3 面試題—實現(xiàn)單鏈表逆置 243 12.4 課后練習 244 第13章 位運算 245 13.1 位運算符和位運算 246 13.1.1 按位與運算 246 13.1.2 按位或運算 247 13.1.3 按位異或運算 247 13.1.4 取反運算 248 13.1.5 左移運算 248 13.1.6 右移運算 249 13.1.7 位運算的應用實例 249 13.2 位域 251 13.2.1 位域的定義和位域變量的說明 251 13.2.2 位域的使用 252 13.3 技術解惑 252 13.3.1 二進制補碼的運算公式 252 13.3.2 面試題—從某個數(shù)中取出指定的某些位 252 13.3.3 位域的內存對齊原則 253 13.4 課后練習 253 第14章 預編譯處理 255 14.1 預編譯的基礎 256 14.2 宏定義 256 14.2.1 不帶參數(shù)的宏定義 256 14.2.2 帶參數(shù)的宏定義 258 14.2.3 字符串化運算符 260 14.2.4 并接運算符 260 14.3 文件包含 260 14.4 條件編譯 262 14.4.1 #ifdef… #else…#endif命令 262 14.4.2 #if defined… #else…#endif 263 14.4.3 #ifndef… #else…#endif 263 14.4.4 #if !defined… #else…#endif 264 14.4.5 #ifdef…#elif… #elif…#else… #endif 264 14.5 技術解惑 265 14.5.1 還有其他預編譯指令嗎 265 14.5.2 帶參的宏定義和函數(shù)不同 266 14.5.3 C語言中預處理指令的總結 266 14.5.4 預編譯指令的本質 267 14.5.5 sizeof(int)在預編譯階段是不會求值的 267 14.5.6 多行預處理指令的寫法 267 14.6 課后練習 267 第15章 文件操作 268 15.1 文件 269 15.1.1 文本文件 269 15.1.2 文件分類 270 15.2 文件指針 270 15.3 文件的打開與關閉 271 15.3.1 打開文件 271 15.3.2 關閉文件 273 15.4 文件讀寫 274 15.4.1 字符讀寫函數(shù) 274 15.4.2 字符串讀寫函數(shù) 276 15.4.3 格式化讀寫函數(shù) 278 15.4.4 數(shù)據(jù)塊讀寫函數(shù) 279 15.4.5 其他讀寫函數(shù) 280 15.5 文件的隨機讀寫 281 15.5.1 fseek函數(shù) 281 15.5.2 rewind函數(shù) 283 15.5.3 ftell函數(shù) 283 15.6 文件管理函數(shù) 284 15.6.1 刪除文件 284 15.6.2 重命名文件 285 15.6.3 復制文件 285 15.7 文件狀態(tài)檢測函數(shù) 286 15.7.1 feof函數(shù) 287 15.7.2 ferror函數(shù) 287 15.7.3 clearerr函數(shù) 287 15.8 Win32 API中的文件操作函數(shù) 288 15.8.1 創(chuàng)建和打開文件 288 15.8.2 讀取、寫入和刪除文件 289 15.9 技術解惑 289 15.9.1 文件指針是文件內部的位置指針嗎 289 15.9.2 fseek函數(shù)的換行問題 290 15.9.3 怎樣解決gets函數(shù)的溢出問題 290 15.9.4 feof函數(shù)會多讀一個數(shù)據(jù)嗎 290 15.9.5 流和文件的關系 290 15.10 課后練習 291 第16章 錯誤和程序調試 292 16.1 常見錯誤分析 293 16.1.1 語法錯誤 293 16.1.2 邏輯錯誤(語義錯誤) 294 16.1.3 內存錯誤 297 16.2 錯誤的檢出與分離 302 16.3 調試時的注意事項 303 16.3.1 上機前要先熟悉程序的運行環(huán)境 303 16.3.2 在編程時要為調試做好準備 304 16.4 技術解惑 304 16.4.1 編譯通過并不代表運行正確 304 16.4.2 兩段代碼的編譯差別 305 16.4.3 調試程序的方法與技巧 305 16.5 課后練習 307 第17章 內存管理 308 17.1 C語言中的內存模型 309 17.2 棧和堆 309 17.2.1 棧操作 309 17.2.2 堆操作 310 17.3 動態(tài)管理 311 17.3.1 使用函數(shù)malloc動態(tài)分配內存空間 311 17.3.2 使用函數(shù)calloc分配內存空間并初始化 312 17.3.3 使用函數(shù)realloc重新分配內存 313 17.3.4 使用函數(shù)free釋放內存空間 314 17.4 課后練習 315 第18章 C語言高級編程技術 316 18.1 C語言的高級編程技術 317 18.2 分析文本的屏幕輸出和鍵盤輸入 317 18.2.1 實現(xiàn)文本的屏幕輸出 317 18.2.2 實現(xiàn)鍵盤輸入 322 18.2.3 應用實例 323 18.3 分析圖形顯示方式和鼠標輸入 324 18.3.1 初始化圖形模式 325 18.3.2 清屏和恢復顯示函數(shù) 326 18.3.3 建立獨立圖形程序 327 18.3.4 基本繪圖函數(shù) 327 18.3.5 線性函數(shù) 330 18.3.6 顏色控制函數(shù) 331 18.3.7 填色函數(shù)和畫圖函數(shù) 334 18.3.8 圖形窗口函數(shù) 336 18.3.9 分析圖形方式下的文本輸出函數(shù) 337 18.4 菜單設計 340 18.5 課后練習 343 第19章 算法—抓住程序的靈魂 344 19.1 我們對算法的理解 345 19.1.1 算法是程序的靈魂 345 19.1.2 何謂算法 345 19.1.3 算法的特性 346 19.2 算法表示法—流程圖 347 19.3 枚舉算法 348 19.3.1 枚舉算法的基礎 348 19.3.2 實戰(zhàn)演練—百錢買百雞 348 19.3.3 實戰(zhàn)演練—填寫運算符 349 19.4 遞推算法 351 19.4.1 遞推算法的基礎 351 19.4.2 實戰(zhàn)演練—斐波那契數(shù)列 351 19.4.3 實戰(zhàn)演練—銀行存款 353 19.5 遞歸算法 354 19.5.1 遞歸算法的基礎 354 19.5.2 實戰(zhàn)演練—漢諾塔 355 19.5.3 實戰(zhàn)演練—階乘 357 19.6 分治算法 358 19.6.1 分治算法的基礎 358 19.6.2 實戰(zhàn)演練—大數(shù)相乘 358 19.6.3 實戰(zhàn)演練—歐洲冠軍杯 比賽日程安排 360 19.7 貪心算法 362 19.7.1 貪心算法的基礎 363 19.7.2 實戰(zhàn)演練—裝箱 363 19.7.3 實戰(zhàn)演練—找零方案 365 19.8 試探法算法 366 19.8.1 試探法算法的基礎 366 19.8.2 實戰(zhàn)演練—八皇后 367 19.8.3 實戰(zhàn)演練—體彩29選7的組合 368 19.9 迭代算法 370 19.9.1 迭代算法的基礎 370 19.9.2 實戰(zhàn)演練—求平方根 370 19.10 模擬算法 371 19.10.1 模擬算法的思路 371 19.10.2 實戰(zhàn)演練—猜數(shù)字游戲 372 19.10.3 實戰(zhàn)演練—擲骰子 游戲 372 19.11 技術解惑 374 19.11.1 衡量算法的標準 374 19.11.2 選擇使用枚舉法的時機 375 19.11.3 遞推和遞歸的差異 376 19.11.4 分治法解決問題的類型 376 19.11.5 分治算法的機理 376 19.11.6 貪婪算法并不是解決問題最優(yōu)方案的原因 376 19.11.7 回溯算法是否會影響算法效率 377 19.11.8 遞歸算法與迭代算法的區(qū)別 377 19.12 課后練習 377 第20章 數(shù)據(jù)結構 379 20.1 使用線性表 380 20.1.1 線性表的特性 380 20.1.2 順序表操作 381 20.1.3 實戰(zhàn)演練—使用順序表操作函數(shù) 385 20.2 隊列 386 20.2.1 隊列的定義 386 20.2.2 實戰(zhàn)演練—實現(xiàn)一個排號程序 387 20.3 !390 20.3.1 棧的定義 390 20.3.2 實戰(zhàn)演練—實現(xiàn)棧操作 390 20.4 技術解惑 392 20.4.1 線性表插入操作的時間復雜度 392 20.4.2 線性表刪除操作的時間復雜度 392 20.4.3 線性表按值查找操作的時間復雜度 392 20.4.4 線性表鏈接存儲操作的11種算法 393 20.4.5 堆和棧的區(qū)別 397 20.5 課后練習 397 第21章 網(wǎng)絡編程技術 398 21.1 OSI 7層網(wǎng)絡模型 399 21.2 TCP/IP 400 21.2.1 IP 401 21.2.2 TCP 402 21.2.3 UDP 403 21.2.4 ICMP 403 21.3 使用C語言開發(fā)網(wǎng)絡項目 404 21.3.1 網(wǎng)絡編程方式 404 21.3.2 網(wǎng)絡通信的基本流程 404 21.3.3 搭建開發(fā)環(huán)境 405 21.3.4 兩個常用的數(shù)據(jù)結構 405 21.3.5 Windows套接字的基礎 406 21.4 常用的Winsock函數(shù) 406 21.4.1 WSAStartup函數(shù) 406 21.4.2 socket函數(shù) 407 21.4.3 inet_addr函數(shù) 407 21.4.4 gethostbyname函數(shù) 407 21.4.5 bind函數(shù) 407 21.4.6 connect函數(shù) 407 21.4.7 select函數(shù) 408 21.4.8 recv函數(shù) 408 21.4.9 sendto函數(shù) 408 21.5 MAC地址 408 21.6 NetBIOS編程 409 21.6.1 處理過程 409 21.6.2 NetBIOS命令 410 21.6.3 NetBIOS名字解析 410 21.6.4 NetBEUI 413 21.6.5 NetBIOS的范圍 413 21.6.6 NetBIOS控制塊 413 21.7 實戰(zhàn)演練—獲取當前機器的MAC地址 413 21.7.1 選擇開發(fā)工具 413 21.7.2 設計MFC窗體 414 21.7.3 具體編碼 414 第22章 初入江湖—設計游戲項目 421 22.1 游戲功能描述 422 22.2 游戲總體設計 422 22.2.1 功能模塊設計 422 22.2.2 數(shù)據(jù)結構設計 424 22.2.3 構成函數(shù)介紹 425 22.3 游戲的具體實現(xiàn) 426 22.3.1 預處理 426 22.3.2 主函數(shù) 429 22.3.3 初始化界面處理 430 22.3.4 時鐘中斷處理 431 22.3.5 成績、速度和幫助處理 431 22.3.6 滿行處理 432 22.3.7 方塊顯示和消除處理 434 22.3.8 方塊判斷處理 435 第23章 風云再起—設計網(wǎng)絡項目 438 23.1 系統(tǒng)功能描述 439 23.2 系統(tǒng)總體設計 439 23.2.1 功能模塊設計 439 23.2.2 數(shù)據(jù)結構設計 441 23.2.3 構成函數(shù)介紹 442 23.3 系統(tǒng)的具體實現(xiàn) 442 23.3.1 預處理 442 23.3.2 初始化處理 444 23.3.3 控制模塊 444 23.3.4 數(shù)據(jù)報解讀處理 446 23.3.5 Ping測試處理 447 23.3.6 主函數(shù) 449 第24章 爐火純青—學生成績管理系統(tǒng) 451 24.1 系統(tǒng)總體描述 452 24.1.1 項目開發(fā)的目標 452 24.1.2 項目的意義 452 24.1.3 系統(tǒng)功能描述 452 24.2 系統(tǒng)總體設計 453 24.2.1 功能模塊設計 453 24.2.2 數(shù)據(jù)結構設計 454 24.2.3 構成函數(shù)介紹 455 24.3 系統(tǒng)的具體實現(xiàn) 456 24.3.1 預處理 456 24.3.2 主函數(shù) 457 24.3.3 系統(tǒng)主菜單函數(shù) 458 24.3.4 表格顯示信息 458 24.3.5 信息查找定位 459 24.3.6 格式化輸入數(shù)據(jù) 459 24.3.7 增加學生記錄 460 24.3.8 查詢學生記錄 461 24.3.9 刪除學生記錄 462 24.3.10 修改學生記錄 463 24.3.11 插入學生記錄 463 24.3.12 統(tǒng)計學生記錄 464 24.3.13 排序處理 465 24.3.14 存儲學生信息 466 第25章 笑傲江湖—使用C51實現(xiàn)跑馬燈程序 471 25.1 單片機C語言基礎 472 25.1.1 單片機C語言的優(yōu)越性 472 25.1.2 C51的數(shù)據(jù)類型 472 25.1.3 C51數(shù)據(jù)的存儲結構 473 25.1.4 C51運算符和表達式 474 25.1.5 C51的中斷函數(shù) 475 25.2 跑馬燈設計實例 476 25.2.1 基本跑馬燈的實現(xiàn) 476 25.2.2 矩形波發(fā)生器 479 25.2.3 用定時器/計數(shù)器產(chǎn)生矩形波 480 25.3 一個完整的跑馬燈程序 481 25.3.1 電路設計 481 25.3.2 程序設計 484
你還可能感興趣
我要評論
|