本書全面介紹了C語言的基本概念、基本語法和基本程序結(jié)構(gòu),注重知識內(nèi)容的連續(xù)性和漸進性;將立德樹人和“課程思政”理念融入本書,挖掘“愛國奉獻”“工匠精神”“科技報國”等30多個思政點并錄制為微視頻供讀者學習;將“計算思維”的概念引入本書,以“典型題例”或“典型案例”引入問題,以編程應用為驅(qū)動,重點講解程序設計的思想和方法,并對典型題例和案例進行剖析。
全書共10章,內(nèi)容編排合理,通俗易懂,注意分散難點,使讀者在掌握C語言基本知識的同時,重點培養(yǎng)工匠精神、家國情懷以及分析問題、解決問題的能力,進而提高實際程序設計能力。同時,全書配有設計精美、內(nèi)容豐富的“核心知識點”和“課程思政點”視頻資源,讀者可以直接掃碼觀看。為了讓讀者能夠及時地檢查自己的學習效果,把握自己的學習進度,每章后面都附有豐富的習題。
本書既可以作為高等院校各專業(yè)C語言程序設計課程的教材,也可供準備參加計算機等級考試和研究生入學考試的讀者閱讀參考,同時也可作為工程技術人員和計算機愛好者的參考資料。
C語言是一種國內(nèi)外普遍使用的面向過程的、抽象化的通用程序設計語言,廣泛應用于底層開發(fā)。C語言程序設計是理工科各專業(yè)學生計算機應用能力培養(yǎng)的重要技術基礎。 C語言既具有低級語言可直接訪問內(nèi)存地址、能進行位操作、程序運行效率高的優(yōu)點,又具有高級語言運算符和數(shù)據(jù)類型豐富、結(jié)構(gòu)化控制語句功能強、可移植性好的優(yōu)點,C語言能夠在內(nèi)存有限的大量硬件設備(如嵌入式硬件設備)中運行。在TIOBE編程語言排行榜中,C語言多年位居榜單前列,是程序設計語言的常青樹。當今流行的面向?qū)ο笳Z言C++以及Java就是在C語言的基礎上發(fā)展起來的。通過本書的學習,讀者可了解程序設計語言的基本知識,掌握計算思維和結(jié)構(gòu)化程序設計的基本方法與思路、C語言的基本編程方法和程序設計技巧、程序調(diào)試的基本技能,具備獨立編寫常規(guī)C語言應用程序的能力,同時為設計大型應用程序和系統(tǒng)程序打下堅實的基礎。
本書注重知識內(nèi)容的連續(xù)性和漸進性,將指針的概念介紹提前到數(shù)組之前,以方便讀者理解指針與數(shù)組的關系;在“案例分析與實現(xiàn)”中給出了一些難度較高的程序?qū)嵗,通過綜合實例說明算法的基本原理、程序設計技巧和運行結(jié)果分析,讓讀者融會貫通,開拓思路,使讀者在掌握C語言基本知識的同時,逐步具備分析問題、解決問題的能力,進而提高實際的程序設計能力;增加了“C語言運行環(huán)境”一章,對VC++、Dev-C++、Linux C以及手機端C語言編程進行了介紹,盡量使用通俗易懂的語言,圖文并茂,將抽象的語法知識直觀地呈現(xiàn)給讀者;全部代碼都在Visual C++ 6.0下編寫調(diào)試。全書配有設計精美、內(nèi)容豐富的視頻資源,讀者可以直接掃碼觀看。
本書共10章,第1、2章介紹了C語言的特點和C語言的基本概念,第3章討論了算法的描述和結(jié)構(gòu)化程序設計的基本方法以及三種基本程序設計結(jié)構(gòu),第4章介紹了指針的概念和指針變量及數(shù)組的相關知識,第5章介紹了函數(shù)的定義和使用,第6章介紹了結(jié)構(gòu)體、鏈表和共用體,第7章介紹了文件的相關內(nèi)容,第8章介紹了面向?qū)ο蟪绦蛟O計語言C++和C#等,第9章介紹了C語言的常用開發(fā)環(huán)境,第10章給出了詩詞信息管理系統(tǒng)等3個復雜工程案例的分析與實現(xiàn)。
C語言是一門實踐性很強的課程,對學生編程和調(diào)試能力的訓練非常重要。在第3章和第9章中專門介紹了C語言的上機步驟和C程序的調(diào)試技術,并重點介紹了Visual C++ 6.0、Dev-C++、Linux C以及手機端C語言編程的上機步驟和環(huán)境,便于讀者在Windows或Linux環(huán)境下編寫C語言程序。
本書講授課時數(shù)為48~72學時,其中實驗課占16~24學時。學習完本書后,建議安排兩周的“C語言課程設計”實訓,以完成一個小型應用系統(tǒng)的設計與實現(xiàn)。
本書是作者根據(jù)多年從事C語言教學的經(jīng)驗編寫的,在原書(王曙燕主編、王春梅副主編,《C語言程序設計》,西安電子科技大學出版社,2020)的基礎上,根據(jù)廣大讀者使用過程中提出的要求和意見進行了精心的修改,增加了視頻資源和典型題例與典型案例部分。團隊的“C語言程序設計”慕課課程已經(jīng)在中國大學慕課上線7期,讀者也可以加入學習。
王曙燕擔任本書主編,編寫了第1、3章,王春梅擔任副主編,編寫了第7、10章和附錄,王小銀編寫了第2、5、9章,王燕編寫了第6、8章,孫家澤編寫了第4章。全書由王曙燕和王春梅統(tǒng)稿,舒新峰老師對本書的編寫提出了很好的建議,在此表示衷心的感謝。
由于編者水平有限,書中難免存在不足之處,懇請讀者批評指正。編者聯(lián)系方式:wsylxj@126.com。
編 者
2022年1月
第1章 概述 1
1.1 程序設計語言 1
1.1.1 計算機語言 2
1.1.2 程序設計語言的發(fā)展 2
1.2 C程序設計語言 3
1.2.1 C語言的發(fā)展歷史 3
1.2.2 C語言的標準與版本 4
1.2.3 C語言的特點 4
1.3 C語言的基本語法成分 5
1.3.1 字符集 5
1.3.2 標識符 5
1.3.3 運算符 7
1.4 C語言程序的組成 7
1.4.1 簡單的C程序介紹 7
1.4.2 C語言程序的結(jié)構(gòu) 9
1.4.3 C程序的書寫 10
1.5 程序設計的一般過程 11
1.5.1 問題分析 12
1.5.2 算法設計 12
1.5.3 編寫程序 13
1.5.4 調(diào)試與測試 13
1.5.5 整理文檔 13
習題1 14
第2章 基本數(shù)據(jù)類型、運算符及
?表達式 15
2.1 C語言基本數(shù)據(jù)類型 15
2.1.1 數(shù)據(jù)類型 15
2.1.2 C語言數(shù)據(jù)類型簡介 15
2.2 常量 16
2.2.1 整型常量 16
2.2.2 實型常量 17
2.2.3 符號常量 17
2.2.4 字符型常量 24
2.3 變量 26
2.3.1 變量名 26
2.3.2 變量類型 26
2.3.3 變量值 30
2.4 運算符及表達式 30
2.4.1 C運算符簡介 30
2.4.2 算術運算符與算術表達式 32
2.4.3 賦值運算符與賦值表達式 34
2.4.4 關系運算符與關系表達式 36
2.4.5 邏輯運算符與邏輯表達式 37
2.4.6 條件運算符與條件表達式 39
2.4.7 逗號運算符與逗號表達式 41
2.4.8 位運算符和位段 42
2.4.9 不同類型數(shù)據(jù)間的混合運算與
類型轉(zhuǎn)換 47
習題2 48
第3章 算法與控制流 53
3.1 簡單的C程序設計 53
3.1.1 典型題例 53
3.1.2 算法 54
3.1.3 結(jié)構(gòu)化程序設計的方法 57
3.1.4 程序的基本結(jié)構(gòu) 58
3.2 順序結(jié)構(gòu)程序設計 61
3.2.1 數(shù)據(jù)的輸入與輸出 62
3.2.2 計算思維 74
3.2.3 C程序的上機步驟及基本
調(diào)試技術 76
3.2.4 題例分析與實現(xiàn) 78
3.3 選擇結(jié)構(gòu)程序設計 81
3.3.1 典型題例 81
3.3.2 二路分支——if語句 82
3.3.3 多路分支——switch語句 94
3.3.4 程序測試 98
3.3.5 題例分析與實現(xiàn) 101
3.4 循環(huán)結(jié)構(gòu)程序設計 106
3.4.1 典型題例 107
3.4.2 while語句 107
3.4.3 do-while語句 110
3.4.4 for語句 112
3.4.5 goto語句 115
3.4.6 循環(huán)的嵌套 116
3.4.7 循環(huán)結(jié)束語句 119
3.4.8 題例分析與實現(xiàn) 121
3.4.9 循環(huán)語句小結(jié) 129
習題3 129
第4章 指針與數(shù)組 134
4.1 典型題例 134
4.2 地址和指針的概念 135
4.2.1 變量的內(nèi)容和變量的地址 135
4.2.2 直接訪問和間接訪問 136
4.2.3 指針的概念 137
4.3 指針變量 137
4.3.1 指針運算符 137
4.3.2 指針變量的定義 139
4.3.3 指針變量的引用 141
4.4 一維數(shù)組 142
4.4.1 一維數(shù)組的定義和初始化 142
4.4.2 一維數(shù)組元素的引用 144
4.4.3 一維數(shù)組應用舉例 144
4.5 二維數(shù)組 149
4.5.1 二維數(shù)組的定義和初始化 149
4.5.2 二維數(shù)組元素的引用 151
4.5.3 二維數(shù)組應用舉例 153
4.6 字符數(shù)組 160
4.6.1 一維字符數(shù)組的定義和引用 160
4.6.2 字符數(shù)組的輸入與輸出 161
4.6.3 字符串處理函數(shù) 163
4.6.4 二維字符數(shù)組 166
4.6.5 字符數(shù)組應用舉例 167
4.7 指針與數(shù)組 169
4.7.1 指向數(shù)組元素的指針 169
4.7.2 字符指針、字符數(shù)組和字符串 172
4.7.3 地址越界問題 175
4.7.4 指針數(shù)組 176
4.7.5 多維數(shù)組和指向分數(shù)組的指針 177
4.7.6 動態(tài)數(shù)組 180
4.8 題例分析與實現(xiàn) 183
習題4 188
第5章 函數(shù) 192
5.1 典型題例 192
5.2 概述 193
5.2.1 C程序的基本結(jié)構(gòu) 193
5.2.2 函數(shù)分類 195
5.3 函數(shù)的定義 195
5.4 函數(shù)的調(diào)用與返回值 197
5.4.1 函數(shù)調(diào)用的一般形式 197
5.4.2 函數(shù)調(diào)用的方式 197
5.4.3 函數(shù)的返回值 199
5.5 函數(shù)的參數(shù) 200
5.5.1 形式參數(shù)和實際參數(shù) 200
5.5.2 函數(shù)參數(shù) 202
5.5.3 引用傳遞 207
5.6 函數(shù)聲明和函數(shù)原型 209
5.7 函數(shù)的嵌套調(diào)用 211
5.8 函數(shù)的遞歸調(diào)用 212
5.9 變量的作用域 217
5.9.1 局部變量 217
5.9.2 全局變量 218
5.10 變量的存儲類型 220
5.10.1 自動變量 220
5.10.2 靜態(tài)變量 221
5.10.3 寄存器變量 223
5.10.4 外部變量 224
5.10.5 存儲類型小結(jié) 225
5.11 內(nèi)部函數(shù)和外部函數(shù) 225
5.11.1 內(nèi)部函數(shù) 226
5.11.2 外部函數(shù) 226
5.12 指針與函數(shù) 227
5.12.1 返回指針值的函數(shù) 227
5.12.2 指向函數(shù)的指針變量 228
5.12.3 指向函數(shù)的指針變量作為
函數(shù)參數(shù) 231
5.13 多文件程序的運行 232
5.14 題例分析與實現(xiàn) 233
習題5 244
第6章 復雜數(shù)據(jù)類型 250
6.1 結(jié)構(gòu)體 250
6.1.1 案例引入 250
6.1.2 結(jié)構(gòu)體類型定義 251
6.1.3 結(jié)構(gòu)體變量 252
6.1.4 結(jié)構(gòu)體數(shù)組 259
6.1.5 結(jié)構(gòu)體和函數(shù) 263
6.1.6 指針與結(jié)構(gòu)體 266
6.2 鏈表 268
6.2.1 案例引入 269
6.2.2 存儲空間的分配和釋放 269
6.2.3 鏈式存儲結(jié)構(gòu)——鏈表 273
6.2.4 單鏈表 274
6.2.5 循環(huán)鏈表 296
6.2.6 雙向鏈表 297
6.3 共用體 298
6.3.1 共用體類型定義 298
6.3.2 共用體變量 299
6.3.3 共用體應用舉例 300
6.4 枚舉類型 302
6.5 typedef語句 305
習題6 307
第7章 文件 312
7.1 文件概述 312
7.1.1 數(shù)據(jù)流 312
7.1.2 文件 313
7.1.3 文件的操作流程 314
7.1.4 文件和內(nèi)存的交互處理 315
7.2 文件類型的指針 316
7.3 標準輸入/輸出函數(shù) 316
7.3.1 打開文件 317
7.3.2 關閉文件 319
7.3.3 獲取文件的屬性 319
7.3.4 文件的順序讀寫 321
7.3.5 文件的隨機讀寫 337
7.3.6 出錯檢查 341
7.4 系統(tǒng)輸入/輸出函數(shù) 342
習題7 343
第8章 C++面向?qū)ο蟪绦蛟O計 346
8.1 面向?qū)ο蟪绦蛟O計 346
8.1.1 面向?qū)ο蟪绦蛟O計產(chǎn)生的背景 346
8.1.2 類(class)和對象(object) 347
8.1.3 構(gòu)造函數(shù)和析構(gòu)函數(shù) 349
8.1.4 繼承 350
8.1.5 多態(tài)性 350
8.2 C++語言 351
8.2.1 C++語言的特點 352
8.2.2 輸出流(cout)和輸入流(cin) 352
8.2.3 函數(shù)內(nèi)聯(lián)(inline) 355
8.2.4 函數(shù)重載(overloading) 356
8.2.5 引用(reference) 360
8.2.6 C++?語言增加的運算符、
數(shù)據(jù)類型、注釋 362
8.2.7 C++?程序的集成開發(fā)環(huán)境 363
8.3 C#語言 367
8.3.1 C#語言簡介 367
8.3.2 C#語言的特點 367
8.4 基于MFC庫的用戶界面編程基礎 368
習題8 378
第9章 C語言開發(fā)環(huán)境 381
9.1 Visual C++環(huán)境 381
9.1.1 Visual C++ 6.0集成開發(fā)環(huán)境 381
9.1.2 Visual C++ 6.0的使用 384
9.2 Dev-C++環(huán)境 388
9.3 Linux操作系統(tǒng)下C語言程序的
開發(fā)環(huán)境和開發(fā)過程 391
9.3.1 使用vim編輯器編輯源文件 392
9.3.2 使用gcc編譯器編譯源程序 392
9.3.3 運行程序 393
9.4 調(diào)試程序 393
9.4.1 Visual C++環(huán)境中調(diào)試程序 393
9.4.2 Linux環(huán)境中使用gdb調(diào)試程序 397
9.5 手機端編程環(huán)境 400
9.5.1 Android操作系統(tǒng)下的C編譯器 400
9.5.2 iOS操作系統(tǒng)下的C語言編譯器 403
9.6 編譯錯誤信息 406
第10章 復雜工程案例分析與實現(xiàn) 412
10.1 學生信息處理系統(tǒng) 412
10.1.1 需求分析 412
10.1.2 系統(tǒng)設計 412
10.1.3 功能設計 413
10.1.4 小結(jié) 416
10.2 詩詞信息管理系統(tǒng) 416
10.2.1 需求分析 416
10.2.2 系統(tǒng)設計 417
10.2.3 功能設計 417
10.2.4 小結(jié) 425
10.3 西郵中餐廳點餐系統(tǒng) 425
10.3.1 需求分析 426
10.3.2 系統(tǒng)設計 427
10.3.3 功能設計 428
10.3.4 系統(tǒng)實現(xiàn) 432
10.3.5 小結(jié) 441
附錄 442
附錄1 常用字符與ASCII碼對照表 442
附錄2 C語言中的關鍵字表 445
附錄3 C語言中運算符的優(yōu)先級及其
?結(jié)合性一覽表 445
附錄4 C語言的庫函數(shù) 446
附錄5 C語言與匯編語言的混合編程 457
參考文獻 464