本書是工業(yè)和信息化部“十四五”規(guī)劃教材,新工科建設·計算機系列教材。本書針對教學研究型和教學應用型大學的學生綜合素質特點,基于CDIO的工程教育理念,結合讀者需要掌握的程序設計知識點和人工智能時代知識體系需求以及國內外C語言程序設計的最新教材和經典應用實例編寫。本書針對每章主要知識點選取了應用范例,并通過五子棋人機對戰(zhàn)和ATM自動取款機綜合應用實例貫穿C語言主要知識點,培養(yǎng)讀者計算思維能力,同時分析比較計算機程序語言與自然語言的相互對應關系,形象化解釋程序語言的相關概念,幫助讀者更深層次地理解程序語言的特性,進一步增強計算機相關領域應用知識點和程序設計語言間的對應關系。本書內容與后續(xù)專業(yè)課程知識點相互呼應,并通過形象化范例加以解釋,增強了可讀性,降低了概念的抽象性,有助于讀者掌握計算機程序設計的專業(yè)術語和概念,促進C語言程序設計水平的提高,學會智能程序化的基本方法和思想。本書既可作為高等院校開設的C語言程序設計課程的教科書,也可作為計算機程序設計培訓班的教材或計算機程序設計人員的參考書。
邱曉紅,江西理工大學軟件工程學院教授,副院長。長期從事計算機教育、智能控制系統(tǒng)的仿真、控制優(yōu)化、故障測試、智能計算等方面研究工作。獲省部級二等獎2項。 2010年聘為江西省第一屆學科評議組專家(計算機應用技術專業(yè)),2012年江西省計算機學會常務理事,2015年江西省軟件工程專業(yè)教指委成員,2018年江西省虛擬現實(VR)專委會成員。1999年榮獲"第十屆北京優(yōu)秀青年工程師”稱號。2001年獲國防科工委國防科學技術二等獎,并榮立二等功。2008年獲江西省教育廳教育科學優(yōu)秀成果二等獎。2004-2006年度江西省高校中青年學科帶頭人、2011年江西省高等學校第七批中青年學科帶頭人,2011年中國信息協會評為"中國信息化百名優(yōu)秀帶頭人”。
第1章 C語言及程序設計概述 1
1.1 C語言簡介 1
1.1.1 計算機語言的發(fā)展過程 1
1.1.2 C語言的發(fā)展過程 1
1.1.3 C語言的主要特點 2
1.2 C語言程序結構 3
1.2.1 C語言程序的結構及其特點 3
1.2.2 標識符與關鍵字 6
1.3 C語言編譯工具簡介 7
1.3.1 C語言程序實現的步驟 7
1.3.2 Dev-C++編譯工具 7
1.3.3 Visual C++ 6.0編譯工具簡介 12
1.4 如何學習C語言 15
1.4.1 學習C語言的理由 15
1.4.2 學好C語言的步驟 16
1.5 編程實踐 18
1.5.1 任務:輸出金字塔圖案 18
1.5.2 任務:輸出華氏溫度和攝氏溫度對照表 18
1.6 知識擴展材料 19
1.6.1 C語言的標準化過程 19
1.6.2 數字產業(yè)基礎 20
習題1 20
第2章 數據類型、運算符和表達式 22
2.1 常量和變量 22
2.1.1 常量 22
2.1.2 變量 25
2.2 基本數據類型 26
2.2.1 整型 27
2.2.2 字符型 28
2.2.3 實型 28
2.3 數據類型的轉換 29
2.3.1 自動轉換 29
2.3.2 強制轉換 31
2.4 運算符和表達式 32
2.4.1 算術運算符和算術表達式 32
2.4.2 關系運算符和關系表達式 37
2.4.3 邏輯運算符和邏輯表達式 39
2.4.4 賦值運算符和賦值表達式 40
2.4.5 位運算符和位運算 42
2.4.6 條件運算符和條件表達式 44
2.4.7 逗號運算符和逗號表達式 45
2.4.8 求字節(jié)數運算符 46
2.4.9 特殊運算符 47
2.5 運算符的優(yōu)先級和結合性 47
2.5.1 運算符的優(yōu)先級 47
2.5.2 運算符的結合性 48
2.6 編程實踐 49
任務:分析MD5散列算法的基本運算 49
2.7 知識擴展材料 50
2.7.1 C語言代碼規(guī)范(編程規(guī)范) 50
2.7.2 代碼規(guī)范的7個原則 51
習題2 53
第3章 算法概念與順序結構的程序設計 59
3.1 算法簡介 59
3.1.1 算法的概念 59
3.1.2 算法的常用描述方法 60
3.2 C語句概述 62
3.3 C語言的基本輸入/輸出 64
3.3.1 字符的輸入/輸出函數 64
3.3.2 格式的輸入/輸出函數 65
3.4 順序結構的程序設計 72
3.4.1 順序結構的程序設計思想 72
3.4.2 順序結構的程序設計舉例 73
3.5 編程實踐 74
任務:計算正弦函數的面積 74
3.6 知識擴展材料 75
3.6.1 程序員的責任事故 75
3.6.2 程序員的違法犯罪行為 75
習題3 76
第4章 選擇結構的程序設計 80
4.1 if語句 80
4.1.1 單分支if語句 80
4.1.2 雙分支if語句 81
4.1.3 多分支if語句 82
4.1.4 if語句的嵌套 83
4.1.5 條件運算符和條件表達式 84
4.2 switch語句 85
4.2.1 switch語句 85
4.2.2 switch語句的嵌套 87
4.3 選擇結構程序設計舉例 88
4.4 編程實踐 90
任務:計算個人所得稅 90
4.5 知識擴展材料 91
4.5.1 個人所得稅的概念 91
4.5.2 我國個人所得稅的特點 91
習題4 92
第5章 循環(huán)結構的程序設計 102
5.1 while語句和do-while語句 102
5.1.1 while語句的一般形式 102
5.1.2 while語句的使用說明 103
5.1.3 do-while語句的一般形式 104
5.1.4 do-while語句的使用說明 104
5.2 循環(huán)結構和循環(huán)嵌套 105
5.2.1 for語句的一般形式 105
5.2.2 for語句使用說明 106
5.2.3 循環(huán)嵌套的形式 107
5.2.4 循環(huán)嵌套的說明 108
5.3 流程轉向語句 108
5.3.1 goto語句 108
5.3.2 break語句 109
5.3.3 continue語句 110
5.4 循環(huán)結構程序設計舉例 110
5.4.1 確定循環(huán)次數與不確定循環(huán)次數 111
5.4.2 選擇循環(huán)語句 112
5.4.3 提前結束循環(huán) 114
5.4.4 其他應用舉例 114
5.5 編程實踐 115
任務:驗證哥德巴赫猜想 115
5.6 知識擴展材料 115
5.6.1 計算思維 116
5.6.2 計算思維養(yǎng)成 116
習題5 117
第6章 數組 122
6.1 一維數組 122
6.1.1 一維數組的定義 122
6.1.2 一維數組元素的引用 122
6.1.3 一維數組的初始化 123
6.1.4 一維數組應用舉例 124
6.2 多維數組 125
6.2.1 二維數組的定義 125
6.2.2 二維數組元素的引用 126
6.2.3 二維數組的初始化 126
6.2.4 二維數組應用舉例 127
6.3 字符數組 129
6.3.1 字符數組的定義 129
6.3.2 字符數組的初始化 130
6.3.3 字符串與字符串結束標志 131
6.3.4 字符數組的引用與輸入/輸出 131
6.3.5 字符串處理函數 132
6.3.6 字符數組應用舉例 135
6.4 數組應用舉例 137
6.5 編程實踐 139
任務:多規(guī)格打印萬年歷 139
6.6 知識擴展材料 141
6.6.1 聚類分析 141
6.6.2 相似性度量 141
習題6 142
第7章 函數 145
7.1 函數的定義 145
7.1.1 函數概述 145
7.1.2 函數類型 145
7.1.3 函數定義和使用 147
7.2 函數參數和返回值 149
7.2.1 形式參數和實際參數 149
7.2.2 函數的返回值 152
7.3 函數調用和聲明 153
7.3.1 函數調用 153
7.3.2 函數聲明 154
7.4 函數的嵌套調用和遞歸調用 155
7.4.1 函數的嵌套調用 155
7.4.2 函數的遞歸調用 156
7.5 變量的作用域 159
7.6 變量的存儲類別 161
7.7 編程實踐 163
7.7.1 任務:正(余)弦曲線演示 163
7.7.2 任務:輸出楊輝三角 165
7.8 知識擴展材料 166
7.8.1 分而治之 166
7.8.2 模塊化設計 167
習題7 167
第8章 指針 172
8.1 指針和地址 172
8.2 指針變量 173
8.2.1 指針變量的定義 173
8.2.2 指針變量的賦值 174
8.2.3 指針運算符與指針表達式 175
8.2.4 指針變量引用 177
8.2.5 指針變量作為函數的參數 177
8.3 指針和數組 180
8.3.1 指向數組的指針 180
8.3.2 通過指針引用數組元素 181
8.3.3 數組名作為函數參數 183
8.3.4 指向多維數組的指針和指針變量 185
8.4 指針和字符串 188
8.4.1 字符串的表示 188
8.4.2 字符串指針作為函數參數 190
8.4.3 字符數組與字符串指針的區(qū)別 191
8.5 指針和函數 192
8.5.1 函數的指針 192
8.5.2 用指向函數的指針作為函數參數 193
8.5.3 返回指針值的函數 195
8.6 指向指針的指針 196
8.6.1 指向指針的指針的定義 196
8.6.2 指針數組 197
8.6.3 指針數組作為main函數參數 198
8.7 編程實踐 199
8.7.1 任務:黑白棋子交換 199
8.7.2 任務:班干部值日安排 202
8.8 知識擴展材料 204
8.8.1 指針的優(yōu)點和缺點 204
8.8.2 指針的本質 204
習題8 205
第9章 結構體和共用體 209
9.1 結構體 209
9.1.1 結構體類型的定義 209
9.1.2 結構體變量的定義 211
9.1.3 結構體變量的引用 212
9.1.4 結構體變量的賦值 213
9.2 結構體數組與結構體指針 215
9.2.1 結構體數組 215
9.2.2 指向結構體的指針 217
9.2.3 用結構體作為函數的參數 219
9.2.4 結構體舉例 222
9.3 鏈表 224
9.3.1 鏈表概述 224
9.3.2 處理動態(tài)鏈表所需的函數 225
9.3.3 鏈表的基本操作 227
9.4 共用體 231
9.4.1 共用體類型的定義 231
9.4.2 共用體類型變量的定義 232
9.4.3 共用體變量的引用 232
9.4.4 共用體變量的初始化 232
9.5 枚舉類型和自定義類型 234
9.5.1 枚舉類型的定義 234
9.5.2 枚舉變量的定義和初始化 235
9.5.3 枚舉數據的運算 236
9.5.4 枚舉數據的輸入/輸出 236
9.5.5 枚舉變量舉例 237
9.5.6 用typedef定義類型 238
9.6 編程實踐 241
9.6.1 任務:三天打魚兩天曬網 241
9.6.2 任務:航班訂票系統(tǒng) 242
9.7 知識擴展材料 249
9.7.1 結構體所占內存 249
9.7.2 內存對齊 250
習題9 250
第10章 文件 254
10.1 文件概述 254
10.1.1 文件分類 254
10.1.2 文件的編碼形式 254
10.1.3 文件的讀/寫方式 255
10.2 文件的基本操作 255
10.2.1 文件的打開與關閉 255
10.2.2 文件的讀/寫 257
10.3 文件操作舉例 261
10.4 編程實踐 267
任務:精挑細選 267
10.5 知識擴展材料 268
10.5.1 嵌入式C語言與標準C語言的區(qū)別 268
10.5.2 嵌入式C語言數據類型的特點 269
習題10 270
第11章 預處理命令 271
11.1 宏定義 271
11.1.1 無參數的宏定義 271
11.1.2 有參數的宏定義 274
11.2 文件包含 277
11.3 條件編譯 278
11.4 編程實踐 280
任務:串化運算 280
11.5 知識擴展材料 281
11.5.1 算法復雜度 281
11.5.2 算法復雜度示例 281
習題11 282
第12章 綜合案例實訓 286
12.1 五子棋項目實訓 286
12.1.1 功能模塊設計 286
12.1.2 數據結構設計 287
12.1.3 函數功能描述 287
12.1.4 系統(tǒng)數據流程 289
12.1.5 程序實現 289
12.1.6 運行結果 306
12.2 ATM(自動取款機)案例實訓 306
12.2.1 功能模塊設計 306
12.2.2 數據結構分析 307
12.2.3 函數功能描述 307
12.2.4 系統(tǒng)數據流程 307
12.2.5 程序實現 307
12.2.6 運行結果 321
附錄A 常用字符與ASCII對照表 322
附錄B C語言常用語法提要 323
B.1 標識符 323
B.2 常量 323
B.3 表達式 323
B.4 數據定義 324
B.5 函數定義 324
B.6 變量的初始化 325
B.7 語句 325
B.8 預處理命令 325
附錄C C語言的常用庫函數 326
C.1 輸入/輸出函數 326
C.2 數學函數 327
C.3 字符函數和字符串函數 328
C.4 動態(tài)存儲分配函數 328
參考文獻 329