本書共分3篇:初級篇(C語言基礎知識及程序設計初步)、提高篇(C語言中的復雜數據類型與高級編程技術)和實訓篇(基于C語言面向過程的項目實訓)。
本書在內容編排上對C語言的知識不求全面系統,但求有理論、有深度、有層次,使其真正能夠承擔起*一門專業軟件課程的重任,對大一新生有一定的專業引導性;特別是實訓篇的內容在目前已有教材中未曾見到過。
本書中的所有程序都是在VC++6.0環境下編譯調試通過的。本著少而精的原則,全書版面清晰、結構緊湊,知識信息含量高。本書可以作為高校(本科、專科)計算機及其相關專業的教材,也可以作為非計算機專業的教學參考書、培訓班教材和自學教材。
在編寫本書之前,本書作者已在高校從事多年的“高級語言(C、C++、C#)程序設計”、“數據結構”、“面向對象程序設計”及“軟件項目開發”等計算機專業軟件類課程的教學及研究工作。當站在軟件工程及軟件項目開發的高度,回過頭來重新審視C語言,對于由該語言來承擔計算機專業本科生軟件系列第一門課程的重任,有了更深入的理解。但目前已有的關于C語言的教材大多只羅列了C語言的語法和應用實例,而不重視編程能力的培養,故組織編寫了本書,旨在對C語言的知識體系重新梳理整合,在內容安排及教學深度等方面滿足本科計算機及相關專業“C語言程序設計”課程的教學目標,使學生從專業的角度重視該課程并為后續課程的學習打下堅實的基礎。
本書共分3篇,即初級篇(C語言基礎知識及程序設計初步)、提高篇(C語言中的復雜數據類型與高級編程技術)和實訓篇(基于C語言面向過程的項目實訓)。
初級篇(第1~4章)介紹C語言的入門基礎。我們將C語言的語法、基本數據類型、結構化編程思想、3種控制結構和數組都歸屬于C語言的入門基礎。初學者通過本篇的學習,能夠掌握C語言中最基礎的主要知識點,有能力編制出結構清晰、代碼規范的小程序,獲得學習的自信。在C語言的學習過程中,學習并掌握數組是重中之重,數組也是初學者認識數據結構的起點,所以我們將數組歸納到了初級篇中。
提高篇(第5~8章)主要涉及函數、指針和結構體等知識。介紹利用函數組織程序結構,實現模塊化設計的方法;利用數組及結構體描述大量數據,使用鏈表組織數據,使學習者有能力完成較大規模的程序。“指針”讓C語言體現出緊湊和靈活的特點,這一點在語言中至關重要。有了數組、指針和函數的綜合使用,C語言才更加鮮活。在提高篇中還將學習一些經典算法的思想和實現,使學生進一步地掌握調試程序的方法,能夠在一定程度上掌握部分C語言的高級編程技術。
實訓篇(第9~12章)是我們在這套教材中特別設計的“項目實訓”部分,希望能夠規范教師的教學指導與要求,通過一周的項目實訓,使學生理論聯系實際及編程的能力均能得到良好的訓練。實訓項目的目標是設計一個模擬的“銀行儲蓄業務系統”。學生在老師的指導下,學會利用C語言解決實際問題;幫助初學者真正提高程序設計能力,并初步接觸軟件工程的思想,做出一個小規模的綜合性的應用項目。
本書在內容編排上對C語言的知識不求全面系統,但求有理論、有深度、有層次,使其真正能夠承擔起第一門專業軟件課程的重任,對大一新生有一定的專業引導性;特別是實訓篇的內容在目前已有教材中未曾見到過。
本書可以作為高校(本科、專科)計算機及其相關專業的教材,也可以作為非計算機專業的教學參考書、培訓班教材和自學教材。
本書由河北建筑工程學院丁學鈞、溫秀梅任主編并完成統稿,宋淑彩、高麗婷任副主編。參加編寫者有:李耀輝(第1~2章),趙巍(第3章),付江龍(第4章、附錄A~D),宋淑彩(第5章),高麗婷(第6章),溫秀梅(第7章),龐慧(第8章),董顥霞(第9章),丁學鈞(第10~12章、附錄E)。參加本書部分編寫工作的還有李建華、周麗莉等。
在本書的大綱討論和分工編寫過程中,我們始終相互幫助,彼此鼓勵,是一次非常難忘的經歷。另外,本書在編寫過程中引用了許多文獻,謹向有關專家學者致以誠摯的謝意。
感謝您選擇本書。由于我們的水平有限,書中難免有疏漏、錯誤和不妥之處,懇請廣大讀者和專家提出批評和修改意見。對于選用本書的教師,我們提供電子版課件,可從清華大學出版社網站下載。
編者
2016年9月
C語言程序設計教程與項目實訓
前言
初級篇 C語言基礎知識及程序設計初步
第1章 緒論 3
1.1 程序設計概述 3
1.1.1 程序設計的發展歷程 3
1.1.2 結構化程序設計 4
1.1.3 面向對象程序設計 5
1.1.4 程序設計語言 6
1.1.5 語言處理程序 8
1.1.6 C語言簡介 8
1.2 算法及算法的表示 9
1.2.1 算法的概念 9
1.2.2 流程圖表示法 9
1.2.3 簡單算法設計 11
1.3 C語言基礎 13
1.3.1 字符集 13
1.3.2 標識符 13
1.3.3 關鍵字 14
1.3.4 運算符 14
1.3.5 分隔符 14
1.3.6 空白符 15
1.3.7 C程序的基本結構 15
1.4 上機步驟與實驗指導 18
1.4.1 程序的編輯、編譯、運行和調試 18
1.4.2 Visual C++集成開發環境 19
1.4.3 編輯、編譯、運行和調試程序 19
第2章 基本數據類型 24
2.1 數據類型概述 24
2.2 運算符和表達式 25
2.2.1 常量 25
2.2.2 變量 25
2.2.3 整型 26
2.2.4 實型 27
2.2.5 字符型 28
2.2.6 void類型 29
2.2.7 運算符概述 30
2.2.8 賦值運算符和賦值表達式 30
2.2.9 算術運算符和算術表達式 32
2.2.10 關系運算符和關系表達式 34
2.2.11 邏輯運算符和邏輯表達式 34
2.2.12 條件運算符和條件表達式 35
2.2.13 逗號運算符和逗號表達式 35
2.2.14 類型轉換 36
2.3 數據的輸入與輸出 37
2.3.1 字符輸入輸出函數 38
2.3.2 格式輸出函數printf 39
2.3.3 格式輸入函數scanf 41
2.3.4 簡單程序舉例 43
習題 46
第3章 3種程序控制結構 48
3.1 順序結構 48
3.2 選擇結構 49
3.2.1 if語句實現選擇結構 49
3.2.2 switch語句實現選擇結構 58
3.3 循環結構 61
3.3.1 while語句 62
3.3.2 do…while語句 64
3.3.3 for語句 65
3.3.4 break語句和continue語句 67
3.3.5 循環嵌套 69
3.4 程序結構綜合舉例 71
習題 77
第4章 復雜數據類型初探——數組 79
4.1 復雜數據類型概述 79
4.2 一維數組 79
4.2.1 一維數組的定義 79
4.2.2 一維數組元素的引用 80
4.2.3 一維數組的初始化 81
4.2.4 一維數組程序舉例 82
4.3 二維數組 85
4.3.1 二維數組的定義 85
4.3.2 二維數組元素的引用 85
4.3.3 二維數組的初始化 86
4.3.4 二維數組程序舉例 87
4.4 字符串與數組 90
4.4.1 字符數組的定義 90
4.4.2 字符數組的初始化 90
4.4.3 字符數組的使用 92
4.4.4 字符串處理函數 93
4.4.5 字符數組程序舉例 95
習題 97
提高篇 C語言中的復雜數據類型與高級編程技術
第5章 函數 101
5.1 函數的定義 101
5.2 函數的調用 104
5.2.1 函數原型聲明 104
5.2.2 函數的調用 106
5.2.3 參數傳遞機制 107
5.2.4 函數返回值 111
5.3 函數的嵌套調用 112
5.4 遞歸函數 113
5.5 變量的作用域 117
5.5.1 局部作用域 118
5.5.2 全局作用域 118
5.6 變量的存儲方式和生存期 121
習題 127
第6章 指針 129
6.1 指針的基本概念 129
6.1.1 地址和指針的概念 129
6.1.2 指針變量的定義 130
6.1.3 指針變量運算符 131
6.1.4 指針的運算 135
6.2 指針與數組 138
6.2.1 指向數組的指針 138
6.2.2 指針與字符數組 141
6.2.3 多級指針與指針數組 144
6.2.4 指針與多維數組 149
6.2.5 數組指針 153
6.3 指針與函數 154
6.3.1 指針作為函數參數 154
6.3.2 指針作為函數的返回值——指針函數 157
6.3.3 指向函數的指針——函數指針 158
6.4 動態內存分配與指向它的指針變量 162
習題 164
第7章 編譯預處理 165
7.1 宏定義 165
7.1.1 無參宏 166
7.1.2 有參宏 168
7.2 文件包含 171
7.3 條件編譯 172
習題 175
第8章 復雜數據類型——結構體、共用體和枚舉類型 176
8.1 結構體類型 176
8.2 結構體變量 178
8.2.1 結構體變量的定義 178
8.2.2 結構體變量的初始化 180
8.2.3 結構體變量成員的引用 181
8.3 結構體數組 184
8.3.1 結構體數組的定義 184
8.3.2 結構體數組的初始化 185
8.3.3 結構體數組應用舉例 185
8.4 結構體指針 186
8.4.1 指向結構體變量的指針 187
8.4.2 指向結構體數組的指針 188
8.4.3 用結構體變量和結構體指針作為函數參數 189
8.5 用結構體指針處理鏈表 191
8.5.1 鏈表概述 191
8.5.2 創建單鏈表 193
8.5.3 輸出鏈表 196
8.5.4 鏈表的刪除操作 196
8.5.5 鏈表的插入操作 198
8.5.6 鏈表的綜合操作 200
8.6 共用體類型 202
8.6.1 共用體的概念 202
8.6.2 共用體類型和共用體類型變量的定義 202
8.6.3 共用體成員的引用方式 204
8.6.4 共用體類型的特點和應用 204
8.7 枚舉類型 207
8.7.1 枚舉類型及枚舉變量的定義 207
8.7.2 枚舉元素的引用 208
習題 209
實訓篇 基于C語言面向過程的項目實訓
第9章 項目實訓概述及數據存儲基礎 213
9.1 概述 213
9.2 最基本的數據存儲技術——文件 213
9.2.1 概述 213
9.2.2 文件類型 214
9.2.3 文件指針 214
9.2.4 文件的打開與關閉 214
9.2.5 文件的讀寫 215
9.2.6 文件的隨機讀寫 218
第10章 需求分析與功能模塊設計 220
10.1 需求分析 220
10.2 功能模塊設計 220
10.2.1 功能模塊劃分 220
10.2.2 概要設計 221
第11章 詳細設計與實現 223
11.1 概述 223
11.2 登錄業務模塊功能及主函數實現 223
11.2.1 系統登錄及主函數功能流程圖 223
11.2.2 代碼實現步驟 223
11.3 系統菜單功能實現 226
11.3.1 功能需求描述 226
11.3.2 代碼實現步驟 226
11.4 開戶功能實現 227
11.4.1 功能需求描述 227
11.4.2 代碼實現步驟 227
11.5 存款功能與取款功能的實現 231
11.5.1 存款功能需求描述 231
11.5.2 存款代碼實現步驟 231
11.5.3 取款功能需求描述 232
11.6 文件的讀寫操作 234
11.6.1 文件的讀寫功能需求描述 234
11.6.2 文件的讀寫功能代碼實現步驟 234
11.6.3 與讀寫文件相關的其他函數 235
11.7 查詢功能實現 236
11.7.1 查詢功能需求描述 236
11.7.2 查詢功能代碼實現步驟 237
11.8 銷戶功能實現 241
11.8.1 銷戶功能需求描述 241
11.8.2 銷戶功能代碼實現步驟 241
第12章 項目測試與總結 244
12.1 項目測試 244
12.1.1 單元測試 244
12.1.2 集成測試 245
12.2 項目總結 246
12.2.1 實訓目標與要求 246
12.2.2 實訓過程與步驟 247
12.2.3 實訓項目總結報告撰寫要求 247
12.3 系統局限性分析與功能擴展的考慮 247
12.3.1 系統局限性分析 247
12.3.2 如何進行功能擴展的考慮 248
附錄A 標準字符ASCII表 251
附錄B 運算符和結合性 253
附錄C 常見庫函數 255
附錄D 模擬考試題 261
模擬考試題一 261
模擬考試題一參考答案 271
模擬考試題二 272
模擬考試題二參考答案 283
附錄E 參考課時安排 285
參考文獻 286
C語言程序設計教程與項目實訓