前 言
《程序設(shè)計基礎(chǔ)——C語言(第2版)》為《程序設(shè)計基礎(chǔ)——C語言》(ISBN 978-7-302-42444-4)的第2版。在第1版的基礎(chǔ)上,將C語言的編譯環(huán)境從Visual C++ 6.0改為CodeBlocks,修訂了書中的部分錯誤,同時在章節(jié)中增加了二維碼,讀者可以通過掃描二維碼查看對應(yīng)章節(jié)的詳細視頻講解,以便進一步學(xué)習(xí)和掌握書中的內(nèi)容。
程序設(shè)計基礎(chǔ)的入門課程——C 語言是目前廣泛應(yīng)用的程序設(shè)計語言之一,它具有功能強大、使用靈活、可移植性好的特點,同時兼?zhèn)涞图壵Z言和高級語言的優(yōu)點,可用于編寫系統(tǒng)軟件和應(yīng)用軟件。另外,C語言的語法規(guī)則清晰,便于掌握和記憶,因此適合作為大多數(shù)人學(xué)習(xí)計算機程序設(shè)計的入門語言。通過《程序設(shè)計基礎(chǔ)——C語言(第2版)》的學(xué)習(xí),可以加深學(xué)生對計算機系統(tǒng)的認識;建立良好的計算機思維模式;培養(yǎng)學(xué)生模塊化、結(jié)構(gòu)化編程方法與技巧;訓(xùn)練學(xué)生運用計算機分析問題和解決問題的實踐能力;熟練使用CodeBlocks開發(fā)環(huán)境進行C語言編程、調(diào)試、運行等各個環(huán)節(jié)的基本操作,為今后進一步學(xué)習(xí)打下堅實的基礎(chǔ)。
《程序設(shè)計基礎(chǔ)——C語言(第2版)》是作者在多年C語言教學(xué)、研究和實踐積累的基礎(chǔ)上,吸收國內(nèi)外C語言程序設(shè)計課程的教學(xué)理念和方法,依據(jù)C語言程序設(shè)計課程教學(xué)大綱的要求編寫而成的。
《程序設(shè)計基礎(chǔ)——C語言(第2版)》每章都配備了大量的例題講解,所有程序例題均在CodeBlocks平臺中調(diào)試通過。程序例題采用了“問題提出→問題分析→算法分析→程序?qū)崿F(xiàn)→說明歸納”的步驟講解,符合讀者的認知規(guī)律,對例題的重點難點位置強化算法的分析和設(shè)計,有助于讀者建立良好的思維模式,培養(yǎng)讀者分析問題和解決問題的能力。《程序設(shè)計基礎(chǔ)——C語言(第2版)》最后通過一個綜合應(yīng)用案例——學(xué)生學(xué)籍管理系統(tǒng),按照軟件工程的思想,沿著“需求分析→總體設(shè)計→詳細設(shè)計→編碼實現(xiàn)”的軟件開發(fā)流程,完整地開展系統(tǒng)的分析設(shè)計與實現(xiàn),有助于讀者掌握軟件開發(fā)的工作原理和系統(tǒng)方法。
全書共分為10章,具體內(nèi)容如下。
第1章:講述計算機編程語言的發(fā)展過程、在CodeBlocks集成開發(fā)環(huán)境中編寫第一個程序的步驟和方法。
第2、3章:講解數(shù)據(jù)類型、運算符和表達式的使用方法、基本輸入輸出函數(shù)的應(yīng)用。
第4章:講述運用三種基本的控制結(jié)構(gòu)(順序、選擇和循環(huán))進行編程的方法。
第5、6章:講解數(shù)組和字符串的運用、函數(shù)的使用、變量的作用域與生存期、編譯預(yù)處理命令。
第7、8章:講解指針、結(jié)構(gòu)體、共用體的使用方法和鏈表的相關(guān)操作。
第9章:講解文件操作的標準庫函數(shù)的應(yīng)用。
第10章:完整講解一個綜合應(yīng)用案例——學(xué)生學(xué)籍管理系統(tǒng)的分析設(shè)計與實現(xiàn)的全過程。
《程序設(shè)計基礎(chǔ)——C語言(第2版)》中加*的章節(jié)為有一定深度和開放性的選學(xué)內(nèi)容,可以有選擇性地講授或留給學(xué)生自學(xué)。
《程序設(shè)計基礎(chǔ)——C語言(第2版)》具有以下特色。
1. 實例豐富
《程序設(shè)計基礎(chǔ)——C語言(第2版)》不僅理論完備,還通過100多個實例夯實基礎(chǔ),100多個課后習(xí)題鞏固練習(xí),并通過分布在《程序設(shè)計基礎(chǔ)——C語言(第2版)》第6、8和10章的3個綜合應(yīng)用案例——學(xué)生成績統(tǒng)計程序、學(xué)生成績查詢系統(tǒng)、學(xué)生學(xué)籍管理系統(tǒng)全面提升實戰(zhàn)開發(fā)能力。
2. 一題多解
典型實例可采用多種算法來設(shè)計和實現(xiàn),有助于新舊知識對比學(xué)習(xí),融會貫通,啟迪思維,拓展讀者的程序設(shè)計能力和靈活運用能力。
3. 貼心提示
為了便于讀者閱讀,書中還穿插了一些說明、注意和思考等小貼士,體例約定如下。
? “說明”:進一步闡述相關(guān)知識點的應(yīng)用,力求規(guī)范、全面。
? “注意”:指出在學(xué)習(xí)過程中需要特別注意的一些知識點和內(nèi)容,讓讀者加深印象。同時,還為讀者提供建議及解決問題的方法。
? “思考”:讀者可利用課余時間獨立思考、解決提出的問題,進一步深入學(xué)習(xí)訓(xùn)練。
4. 習(xí)題豐富
《程序設(shè)計基礎(chǔ)——C語言(第2版)》每章最后提供了大量習(xí)題,涵蓋了每章知識的重難點內(nèi)容,題型靈活多樣,包括選擇題、填空題、閱讀程序填空題及編程題,方便讀者課后鞏固練習(xí)。
《程序設(shè)計基礎(chǔ)——C語言(第2版)》可作為高等學(xué)校各相關(guān)專業(yè)“程序設(shè)計基礎(chǔ)”“C語言程序設(shè)計”課程的教材,也可作為程序開發(fā)人員的培訓(xùn)用書,還可作為全國計算機等級考試、編程愛好者的學(xué)習(xí)參考用書。
《程序設(shè)計基礎(chǔ)——C語言(第2版)》還特別為任課教師免費提供整套教學(xué)資源(教學(xué)視頻資源、電子課件、全部程序源代碼和習(xí)題參考答案等),請從http://www.tupwk.com.cn/downpage下載!冻绦蛟O(shè)計基礎(chǔ)——C語言(第2版)》還配有相關(guān)上機環(huán)節(jié)指導(dǎo)書《程序設(shè)計基礎(chǔ)上機指導(dǎo)——C語言》(ISBN 978-7-302-42445-1),建議與《程序設(shè)計基礎(chǔ)——C語言(第2版)》配套使用。
《程序設(shè)計基礎(chǔ)——C語言(第2版)》的統(tǒng)稿工作由金蘭負責(zé),第1、2、3、4、5、7、9、10章及附錄由金蘭編寫,第6、8章由梁潔編寫,張碩和陳蘇紅老師參與了部分的改版校驗工作。在《程序設(shè)計基礎(chǔ)——C語言(第2版)》的編寫過程中,武昌首義學(xué)院的領(lǐng)導(dǎo)們給予了諸多的鼓勵和關(guān)心。書稿中的例題和習(xí)題程序的調(diào)試過程中,楊景瑩和楊明等做了大量工作!冻绦蛟O(shè)計基礎(chǔ)——C語言(第2版)》在編寫過程中得到了許多同行的幫助,還參閱了許多相關(guān)資料,在此衷心地感謝。因編者水平有限,書中難免會有疏漏和錯誤之處,懇請廣大讀者給予指正。
服務(wù)郵箱:476371891@qq.com。
編 者
目 錄
第1章 C語言概述 1
1.1 計算機編程語言 1
1.1.1 機器語言 1
1.1.2 匯編語言 2
1.1.3 高級語言 3
1.2 第一個C程序 5
1.3 C程序的上機步驟 7
1.3.1 CodeBlocks的安裝 7
1.3.2 新建工程 9
1.3.3 多工程切換 13
1.3.4 單步調(diào)試程序 14
課后習(xí)題1 19
第2章 數(shù)制、基本數(shù)據(jù)類型 20
2.1 整數(shù)數(shù)制 20
2.1.1 十進制數(shù) 20
2.1.2 二進制數(shù) 20
2.1.3 八進制數(shù) 22
2.1.4 十六進制數(shù) 22
2.2 C程序常見符號分類 24
2.3 數(shù)據(jù)類型 25
2.3.1 數(shù)據(jù)類型的引入 25
2.3.2 類型修飾符 26
*2.3.3 C99標準中的新增類型 28
2.4 常量 28
2.4.1 整型常量 29
2.4.2 實型常量 29
2.4.3 字符常量 30
2.4.4 字符串常量 31
2.4.5 符號常量 32
2.4.6 枚舉常量 32
2.5 變量 33
2.5.1 變量的聲明與初始化 33
2.5.2 const類型修飾符 34
2.5.3 變量的類型 34
課后習(xí)題2 38
第3章 運算符和表達式、輸入輸出 40
3.1 算術(shù)運算符 40
3.2 賦值運算符 42
3.3 增1、減1運算符 43
3.4 關(guān)系運算符 44
3.5 邏輯運算符 45
3.6 條件運算符 46
3.7 強制類型轉(zhuǎn)換運算符 47
3.8 逗號運算符 47
3.9 位運算符 48
3.10 sizeof運算符 50
3.11 類型轉(zhuǎn)換 51
3.12 運算符的優(yōu)先級和結(jié)合性 53
3.13 基本輸入輸出函數(shù) 54
3.13.1 字符輸入輸出函數(shù) 54
3.13.2 格式化輸入輸出函數(shù) 56
課后習(xí)題3 67
第4章 控制結(jié)構(gòu) 71
4.1 算法及其描述方法 71
4.1.1 算法的概念 71
4.1.2 算法的描述方法 72
4.2 順序結(jié)構(gòu) 74
4.3 選擇結(jié)構(gòu) 76
4.3.1 if語句 76
4.3.2 switch語句 86
4.4 循環(huán)結(jié)構(gòu) 93
4.4.1 while語句 94
4.4.2 do…while語句 97
4.4.3 for語句 99
4.4.4 三種循環(huán)控制語句的應(yīng)用舉例 102
4.4.5 循環(huán)的嵌套 107
4.4.6 提前結(jié)束循環(huán) 110
4.5 綜合應(yīng)用舉例 113
課后習(xí)題4 120
第5章 數(shù)組 125
5.1 一維數(shù)組 125
5.1.1 一維數(shù)組的定義 125
5.1.2 一維數(shù)組的引用 126
5.1.3 一維數(shù)組的初始化 126
5.1.4 一維數(shù)組程序舉例 127
5.2 二維數(shù)組 136
5.2.1 二維數(shù)組的定義 136
5.2.2 二維數(shù)組的引用 137
5.2.3 二維數(shù)組的初始化 138
5.2.4 二維數(shù)組程序舉例 138
5.3 字符數(shù)組與字符串 142
5.3.1 字符數(shù)組的初始化 142
5.3.2 字符數(shù)組的輸入/輸出 144
5.3.3 字符串處理函數(shù) 145
5.3.4 字符數(shù)組和字符串程序舉例 148
課后習(xí)題5 154
第6章 函數(shù) 158
6.1 函數(shù)的分類和定義 161
6.1.1 函數(shù)的分類 161
6.1.2 函數(shù)的定義 162
6.2 函數(shù)的調(diào)用、參數(shù)和返回值 163
6.3 函數(shù)的聲明 164
6.4 函數(shù)的嵌套調(diào)用 168
*6.5 函數(shù)的遞歸調(diào)用 169
6.5.1 遞歸問題的提出 169
6.5.2 遞歸函數(shù) 171
6.6 數(shù)組作為函數(shù)參數(shù) 174
6.6.1 一維數(shù)組作為函數(shù)參數(shù) 174
6.6.2 二維數(shù)組作為函數(shù)參數(shù) 176
6.7 變量的作用域與生存期 178
6.7.1 局部變量 178
6.7.2 全局變量 179
6.7.3 變量的存儲類別 180
6.7.4 小結(jié) 184
6.8 內(nèi)部函數(shù)和外部函數(shù) 185
6.8.1 內(nèi)部函數(shù) 185
6.8.2 外部函數(shù) 186
6.9 預(yù)處理命令 188
6.9.1 宏定義 188
6.9.2 文件包含 192
6.9.3 條件編譯 193
6.10 綜合應(yīng)用舉例 194
課后習(xí)題6 201
第7章 指針 206
7.1 內(nèi)存、地址和內(nèi)容 206
7.2 指針與指針變量 207
7.2.1 指針變量的定義 207
7.2.2 指針變量的引用 208
7.2.3 指針變量作為函數(shù)參數(shù) 210
7.3 指針與數(shù)組 213
7.3.1 指向一維數(shù)組的指針 213
7.3.2 有關(guān)指針的運算 216
7.3.3 一維數(shù)組的指針作為函數(shù)參數(shù) 217
7.3.4 指向二維數(shù)組的指針 222
7.3.5 二維數(shù)組的指針作為函數(shù)參數(shù) 225
7.4 指針與字符串 227
7.4.1 指向字符串的指針變量 227
7.4.2 指向字符串的指針作為函數(shù)參數(shù) 228
7.4.3 字符數(shù)組與字符串指針變量的區(qū)別 231
7.5 指針與函數(shù) 231
7.5.1 返回指針值的函數(shù) 232
*7.5.2 指向函數(shù)的指針 233
7.6 指針數(shù)組 234
*7.7 指向指針的指針 237
*7.8 帶參數(shù)的函數(shù)main() 239
7.9 動態(tài)內(nèi)存分配 241
7.9.1 動態(tài)內(nèi)存分配函數(shù) 241
*7.9.2 動態(tài)內(nèi)存分配與變長數(shù)組 244
*7.10 ANSI C的類型限定詞const 245
課后習(xí)題7 247
第8章 結(jié)構(gòu)體與共用體 253
8.1 結(jié)構(gòu)體問題的引出 253
8.2 結(jié)構(gòu)體類型和結(jié)構(gòu)體類型變量 255
8.2.1 結(jié)構(gòu)體類型的聲明 255
8.2.2 結(jié)構(gòu)體類型變量的定義 255
8.2.3 結(jié)構(gòu)體的嵌套 257
8.3 結(jié)構(gòu)體類型變量的引用和初始化 258
8.4 結(jié)構(gòu)體數(shù)組 260
8.5 結(jié)構(gòu)體指針 263
8.5.1 指向結(jié)構(gòu)體類型變量的指針 263
8.5.2 指向結(jié)構(gòu)體數(shù)組的指針 264
8.6 結(jié)構(gòu)體與函數(shù) 266
8.7 結(jié)構(gòu)體綜合應(yīng)用實例 269
8.8 共用體 278
8.8.1 問題的引出 278
8.8.2 聲明共用體類型和定義共用體類型的變量 279
8.8.3 共用體成員的引用 280
8.9 枚舉類型 281
8.10 typedef 283
*8.11 鏈表 284
8.11.1 問題的引出 284
8.11.2 鏈表的定義和特點 285
8.11.3 鏈表的創(chuàng)建 286
8.11.4 鏈表的刪除操作 290
8.11.5 鏈表的插入操作 292
課后習(xí)題8 296
第9章 文件 304
9.1 文件概述 304
9.1.1 什么是文件 304
9.1.2 文件名 305
9.1.3 文件的分類 305
9.1.4 文件緩沖區(qū) 306
9.1.5 文件指針 306
9.2 文件的打開與關(guān)閉 307
9.2.1 用fopen()函數(shù)打開文件 307
9.2.2 用fclose()函數(shù)關(guān)閉文件 309
9.3 文件的讀寫 309
9.3.1 讀/寫字符函數(shù) 309
9.3.2 讀/寫字符串函數(shù) 311
9.3.3 格式化讀/寫函數(shù) 313
9.3.4 讀/寫數(shù)據(jù)塊函數(shù) 315
9.4 文件的定位 322
9.4.1 移動文件指針 322
9.4.2 獲取文件讀寫位置 324
9.5 出錯檢測 324
課后習(xí)題9 325
第10章 綜合應(yīng)用案例——學(xué)生學(xué)籍管理系統(tǒng) 328
10.1 需求分析 328
10.2 總體設(shè)計 329
10.2.1 系統(tǒng)總體設(shè)計 329
10.2.2 數(shù)據(jù)結(jié)構(gòu) 329
10.3 詳細設(shè)計 330
10.3.1 系統(tǒng)包含的函數(shù) 330
10.3.2 各個功能模塊的軟件功能 330
10.3.3 各個功能模塊的程序流程圖和算法描述 331
10.4 編碼實現(xiàn) 336
10.5 運行結(jié)果 343
課后習(xí)題10 346
參考文獻 349
附錄A C關(guān)鍵字 350
附錄B C運算符的優(yōu)先級和結(jié)合性 351
附錄C ASCII碼字符表 352
附錄D 常用的ANSI C標準庫函數(shù) 356
D.1 數(shù)學(xué)函數(shù) 356
D.2 字符處理函數(shù) 357
D.3 字符串處理函數(shù) 357
D.4 動態(tài)內(nèi)存分配函數(shù) 359
D.5 緩沖文件系統(tǒng)的輸入/輸出函數(shù) 359
D.6 其他常用函數(shù) 361