C語言編程從入門到精通(c端定製書)
王長青
商品描述
本書全面介紹C語言的編程技術,不僅覆蓋C語言的基礎知識和高級應用,而且融入AI(Artificial Intelligence,人工智能)自動化編程的前沿知識。全書共19章,第1章至第6章引領讀者入門C語言,從搭建開發環境、基礎語法,到數據類型、運算符和表達式、輸入和輸出、流程控制、數組和字符串,為讀者打下堅實的編程基礎;第7章至第10章分別講解函數、指針、結構體、共享體、枚舉、鏈表等高級知識,這些知識將幫助讀者掌握實戰技術,用以解決實際問題;第11章至第13章深入探討位運算、預處理、文件操作等專題,強化讀者在特定領域的編程能力;第14章和第15章專註於錯誤處理和程序調試、內存管理,培養讀者解決編程中常見問題的能力;第16章介紹學生成績管理系統綜合案例的開發過程,將理論知識應用於實踐,指導讀者完成一個完整的軟件項目;第17章介紹人工智能和AIGC(Artificial Intelligence Generated Content,人工智能生成內容)自動化編程的前沿知識;第18章是AIGC自動化編程實戰,演示使用ChatGPT和Kimi進行代碼摘要和解釋、代碼生成並添加註釋、代碼補全、代碼重構和優化、代碼糾錯的實踐,讓讀者體驗AI在編程中的強大應用;第19章以俄羅斯方塊游戲為例,詳細介紹如何基於ChatGPT和Kimi實現游戲開發的全過程,包括游戲設計、需求分析、代碼實現、界面設計等,使讀者能直觀感受到AI技術在項目開發中的創新應用。
本書內容循序漸進,將傳統編程與AI自動化編程相結合,不僅幫助讀者扎實地掌握C語言編程技術,還能讓讀者緊跟技術潮流,瞭解並應用新的AI編程技術。本書不僅適合C語言的初學者學習,也適合有一定C語言基礎的讀者閱讀,還可以作為高等院校相關專業的教學用書和培訓學校的教材。
作者簡介
王長青,通信工程師,現負責電信BSS領域相關產品的詳細架構設計和開發實施工作。熟悉面向對象技術及UML,15年C和C++開發經驗,10年C#開發經驗,熟悉相關的編譯原理、數據結構、算法。精通Unix、Linux操作系統,且能熟練使用常用操作命令,並且熟悉該環境下的C/C++開發。
目錄大綱
目錄
第 1 章 C 語言開發基礎 1
1.1 C 語言介紹 1
1.1.1 C 語言的發展歷程 1
1.1.2 C 語言的優點 2
1.2 搭建開發環境 2
1.2.1 安裝輕量級開發工具Dev-C++ 2
1.2.2 安裝 Visual Studio 3
1.3 分析 C 語言程序的結構 4
1.3.1 認識 C 語言程序 5
1.3.2 分析 C 語言程序的具體組成 5
1.3.3 使用 Visual Studio 開發 C 語言程序 6
1.3.4 使用 Dev-C++運行 C 語言程序 8
1.4 技術解惑 8
1.4.1 學習 C 語言有用嗎 8
1.4.2 怎樣學好 C 語言 9
1.5 常見面試題解析 9
1.6 課後練習 9
第 2 章 C 語言基礎語法 10
2.1 標識符和關鍵字 10
2.2 數據類型 11
2.3 常量和變量 11
2.3.1 常量 12
2.3.2 變量 12
2.4 整型數據 14
2.4.1 整型常量 14
2.4.2 整型變量 16
2.5 實型數據 18
2.5.1 實型常量 18
2.5.2 實型變量 18
2.5.3 實型常量的類型 20
2.6 字符型數據 20
2.6.1 字符常量 20
2.6.2 字符串常量 22
2.6.3 字符變量 22
2.7 整型、實型和字符型數據間的轉換 24
2.7.1 自動轉換 24
2.7.2 強制轉換 25
2.8 技術解惑 25
2.8.1 無符號整型變量和有符號整型變量的定義 25
2.8.2 字符變量的含義 26
2.8.3 如何理解字符型數據的取值範圍 26
2.8.4 怎樣將帶小數點的字符型數據轉換成浮點型數據 26
2.8.5 變量的深入分析 27
2.9 常見面試題解析 27
2.10 課後練習 28
第 3 章 運算符和表達式 29
3.1 運算符的種類 29
3.2 算術運算符和算術表達式 30
3.2.1 單目運算符 30
3.2.2 雙目運算符 31
3.3 賦值運算符和賦值表達式 31
3.3.1 基本賦值運算符 32
3.3.2 復合賦值運算符 32
3.3.3 賦值表達式 33
3.4 關系運算符和關系表達式 34
3.4.1 關系運算符 34
3.4.2 關系表達式 34
3.5 邏輯運算符和邏輯表達式 35
3.5.1 邏輯運算符 35
3.5.2 邏輯表達式 35
3.6 逗號運算符和逗號表達式 37
3.6.1 逗號運算符 37
3.6.2 逗號表達式 37
3.7 求字節數的運算符 38
3.8 運算符的優先級 39
3.9 技術解惑 39
3.9.1 少數運算符在規定表達式中的求值順序 39
3.9.2 在 C 語言中是否可以進行混合運算 40
3.9.3 在一個邏輯條件語句中常數項永遠在左側 40
3.9.4 賦值處理的自動類型轉換 40
3.10 常見面試題解析 41
3.11 課後練習 42
第 4 章 輸入和輸出 43
4.1 初步認識 C 語句 43
4.1.1 C 語句簡介 43
4.1.2 賦值語句 44
4.2 數據的輸入和輸出 45
4.2.1 putchar 函數 45
4.2.2 getchar 函數 46
4.2.3 printf 函數 47
4.2.4 scanf 函數 50
4.2.5 puts 函數 53
4.2.6 C11 標準函數 gets_s 54
4.3 技術解惑 54
4.3.1 scanf 函數和gets_s 函數的區別 54
4.3.2 C 語言的輸入和輸出問題 55
4.4 常見面試題解析 55
4.5 課後練習 56
第 5 章 流程控制 57
5.1 順序結構 57
5.2 選擇結構 58
5.2.1 單分支結構 58
5.2.2 雙分支結構 59
5.2.3 多分支結構 61
5.2.4 條件運算符和條件表達式 63
5.3 循環結構 64
5.3.1 for 語句 64
5.3.2 while 語句 65
5.3.3 do while 語句 ..................... 67
5.3.4 goto 語句 67
5.3.5 break 語句和 continue語句 68
5.3.6 死循環/退出程序 69
5.4 技術解惑 70
5.5 常見面試題解析 71
5.6 課後練習 72
第 6 章 數組和字符串 73
6.1 一維數組 73
6.1.1 定義一維數組 73
6.1.2 引用一維數組的元素 73
6.1.3 初始化一維數組 74
6.2 多維數組 75
6.2.1 二維數組的用法 75
6.2.2 多維數組的用法 78
6.3 字符數組與字符串 80
6.3.1 字符數組 80
6.3.2 字符串與字符數組 80
6.3.3 字符數組的輸入和輸出 81
6.4 字符串處理函數 83
6.4.1 返回字符串長度的函數 83
6.4.2 字符串大小寫轉換函數 83
6.4.3 字符串復制函數 84
6.4.4 字符串比較函數 85
6.4.5 字符串連接函數 86
6.4.6 將字符串轉換成數值的函數 87
6.5 字符處理函數 88
6.5.1 字符檢測函數 88
6.5.2 字符大小寫轉換函數 89
6.6 技術解惑 90
6.6.1 C 語言對數組的處理非常有效嗎 90
6.6.2 初始化一維數組的註意事項 90
6.7 常見面試題解析 91
6.8 課後練習 92
第 7 章 函數 93
7.1 函數的基礎知識 93
7.1.1 函數的分類 93
7.1.2 函數的定義 94
7.2 函數聲明和函數原型 95
7.2.1 函數聲明 96
7.2.2 函數原型 96
7.3 函數的參數 96
7.3.1 形參和實參 97
7.3.2 以數組名作為函數的參數 97
7.3.3 以數組作為函數的參數 99
7.4 函數的返回值 100
7.5 函數的調用 102
7.5.1 函數調用的格式 102
7.5.2 函數調用的方式 102
7.5.3 被調函數的聲明方式 103
7.6 函數的嵌套調用和遞歸調用 104
7.6.1 函數的嵌套調用 104
7.6.2 函數的遞歸調用 106
7.7 變量的作用域和存儲類型 108
7.7.1 變量的作用域 108
7.7.2 變量的存儲類型 111
7.8 內部函數和外部函數 114
7.8.1 內部函數 114
7.8.2 外部函數 115
7.9 庫函數 116
7.10 技術解惑 117
7.10.1 確保函數的聲明和定義是靜態的 117
7.10.2 說明函數的時機 117
7.10.3 如果一個函數沒有返回值,是否需要加上 return 語句 118
7.10.4 exit 函數和return語句的差異 118
7.11 常見面試題解析 118
7.12 課後練習 119
第 8 章 指針 121
8.1 基本概念 121
8.2 變量的指針和指向變量的指針變量 122
8.2.1 聲明指針變量 122
8.2.2 指針變量的初始化 122
8.2.3 指針變量的引用 123
8.2.4 關於指針運算符的說明 124
8.2.5 指針變量的運算 125
8.2.6 以指針變量作為函數參數 126
8.2.7 void 類型的指針 128
8.3 指針和數組 129
8.3.1 數組元素的指針 130
8.3.2 指向一維數組元素的指針變量 131
8.3.3 通過指針引用數組元素 131
8.3.4 以數組名作為函數參數 134
8.4 指針和多維數組 136
8.4.1 多維數組的地址 136
8.4.2 指向多維數組的指針變量 138
8.5 指針和字符串 140
8.5.1 用指針訪問字符串 140
8.5.2 以字符串指針作為函數參數 141
8.5.3 字符指針變量與字符數組的區別 142
8.6 指針數組和多級指針 143
8.6.1 指針數組 143
8.6.2 多級指針的定義和應用 144
8.6.3 指向指針的指針變量 146
8.6.4 main 函數的參數 146
8.7 指針函數和函數指針 147
8.7.1 指針函數 147
8.7.2 函數指針 147
8.8 技術解惑 150
8.8.1 初始化指針時的註意事項 150
8.8.2 為指針賦值時的註意事項 151
8.8.3 當指針用於數組時的註意事項 151
8.8.4 使用指針時的常見錯誤 152
8.9 常見面試題解析 152
8.10 課後練習 154
第 9 章 結構體、共享體和枚舉 155
9.1 結構體 155
9.1.1 定義結構體 155
9.1.2 定義結構體變量 156
9.1.3 引用結構體變量 157
9.1.4 初始化結構體變量 158
9.2 結構體數組 159
9.2.1 定義結構體數組 160
9.2.2 初始化結構體數組 161
9.2.3 引用結構體數組 162
9.3 結構體指針變量 163
9.3.1 定義結構體指針變量 163
9.3.2 初始化結構體指針變量 164
9.3.3 引用結構體指針變量 164
9.3.4 指向結構體變量的指針 165
9.3.5 指向結構體數組的指針變量 166
9.4 在函數中使用結構體 166
9.4.1 將結構體變量的值傳遞給另一個函數 166
9.4.2 函數返回結構體類型的值 167
9.5 共享體 168
9.5.1 定義共享體和共享體變量 169
9.5.2 引用共享體變量 169
9.6 枚舉 171
9.6.1 定義枚舉類型 171
9.6.2 定義枚舉變量 172
9.6.3 引用枚舉變量 172
9.7 使用 typedef 定義類型 173
9.7.1 類型定義符typedef的基礎知識 173
9.7.2 使用 typedef 175
9.8 技術解惑 175
9.8.1 可以省略結構名嗎 175
9.8.2 是否可以定義一種通用數據類型以存儲任意類型的數據 175
9.8.3 結構體和共享體的區別 176
9.8.4 定義結構體的問題 177
9.9 常見面試題解析 177
9.10 課後練習 178
第 10 章 鏈表 179
10.1 動態內存分配 179
10.1.1 動態內存分配的作用 179
10.1.2 實現動態內存分配及管理的方法 179
10.2 使用鏈表 182
10.2.1 鏈表簡介 182
10.2.2 單向鏈表 184
10.2.3 創建鏈表 186
10.2.4 刪除鏈表 186
10.2.5 在鏈表中插入節點 186
10.2.6 在鏈表中刪除節點 187
10.2.7 雙向鏈表 188
10.2.8 循環鏈表 188
10.3 技術解惑 188
10.4 常見面試題解析 189
10.5 課後練習 190
第 11 章 位運算 191
11.1 位運算符和位運算 191
11.1.1 按位與運算符 191
11.1.2 按位或運算符 192
11.1.3 按位異或運算符 193
11.1.4 取反運算符 193
11.1.5 左移運算符 194
11.1.6 右移運算符 194
11.1.7 位運算的應用實例 194
11.2 位域 196
11.2.1 位域的定義和位域變量的說明 196
11.2.2 位域的使用 197
11.3 技術解惑 197
11.3.1 從某個數中取出指定的某些位 197
11.3.2 位域的內存對齊原則 198
11.4 常見面試題解析 198
11.5 課後練習 199
第 12 章 預處理 200
12.1 預處理基礎 200
12.2 宏定義 200
12.2.1 不帶參數的宏定義 200
12.2.2 帶參數的宏定義 202
12.2.3 字符串化運算符 204
12.2.4 並接運算符 205
12.3 文件包含 205
12.4 條件編譯 207
12.4.1 #ifdef #else…#endif命令 207
12.4.2 #if defined #else …#endif 命令 208
12.4.3 #ifndef #else…#endif命令 208
12.4.4 #if !defined #else …#endif 命令 208
12.4.5 #ifdef #elif…#elif …#else #endif 命令........ 208
12.5 技術解惑 210
12.5.1 其他預編譯指令 210
12.5.2 帶參宏和函數的不同 211
12.5.3 預處理的本質 211
12.5.4 多行預處理指令的寫法 211
12.6 常見面試題解析 211
12.7 課後練習 212
第 13 章 文件操作 213
13.1 文件基礎 213
13.1.1 文件介紹 213
13.1.2 文本文件 213
13.1.3 文件指針 214
13.2 文件的打開與關閉 214
13.2.1 打開文件 214
13.2.2 關閉文件 216
13.3 文件讀寫函數 217
13.3.1 字符讀寫函數 218
13.3.2 字符串讀寫函數 219
13.3.3 格式化讀寫函數 221
13.3.4 數據塊讀寫函數 222
13.3.5 其他讀寫函數 223
13.4 文件的隨機讀寫 224
13.4.1 fseek 函數 225
13.4.2 rewind 函數 226
13.4.3 ftell 函數 226
13.5 文件管理函數 227
13.5.1 刪除文件 227
13.5.2 重命名文件 228
13.5.3 復制文件 228
13.6 文件讀寫狀態檢測函數 230
13.6.1 feof 函數 230
13.6.2 ferror 函數 230
13.6.3 clearerr 函數 230
13.7 Win32 API 中的文件操作函數 231
13.7.1 創建和打開文件 231
13.7.2 讀取、寫入和刪除文件 232
13.8 技術解惑 233
13.8.1 文件指針是文件內部的位置指針嗎 233
13.8.2 fseek 函數的換行問題 233
13.8.3 gets 函數的溢出問題 233
13.8.4 feof 函數會多讀一個數據嗎 233
13.9 常見面試題解析 234
13.10 課後練習 235
第 14 章 錯誤處理和程序調試 236
14.1 常見錯誤分析 236
14.1.1 語法錯誤 236
14.1.2 邏輯錯誤(語義錯誤) 237
14.1.3 內存錯誤 240
14.2 錯誤的檢出與分離 245
14.3 調試時的註意事項 246
14.3.1 上機前要先熟悉程序的運行環境 246
14.3.2 在編程時要為調試做好準備 246
14.4 技術解惑 247
14.5 常見面試題解析 248
14.6 課後練習 248
第 15 章 內存管理 249
15.1 C 語言中的內存模型 249
15.2 棧和堆 250
15.2.1 棧操作 250
15.2.2 堆操作 250
15.3 動態管理 251
15.3.1 使用函數 malloc 動態分配內存空間 251
15.3.2 使用函數 calloc 分配內存空間並初始化 252
15.3.3 使用函數realloc重新分配內存空間 253
15.3.4 使用函數 free 釋放內存空間 254
15.4 常見面試題解析 255
15.5 課後練習 256
第 16 章 學生成績管理系統 257
16.1 系統總體描述 257
16.1.1 項目開發的目標 257
16.1.2 項目的意義 257
16.1.3 系統功能描述 257
16.2 系統總體設計 258
16.2.1 功能模塊設計 258
16.2.2 數據結構設計 260
16.2.3 構成函數介紹 260
16.3 系統的具體實現 262
16.3.1 預處理 262
16.3.2 主函數 262
16.3.3 系統主菜單函數 263
16.3.4 表格顯示記錄 264
16.3.5 記錄查找定位 264
16.3.6 格式化輸入數據 265
16.3.7 增加學生記錄 265
16.3.8 查詢學生記錄 266
16.3.9 刪除學生記錄 267
16.3.10 修改學生記錄 268
16.3.11 插入學生記錄 269
16.3.12 統計學生記錄 270
16.3.13 排序處理 270
16.3.14 存儲學生記錄 271
第 17 章 人工智能和 AIGC 自動化編程 274
17.1 人工智能介紹 274
17.1.1 人工智能的方向和技術 274
17.1.2 人工智能在生活中的作用 275
17.2 自動化編程和 AIGC 275
17.2.1 自動化編程介紹 275
17.2.2 AIGC 介紹 276
17.2.3 AIGC 和自動化編程的關系 276
17.2.4 常用的 AIGC 自動化編程工具 277
17.3 ChatGPT 278
17.3.1 ChatGPT 的主要特點 278
17.3.2 ChatGPT 在編程方面的功能 278
17.4 Kimi 279
17.4.1 Kimi 的主要特點 279
17.4.2 Kimi 在編程方面的功能 279
第 18 章 AIGC 自動化編程實戰 280
18.1 隨身學習助手 280
18.1.1 基於 ChatGPT 的學習助手 280
18.1.2 基於 Kimi 的學習助手 281
18.2 代碼摘要和解釋 282
18.2.1 基於 ChatGPT 的代碼摘要和解釋 282
18.2.2 基於 Kimi 的代碼摘要和解釋 282
18.3 代碼生成並添加註釋 283
18.3.1 基於 ChatGPT 的代碼生成和註釋 283
18.3.2 基於 Kimi 的代碼生成和註釋 284
18.4 代碼補全 285
18.4.1 基於 ChatGPT 的代碼補全 285
18.4.2 基於 Kimi 的代碼補全 286
18.5 代碼重構和優化 287
18.5.1 基於 ChatGPT 的代碼重構和優化 288
18.5.2 基於 Kimi 的代碼重構和優化 288
18.6 代碼糾錯 289
18.6.1 基於 ChatGPT 的代碼糾錯 290
18.6.2 基於 Kimi 的代碼糾錯 291
19.1 基於 ChatGPT 實現的背景介紹 292
19.2 基於 Kimi 的需求分析 293
19.3 一個簡易版的俄羅斯方塊游戲 294
19.4 方塊設置和控制 297
19.4.1 設置方塊形狀 298
19.4.2 方塊控制 298
19.5 使用 ChatGPT 增加功能 300
19.5.1 增加方塊預覽功能 300
19.5.2 增加計分功能 300
19.5.3 增加游戲說明 301
19.6 代碼講解 302
19.6.1 功能總結和技術棧 302
19.6.2 代碼剖析 303