內容簡介
《輕鬆學C語言(圖解版)》改變了過去編程書籍枯燥乏味的文字講解方式,採用大量的插圖,生動形象地再現了C語言開發需要的所有知識,使讀者能夠輕鬆地掌握學習內容。每一章配以習題,方便讀者對該章的學習進行檢測。另外作者還專門為《輕鬆學C語言(圖解版)》錄製了大量的配套教學視頻,以幫助讀者更好地了解《輕鬆學C語言(圖解版)》內容。這些視頻和書中的實例原始碼一起收錄於《輕鬆學C語言(圖解版)》的配書光碟中。
全書共分3篇。第1篇“基礎篇”介紹C語言的發展、C語言的開發工具的安裝過程、第一個C語言程式和圖形界面程式的運行過程等知識;第2篇“語法篇”介紹C語言中的數據、語句、程式控制結構、數組、函式、指針、結構體與共用體、編譯預處理等技術;第3篇“套用篇”介紹了C語言的基本套用,檔案和目錄的操作運算、數值處理運算、字元串的處理運算、動態記憶體管理以及變數的存儲類別,數據結構的操作、排序、經典的C語言例題分析等技術。
圖書目錄
基 礎 篇
第1章 第一個C語言程式 2
1.1 C語言開發概述 2
1.1.1 C語言的發展 2
1.1.2 C語言的特點 3
1.2 構建開發環境 3
1.2.1 Visual C++ 6.0的軟硬體需求 3
1.2.2 安裝Visual C++ 6.0 4
1.3 第一個C語言程式 5
1.3.1 C程式的結構 6
1.3.2 編寫源程式 6
1.3.3 編譯調試程式 7
1.3.4 運行程式 8
1.3.5 查看源檔案 8
1.4 小結 8
1.5 習題 8
語 法 篇
第2章 數據的表示 12
2.1 數 12
2.1.1 十進制 12
2.1.2 二進制 13
2.1.3 八進制 15
2.1.4 十六進制 16
2.2 數據的描述 18
2.2.1 C的構詞方式——標識符 18
2.2.2 特殊的標識符 19
2.2.3 整數類型 20
2.2.4 浮點類型 21
2.2.5 字元類型 22
2.3 變數 23
2.3.1 變數的聲明和定義 23
2.3.2 不變的變數——常量 25
2.4 小結 27
2.5 習題 27
第3章 程式的基本單位——語句
3.1 語句的構成 31
3.2 運算符 32
3.2.1 賦值運算 32
3.2.2 數據類型的轉換 35
3.3 常用的其他運算符 37
3.3.1 位運算符 37
3.3.2 算術運算符 39
3.3.3 自增、自減運算符 40
3.3.4 逗號運算符 41
3.3.5 複合賦值運算符 41
3.3.6 sizeof運算符 43
3.3.7 分隔設定 43
3.3.8 運算符的優先權 44
3.4 語句塊 45
3.4.1 語句塊的構成 45
3.4.2 作用域 45
3.5 小結 46
3.6 習題 47
第4章 程式控制結構
4.1 語句塊的執行方式—— 順序結構 51
4.2 條件的表達 52
4.2.1 單一條件的表達—— 關係運算符 52
4.2.2 多條件的表達—— 邏輯運算符 53
4.3 選擇結構 54
4.3.1 最簡單的選擇—— 條件運算符 54
4.3.2 if語句單分支形式 55
4.3.3 if else語句雙分支形式 56
4.3.4 else if形式語句 57
4.3.5 嵌套if形式語句 58
4.3.6 switch語句 60
4.3.7 選擇結構典型實例—— 兩數計算器 63
4.4 循環結構 64
4.4.1 for語句 65
4.4.2 while語句 66
4.4.3 do while語句 66
4.4.4 循環語句的區別 67
4.5 意外情況的表達—— 轉向語句 68
4.5.1 continue語句 68
4.5.2 break語句 68
4.5.3 goto語句 69
4.6 小結 70
4.7 習題 70
第5章 數組
5.1 數組簡介 73
5.2 數組的來源 73
5.3 一維數組 74
5.3.1 一維數組的聲明和定義 74
5.3.2 一維數組的初始化 74
5.3.3 一維數組的引用 75
5.3.4 一維數組程式舉例 76
5.4 二維數組 76
5.4.1 二維數組的聲明和定義 77
5.4.2 二維數組的初始化 77
5.4.3 二維數組的引用 77
5.4.4 二維數組程式舉例 78
5.5 字元數組 79
5.5.1 字元數組的聲明和定義 79
5.5.2 字元數組的初始化 79
5.5.3 字元數組的引用 80
5.5.4 字元數組的輸入/輸出 81
5.6 綜合實例—— 楊輝三角 82
5.7 小結 84
5.8 習題 84
第6章 函式
6.1 函式概述 91
6.2 函式的聲明與定義 92
6.2.1 無參函式的聲明和定義的一般形式 92
6.2.2 有參函式的聲明和定義的一般形式 93
6.2.3 空函式 94
6.3 函式的形式參數和函式的返回值 94
6.3.1 形式參數 94
6.3.2 函式的返回值 94
6.4 函式調用 95
6.4.1 函式調用的方式 96
6.4.2 函式的參數傳遞 97
6.5 函式的嵌套和遞歸 97
6.5.1 函式的嵌套 98
6.5.2 函式的遞歸 98
6.6 數組作為函式參數 100
6.6.1 數組元素作函式實參 100
6.6.2 數組名作函式實參 100
6.7 字元數組相關的輸入/輸出函式 101
6.7.1 逐個字元的輸入和輸出 101
6.7.2 字元串的輸入和輸出 103
6.8 函式套用舉例——猴子吃桃問題 103
6.9 小結 105
6.10 習題 105
第7章 指針
7.1 地址和指針的概念 111
7.2 變數的指針和指向變數的指針變數 112
7.2.1 變數的指針與指針變數 112
7.2.2 指針變數的賦值與引用 112
7.2.3 指針變數作為函式的參數 113
7.3 指針與數組 114
7.3.1 指向數組元素的指針 114
7.3.2 通過指針引用數組元素 114
7.3.3 數組名作為函式參數 115
7.4 指針與字元串 117
7.5 函式指針與指針函式 118
7.5.1 用函式指針調用函式 118
7.5.2 使用函式指針作函式參數 119
7.5.3 指針函式——返回指針的函式 120
7.6 指針數組與二級指針 121
7.6.1 指針數組 121
7.6.2 二級指針——指向指針的指針 122
7.6.3 指針數組作為main函式的參數 123
7.7 有關指針的數據類型和指針運算 125
7.7.1 有關指針的數據類型 125
7.7.2 指針運算 126
7.7.3 void指針類型 126
7.8 小結 126
7.9 習題 126
第8章 結構體與共用體
8.1 結構體的概念及結構體類型的定義 131
8.1.1 為什麼使用結構體 131
8.1.2 定義結構體類型 132
8.2 結構體變數 133
8.2.1 結構體變數的定義 133
8.2.2 結構體變數的引用 133
8.2.3 結構體變數的初始化 134
8.2.4 結構體變數作為函式參數 135
8.3 結構體數組 136
8.3.1 結構體數組的定義 137
8.3.2 結構體數組的引用以及初始化 137
8.3.3 結構體數組作為函式的參數 139
8.4 結構體指針 140
8.4.1 指向結構體變數的指針 140
8.4.2 指向結構體數組的指針 141
8.4.3 指向結構體的指針作函式參數 142
8.5 位域 143
8.5.1 定義位域結構 143
8.5.2 位域的聲明 144
8.5.3 位域的使用 144
8.6 共用體 145
8.6.1 共用體的概念 145
8.6.2 共用體變數的定義及引用 147
8.6.3 共用體與結構體的嵌套 149
8.7 枚舉類型 149
8.7.1 枚舉類型及其變數的定義 149
8.7.2 枚舉類型套用舉例 151
8.8 typedef自定義類型 151
8.9 小結 153
8.10 習題 153
第9章 編譯預處理
9.1 宏定義 157
9.1.1 不帶參數的宏定義 158
9.1.2 帶參數的宏定義 159
9.1.3 宏的取消 160
9.1.4 標準宏對象 161
9.2 “檔案包含”處理 161
9.3 條件編譯 163
9.3.1 #ifdef命令 163
9.3.2 #ifndef 163
9.3.3 #if命令 164
9.4 小結 165
9.5 習題 165
應 用 篇
第10章 檔案和目錄操作運算 170
10.1 C檔案概述 170
10.2 檔案的處理形式 171
10.3 檔案型指針 172
10.4 檔案打開與關閉 173
10.4.1 打開檔案—— fopen函式 173
10.4.2 打開檔案是否成功 174
10.4.3 關閉檔案—— fclose函式 174
10.5 檔案讀寫函式 174
10.5.1 字元讀寫函式—— fputc函式和fgetc函式 175
10.5.2 塊讀寫函式—— fread函式和fwrite函式 177
10.5.3 格式化檔案輸入輸出—— fprintf函式和fscanf函式 178
10.6 檔案的定位 179
10.6.1 是否到檔案末尾—— feof函式 179
10.6.2 移到開頭—— rewind函式 179
10.6.3 fseek函式和ftell函式 180
10.7 出錯檢測 181
10.7.1 ferror函式 181
10.7.2 clearerr函式 181
10.8 目錄基本操作 182
10.9 檔案存儲路徑操作 183
10.10 保存檔案信息的結構 184
10.11 檔案管理 184
10.11.1 檔案重命名 184
10.11.2 刪除檔案 185
10.11.3 使用臨時檔案 186
10.12 小結 187
10.13 習題 188
第11章 數值處理運算 193
11.1 絕對值運算 193
11.2 指數與對數運算 194
11.3 三角形運算函式 194
11.3.1 正餘弦與反正餘弦函式 194
11.3.2 正切與反正切函式 195
11.3.3 直角三角形斜邊運算 196
11.4 比較運算 197
11.5 雙精度分解運算 197
11.6 隨機數運算 198
11.7 小結 199
11.8 習題 199
第12章 字元串處理運算 203
12.1 字元串的輸入 203
12.1.1 逐個字元輸入 203
12.1.2 整個字元串輸入 203
12.2 將其他數據類型轉換成字元串的運算 204
12.3 字元串的操作 206
12.3.1 字元串的複製 206
12.3.2 字元串的比較 207
12.3.3 字元串大小寫轉換 209
12.3.4 字元串的字元個數相關運算 209
12.4 字元串的輸出 211
12.4.1 逐個字元的輸出 211
12.4.2 整個字元串的輸出 211
12.4.3 字元串輸入輸出小結 212
12.5 小結 212
12.6 習題 212
第13章 動態記憶體管理及變數的存儲類別
13.1 動態記憶體管理的來源 217
13.2 動態記憶體管理 218
13.2.1 動態存儲區域分配空間 219
13.2.2 釋放動態分配的存儲空間 220
13.2.3 重新分配記憶體空間 221
13.2.4 sizeof—— 判斷數據類型長度符 222
13.3 變數的存儲類別 223
13.3.1 靜態存儲方式與動態存儲方式 223
13.3.2 static—— 聲明靜態局部變數 224
13.3.3 自動變數 225
13.3.4 register—— 暫存器變數 226
13.3.5 extern聲明外部變數 227
13.3.6 static的使用 229
13.4 小結 229
13.5 習題 230
第14章 簡單數據結構
14.1 線性表 234
14.1.1 線性表的基本概念 234
14.1.2 線性表的基本操作 235
14.1.3 線性表的順序存儲結構 236
14.1.4 順序表的基本操作 237
14.1.5 順序表的插入 238
14.1.6 順序表的查找 240
14.1.7 順序表的刪除 241
14.1.8 順序表操作的算法典型案例 242
14.1.9 線性表的鏈式存儲結構 242
14.1.10 單鍊表的基本操作 243
14.1.11 單鍊表的插入結點運算 245
14.1.12 單鍊表的刪除結點運算 247
14.1.13 單鍊表的查找結點運算 248
14.2 棧 249
14.2.1 棧的定義和基本運算 249
14.2.2 棧的順序存儲 250
14.2.3 棧的鏈式存儲 254
14.3 佇列 256
14.3.1 佇列的定義和基本運算 257
14.3.2 非循環佇列的順序存儲 257
14.3.3 循環佇列的順序存儲 260
14.3.4 佇列的鏈式存儲 262
14.4 小結 264
14.5 習題 265
第15章 排序
15.1 冒泡排序 269
15.1.1 冒泡排序算法描述 269
15.1.2 冒泡排序算法實現 270
15.1.3 冒泡排序算法實例 270
15.2 快速排序 271
15.2.1 快速排序算法描述 271
15.2.2 快速排序算法實現 272
15.2.3 快速排序算法實例 273
15.3 簡單選擇排序 273
15.3.1 簡單選擇排序算法描述 273
15.3.2 選擇排序算法實現 274
15.3.3 選擇排序算法實例 274
15.4 堆排序 275
15.4.1 堆排序算法描述 275
15.4.2 堆排序算法實現 277
15.4.3 堆排序算法實例 277
15.5 直接插入排序 278
15.5.1 直接插入排序算法描述 278
15.5.2 直接插入排序算法實現 278
15.5.3 直接插入排序算法示例 278
15.6 希爾排序 278
15.6.1 希爾(Shell)排序算法描述 278
15.6.2 希爾排序算法實現 281
15.6.3 希爾排序算法實例 281
15.7 合併排序 282
15.7.1 合併排序算法描述 282
15.7.2 合併排序算法實現 283
15.7.3 合併排序算法實例 284
15.8 基數排序 284
15.8.1 基數排序的算法描述 284
15.8.2 基數排序算法實現 286
15.9 小結 286
15.10 習題 286
第16章 經典例題分析
16.1 八皇后問題 292
16.1.1 八皇后的問題分析 292
16.1.2 八皇后的算法設計 293
16.2 漢洛塔問題 294
16.2.1 漢洛塔問題分析 294
16.2.2 漢洛塔的算法設計 295
16.3 猴子選大王 296
16.3.1 猴子選大王問題分析 296
16.3.2 猴子選大王的算法設計 297
16.4 三個數的最低公倍數 298
16.4.1 三個數的最低公倍數的問題分析 298
16.4.2 三個數的最低公倍數的算法設計 299
16.5 背包問題 300
16.5.1 背包問題分析 300
16.5.2 背包問題的算法設計 301
16.6 循環賽問題 302
16.6.1 循環賽問題分析圖 302
16.6.2 循環賽問題的算法設計 303
16.7 馬遍歷問題 304
16.7.1 馬遍歷問題分析圖 304
16.7.2 馬遍歷算法設計 305
16.8 魔術方陣 307
16.8.1 魔術方陣的分析圖 307
16.8.2 魔術方陣的算法設計 307
16.9 三色旗 309
16.9.1 三色旗的分析圖 309
16.9.2 三色旗的算法設計 309
16.10 迷宮問題 312
16.10.1 迷宮的問題分析圖 312
16.10.2 迷宮的算法實現 312
16.11 小結 315
16.12 習題 315