本書針對計算機專業(yè)新生和對程序設(shè)計感興趣的初學(xué)者進行編寫,全書分為10章,內(nèi)容包括C語言概述、數(shù)據(jù)類型、運算符和表達式、數(shù)據(jù)的輸入和輸出、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)、數(shù)組、函數(shù)、指針、結(jié)構(gòu)體、共用體、枚舉與鏈表,以及文件操作。 本書注重理論與實踐相結(jié)合,同時兼顧激發(fā)讀者的學(xué)習(xí)興趣,在教學(xué)內(nèi)容上采用了沉浸閱讀 啟發(fā)思考 知識點鞏固 一例多解 實戰(zhàn)體驗的設(shè)計方法,每一個章節(jié)都有先導(dǎo)或預(yù)備知識,由此引入本章要講解的具體內(nèi)容,同時在關(guān)鍵節(jié)點提出問題,啟發(fā)讀者思考,并及時通過重點提示、題目鞏固和實例分析等加深讀者對知識點的理解,最后通過實戰(zhàn)練習(xí)鍛煉和培養(yǎng)讀者的計算思維。每章結(jié)尾都附有大量習(xí)題,使讀者能快速有效地復(fù)習(xí)和掌握章節(jié)知識,提高解決實際問題的能力。 本書配套有PPT教學(xué)課件、全部示例和實戰(zhàn)程序的源碼,適合作為大學(xué)計算機專業(yè)教材、非計算機專業(yè)的公共課教材、全國計算機等級考試參考書,以及對程序設(shè)計感興趣的讀者的自學(xué)用書。
(1)盡量避免枯燥地羅列和介紹知識點,語言嚴(yán)謹(jǐn)中略帶風(fēng)趣,將知識點與現(xiàn)實生活中的場景相結(jié)合,更有利于加深讀者對知識點的理解和掌握。
(2)設(shè)計和使用問題來了、小技巧、注意和漲知識等模塊,在讀者閱讀和自學(xué)過程中,適時地進行引導(dǎo),從而達到啟發(fā)思考、強調(diào)重點和拓展知識的目的。
(3)為重點知識設(shè)計了例題,并對經(jīng)典題目和實例采用一題多解的方式。同時,針對初學(xué)者容易犯的錯誤進行用例測試與結(jié)果分析。
(4)每章結(jié)尾都附有大量習(xí)題,使讀者能快速有效地復(fù)習(xí)和掌握章節(jié)知識,提高解決實際問題的能力。
程序設(shè)計語言是計算機相關(guān)專業(yè)的必修課程,目前大多數(shù)院校選擇C語言作為程序設(shè)計語言課程的講授內(nèi)容。C語言采用結(jié)構(gòu)化程序設(shè)計,既具備高級語言的特點,又能對硬件進行操作,因此既可以用于編寫應(yīng)用軟件,也可以編寫系統(tǒng)軟件,是廣受歡迎的程序設(shè)計語言之一。其實,各種語言間的語法大同小異,都要遵守一些基本規(guī)則,所以當(dāng)掌握了一門程序設(shè)計語言的語法后再學(xué)習(xí)其他程序設(shè)計語言的語法,就相對容易。因此,程序設(shè)計語言課程的目的在于幫助學(xué)生理解計算機進行工作的基本原理以及進行程序設(shè)計的基本方法,培養(yǎng)學(xué)生的計算思維,為后續(xù)課程的學(xué)習(xí)奠定基礎(chǔ)。
本書針對計算機相關(guān)專業(yè)新生或?qū)Τ绦蛟O(shè)計感興趣的初學(xué)者的特點進行編寫,教學(xué)內(nèi)容與素材均由一線教師積累多年教學(xué)經(jīng)驗總結(jié)而成。希望通過本書的學(xué)習(xí),能使讀者了解高級程序設(shè)計語言的組成與特點、程序的設(shè)計思路與編寫技巧,學(xué)習(xí)并掌握C程序在數(shù)據(jù)表達、數(shù)據(jù)結(jié)構(gòu)、模塊處理、流程控制等方面的相關(guān)知識,能夠掌握一些簡單的、典型的算法,具有一定的閱讀程序和設(shè)計程序的能力,為后續(xù)課程的學(xué)習(xí)打好基礎(chǔ)。
全書分為10章,內(nèi)容包括C語言概述、數(shù)據(jù)類型、運算符和表達式、數(shù)據(jù)的輸入和輸出、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)、數(shù)組、函數(shù)、指針、結(jié)構(gòu)體、共用體、枚舉與鏈表,以及文件操作。
本書注重理論與實踐相結(jié)合,同時兼顧激發(fā)讀者的學(xué)習(xí)興趣,在教學(xué)內(nèi)容上采用了沉浸閱讀 啟發(fā)思考 知識點鞏固 一例多解 實戰(zhàn)體驗的設(shè)計方法,每一個章節(jié)都有先導(dǎo)或預(yù)備知識,由此引入本章要講解的具體內(nèi)容,同時在關(guān)鍵節(jié)點提出問題,啟發(fā)讀者思考,并及時通過重點提示、題目鞏固、實例分析和知識擴展等加深讀者對知識點的理解,最后通過大量的實戰(zhàn)練習(xí)鍛煉和培養(yǎng)讀者的計算思維。每章結(jié)尾都附有各種類型的習(xí)題,使讀者能快速有效地復(fù)習(xí)和掌握章節(jié)知識,提高解決實際問題的能力。
基于獨特的教學(xué)內(nèi)容設(shè)計方法,本書的主要特色如下。
(1) 盡量避免枯燥地羅列和介紹知識點,語言嚴(yán)謹(jǐn)中略帶風(fēng)趣,將知識點與現(xiàn)實生活中的場景相結(jié)合,更有利于加深讀者對知識點的理解和掌握。例如,在學(xué)習(xí)數(shù)組時,先探討現(xiàn)實生活中若有團隊入住賓館,應(yīng)以何種方式安排住宿才能更方便也更容易記住每位團員的房號,再由此推斷出為什么數(shù)組名可以代表首元素地址,以及為什么數(shù)組下標(biāo)要從0開始進行編號的原因。
(2) 設(shè)計和使用問題來了小技巧注意和長知識等模塊,在讀者閱讀和自學(xué)過程中,適時地進行引導(dǎo),從而達到啟發(fā)思考、強調(diào)重點和拓展知識的目的。
(3) 為重點知識設(shè)計例題,并對經(jīng)典題目和實例采用一題多解的方式。同時,針對初學(xué)者容易犯的錯誤進行用例測試與結(jié)果分析,一是避免再犯類似犯錯,二是如果今后在編程過程中出現(xiàn)類似情況,也能快速找到問題所在。例如,在第4章的分段函數(shù)編程示例中,先借甲、乙、丙3位同學(xué)之手設(shè)計了3種不同方案,再通過測試用例的運行結(jié)果分析出丙方案的錯誤原因,最后總結(jié)了編寫多分支題目時可以采用的方法以及需要避免的問題。
(4) 為每章提供大量實戰(zhàn)題,部分章節(jié)的理論與實戰(zhàn)篇幅的占比超過了1∶2。每道實戰(zhàn)題都包括問題分析、程序設(shè)計和程序?qū)崿F(xiàn)3部分,并且選題領(lǐng)域覆蓋面較廣,可以讓讀者舉一反三。例如,第7章中,以判斷用戶輸入的數(shù)是否是對稱素數(shù)為例,先分析了用戶既可以采用字符串形式也可以采用整數(shù)形式讀取數(shù)據(jù),再針對不同形式討論如何以模塊化的方式進行程序設(shè)計,最后將每個模塊拆分成不同的實戰(zhàn)題,并進行相應(yīng)擴展,例如將整數(shù)的字符串形式與整數(shù)形式的相互轉(zhuǎn)換擴展為K進制數(shù)的轉(zhuǎn)換等。
為方便讀者學(xué)習(xí),本書附有配套PPT教學(xué)課件、本書全部示例和實戰(zhàn)程序的源碼,以及課后習(xí)題答案,方便學(xué)校教學(xué)和讀者自學(xué)。
因編者水平有限,不足之處在所難免,懇請讀者批評指正。
編者2023年1月
第1章C語言概述1
1.1計算機與程序設(shè)計語言1
1.1.1馮·諾依曼結(jié)構(gòu)1
1.1.2程序設(shè)計2
1.1.3程序設(shè)計語言3
1.2C語言的特點4
1.3IDE的安裝5
1.3.1下載Code::Blocks6
1.3.2安裝Code::Blocks6
1.3.3運行軟件7
1.3.4新建和運行項目8
1.3.5打開已有項目10
1.4C程序基本框架介紹10
1.5基本的編程原則13
1.6編程實戰(zhàn)14
習(xí)題17
第2章數(shù)據(jù)類型、運算符和表達式19
2.1預(yù)備知識19
2.1.1位、字節(jié)、字與字長19
2.1.2C程序與內(nèi)存20
2.2數(shù)據(jù)類型21
2.2.1數(shù)據(jù)類型的劃分21
2.2.2不同數(shù)據(jù)類型的內(nèi)存占用與數(shù)據(jù)編碼22
2.3常量29
2.3.1整型常量29
2.3.2浮點型常量30
2.3.3字符型常量31
2.3.4字符串常量32
2.3.5符號常量33
2.4變量34
2.5常變量36
2.6關(guān)鍵字與標(biāo)識符37
2.6.1關(guān)鍵字37
2.6.2標(biāo)識符38
2.7運算符38
2.7.1算術(shù)運算符39
2.7.2關(guān)系運算符40
2.7.3邏輯運算符41
2.7.4位運算符42
2.7.5賦值(復(fù)合賦值)運算符43
2.7.6其他運算符44
2.8表達式45
2.8.1運算符的優(yōu)先級和結(jié)合方向45
2.8.2自動類型轉(zhuǎn)換47
2.8.3對數(shù)據(jù)溢出的處理48
2.9數(shù)學(xué)函數(shù)48
2.10C語句49
2.11編程實戰(zhàn)51
習(xí)題53
新編C語言程序設(shè)計目錄第3章數(shù)據(jù)的輸入和輸出56
3.1預(yù)備知識56
3.1.1緩沖區(qū)56
3.1.2緩沖區(qū)的類型56
3.1.3讀取緩沖區(qū)的數(shù)據(jù)57
3.1.4緩沖區(qū)的刷新57
3.2格式化輸入函數(shù)scanf()59
3.2.1scanf()的使用形式59
3.2.2scanf()的格式描述59
3.2.3scanf()的變量地址列表64
3.3格式化輸出函數(shù)printf()65
3.3.1printf()的使用形式65
3.3.2printf()的格式描述65
3.4單字符I/O函數(shù)68
3.4.1單字符輸入函數(shù)getchar()68
3.4.2單字符輸出函數(shù)putchar()68
3.5編程實戰(zhàn)68
習(xí)題70
第4章選擇結(jié)構(gòu)74
4.1預(yù)備知識74
4.1.1算法的特點74
4.1.2算法的描述方法75
4.2if選擇結(jié)構(gòu)77
4.2.1if單分支選擇結(jié)構(gòu)77
4.2.2if…else雙分支選擇結(jié)構(gòu)79
4.2.3if語句的嵌套81
4.3switch結(jié)構(gòu)85
4.4編程實戰(zhàn)87
習(xí)題90
第5章循環(huán)結(jié)構(gòu)94
5.1循環(huán)的相關(guān)概念94
5.1.1循環(huán)結(jié)構(gòu)94
5.1.2循環(huán)條件的設(shè)計95
5.1.3循環(huán)體的設(shè)計95
5.1.4循環(huán)效率的分析96
5.2for循環(huán)97
5.3while循環(huán)99
5.4do…while循環(huán)100
5.5循環(huán)的跳轉(zhuǎn)101
5.6循環(huán)的嵌套104
5.7編程實戰(zhàn)105
5.7.1數(shù)據(jù)統(tǒng)計類105
5.7.2具有特質(zhì)的數(shù)的判斷114
5.7.3字符類的處理120
5.7.4打印圖形122
5.7.5窮舉問題126
習(xí)題128
第6章數(shù)組133
6.1預(yù)備知識133
6.1.1順序存儲與下標(biāo)133
6.1.2團隊名的作用134
6.1.3訪問團隊成員134
6.2數(shù)組的定義、存儲與元素的引用135
6.2.1數(shù)組的定義135
6.2.2數(shù)組的存儲與元素的引用136
6.3數(shù)組的初始化140
6.4輸入和輸出數(shù)組元素142
6.5編程實戰(zhàn)144
6.5.1數(shù)據(jù)統(tǒng)計類144
6.5.2數(shù)組的排序148
6.5.3有序插入153
6.5.4查找數(shù)據(jù)155
6.5.5刪除數(shù)據(jù)156
6.5.6逆序存儲158
6.5.7字符串處理158
習(xí)題170
第7章函數(shù)176
7.1結(jié)構(gòu)化程序設(shè)計與函數(shù)176
7.1.1結(jié)構(gòu)化程序設(shè)計176
7.1.2函數(shù)177
7.2函數(shù)的定義、聲明與調(diào)用179
7.2.1函數(shù)的定義179
7.2.2函數(shù)的聲明與調(diào)用181
7.3參數(shù)傳遞和返回值184
7.3.1參數(shù)傳遞184
7.3.2返回值188
7.4作用域與存儲類別190
7.4.1作用域190
7.4.2存儲類別與生存期192
7.5static與extern關(guān)鍵字195
7.5.1static關(guān)鍵字195
7.5.2extern關(guān)鍵字195
7.6函數(shù)的嵌套調(diào)用與遞歸調(diào)用198
7.6.1函數(shù)的嵌套調(diào)用198
7.6.2函數(shù)的遞歸調(diào)用199
7.7帶參數(shù)的宏定義201
7.8編程實戰(zhàn)202
7.8.1判斷特質(zhì)數(shù)的函數(shù)202
7.8.2數(shù)據(jù)類型或數(shù)據(jù)進制的轉(zhuǎn)換205
7.8.3二維數(shù)組處理函數(shù)210
習(xí)題213
第8章指針219
8.1數(shù)據(jù)與地址219
8.1.1數(shù)據(jù)與地址的關(guān)系219
8.1.2保存地址220
8.1.3地址與指針221
8.1.4將指針變量與數(shù)據(jù)建立聯(lián)系221
8.1.5使用指針變量的意義223
8.1.6定義與使用指針變量的注意事項223
8.2指針變量作為函數(shù)參數(shù)224
8.3通過指針變量引用一維數(shù)組227
8.3.1將指針變量指向一維數(shù)組227
8.3.2指針變量可以在數(shù)組中進行的運算228
8.3.3通過指針變量引用一維數(shù)組元素的方法229
8.3.4通過指針變量引用字符串231
8.3.5通過指針變量接收一維數(shù)組的傳參232
8.4通過指針變量引用二維數(shù)組233
8.4.1定位二維數(shù)組中的元素233
8.4.2利用不同的指針變量引用二維數(shù)組元素234
8.4.3通過不同的指針變量接收二維數(shù)組的傳參238
8.5指針數(shù)組240
8.6指向指針的指針變量242
8.7指向函數(shù)的指針變量245
8.8函數(shù)返回值是指針變量247
8.9帶參數(shù)的main()函數(shù)248
8.10指針與動態(tài)分配內(nèi)存250
8.11指針變量使用方法小結(jié)252
8.12編程實戰(zhàn)255
習(xí)題259
第9章結(jié)構(gòu)體、共用體、枚舉與鏈表264
9.1結(jié)構(gòu)體類型的聲明264
9.1.1聲明結(jié)構(gòu)體類型264
9.1.2結(jié)構(gòu)體類型占用的存儲空間266
9.1.3用typedef為結(jié)構(gòu)體類型取別名267
9.2結(jié)構(gòu)體變量的定義和初始化268
9.2.1定義結(jié)構(gòu)體變量268
9.2.2結(jié)構(gòu)體變量的初始化和賦值269
9.3引用結(jié)構(gòu)體變量的成員269
9.4結(jié)構(gòu)體數(shù)組和函數(shù)傳參272
9.5鏈表275
9.5.1鏈?zhǔn)酱鎯εc結(jié)點275
9.5.2鏈表的定義276
9.5.3結(jié)點的結(jié)構(gòu)體類型設(shè)計276
9.6鏈表的主要操作277
9.6.1建立鏈表277
9.6.2遍歷鏈表279
9.6.3插入結(jié)點280
9.6.4刪除結(jié)點282
9.7鏈表和數(shù)組的區(qū)別284
9.8共用體類型285
9.9枚舉類型288
9.10編程實戰(zhàn)289
習(xí)題293
第10章文件298
10.1數(shù)據(jù)文件298
10.1.1文件的分類298
10.1.2設(shè)備文件與磁盤文件299
10.1.3文件指針299
10.2文件操作300
10.2.1文件的打開與關(guān)閉300
10.2.2文本文件的順序讀寫303
10.2.3二進制文件的順序讀寫307
10.2.4位置標(biāo)記的定位與隨機讀寫308
10.3編程實戰(zhàn)310
習(xí)題312
參考文獻315