本書針對計算機專業(yè)新生和對程序設計感興趣的初學者進行編寫,全書分為10章,內容包括C語言概述、數(shù)據(jù)類型、運算符和表達式、數(shù)據(jù)的輸入和輸出、選擇結構、循環(huán)結構、數(shù)組、函數(shù)、指針、結構體、共用體、枚舉與鏈表,以及文件操作。 本書注重理論與實踐相結合,同時兼顧激發(fā)讀者的學習興趣,在教學內容上采用了沉浸閱讀 啟發(fā)思考 知識點鞏固 一例多解 實戰(zhàn)體驗的設計方法,每一個章節(jié)都有先導或預備知識,由此引入本章要講解的具體內容,同時在關鍵節(jié)點提出問題,啟發(fā)讀者思考,并及時通過重點提示、題目鞏固和實例分析等加深讀者對知識點的理解,最后通過實戰(zhàn)練習鍛煉和培養(yǎng)讀者的計算思維。每章結尾都附有大量習題,使讀者能快速有效地復習和掌握章節(jié)知識,提高解決實際問題的能力。 本書配套有PPT教學課件、全部示例和實戰(zhàn)程序的源碼,適合作為大學計算機專業(yè)教材、非計算機專業(yè)的公共課教材、全國計算機等級考試參考書,以及對程序設計感興趣的讀者的自學用書。
(1)盡量避免枯燥地羅列和介紹知識點,語言嚴謹中略帶風趣,將知識點與現(xiàn)實生活中的場景相結合,更有利于加深讀者對知識點的理解和掌握。
(2)設計和使用問題來了、小技巧、注意和漲知識等模塊,在讀者閱讀和自學過程中,適時地進行引導,從而達到啟發(fā)思考、強調重點和拓展知識的目的。
(3)為重點知識設計了例題,并對經(jīng)典題目和實例采用一題多解的方式。同時,針對初學者容易犯的錯誤進行用例測試與結果分析。
(4)每章結尾都附有大量習題,使讀者能快速有效地復習和掌握章節(jié)知識,提高解決實際問題的能力。
程序設計語言是計算機相關專業(yè)的必修課程,目前大多數(shù)院校選擇C語言作為程序設計語言課程的講授內容。C語言采用結構化程序設計,既具備高級語言的特點,又能對硬件進行操作,因此既可以用于編寫應用軟件,也可以編寫系統(tǒng)軟件,是廣受歡迎的程序設計語言之一。其實,各種語言間的語法大同小異,都要遵守一些基本規(guī)則,所以當掌握了一門程序設計語言的語法后再學習其他程序設計語言的語法,就相對容易。因此,程序設計語言課程的目的在于幫助學生理解計算機進行工作的基本原理以及進行程序設計的基本方法,培養(yǎng)學生的計算思維,為后續(xù)課程的學習奠定基礎。
本書針對計算機相關專業(yè)新生或對程序設計感興趣的初學者的特點進行編寫,教學內容與素材均由一線教師積累多年教學經(jīng)驗總結而成。希望通過本書的學習,能使讀者了解高級程序設計語言的組成與特點、程序的設計思路與編寫技巧,學習并掌握C程序在數(shù)據(jù)表達、數(shù)據(jù)結構、模塊處理、流程控制等方面的相關知識,能夠掌握一些簡單的、典型的算法,具有一定的閱讀程序和設計程序的能力,為后續(xù)課程的學習打好基礎。
全書分為10章,內容包括C語言概述、數(shù)據(jù)類型、運算符和表達式、數(shù)據(jù)的輸入和輸出、選擇結構、循環(huán)結構、數(shù)組、函數(shù)、指針、結構體、共用體、枚舉與鏈表,以及文件操作。
本書注重理論與實踐相結合,同時兼顧激發(fā)讀者的學習興趣,在教學內容上采用了沉浸閱讀 啟發(fā)思考 知識點鞏固 一例多解 實戰(zhàn)體驗的設計方法,每一個章節(jié)都有先導或預備知識,由此引入本章要講解的具體內容,同時在關鍵節(jié)點提出問題,啟發(fā)讀者思考,并及時通過重點提示、題目鞏固、實例分析和知識擴展等加深讀者對知識點的理解,最后通過大量的實戰(zhàn)練習鍛煉和培養(yǎng)讀者的計算思維。每章結尾都附有各種類型的習題,使讀者能快速有效地復習和掌握章節(jié)知識,提高解決實際問題的能力。
基于獨特的教學內容設計方法,本書的主要特色如下。
(1) 盡量避免枯燥地羅列和介紹知識點,語言嚴謹中略帶風趣,將知識點與現(xiàn)實生活中的場景相結合,更有利于加深讀者對知識點的理解和掌握。例如,在學習數(shù)組時,先探討現(xiàn)實生活中若有團隊入住賓館,應以何種方式安排住宿才能更方便也更容易記住每位團員的房號,再由此推斷出為什么數(shù)組名可以代表首元素地址,以及為什么數(shù)組下標要從0開始進行編號的原因。
(2) 設計和使用問題來了小技巧注意和長知識等模塊,在讀者閱讀和自學過程中,適時地進行引導,從而達到啟發(fā)思考、強調重點和拓展知識的目的。
(3) 為重點知識設計例題,并對經(jīng)典題目和實例采用一題多解的方式。同時,針對初學者容易犯的錯誤進行用例測試與結果分析,一是避免再犯類似犯錯,二是如果今后在編程過程中出現(xiàn)類似情況,也能快速找到問題所在。例如,在第4章的分段函數(shù)編程示例中,先借甲、乙、丙3位同學之手設計了3種不同方案,再通過測試用例的運行結果分析出丙方案的錯誤原因,最后總結了編寫多分支題目時可以采用的方法以及需要避免的問題。
(4) 為每章提供大量實戰(zhàn)題,部分章節(jié)的理論與實戰(zhàn)篇幅的占比超過了1∶2。每道實戰(zhàn)題都包括問題分析、程序設計和程序實現(xiàn)3部分,并且選題領域覆蓋面較廣,可以讓讀者舉一反三。例如,第7章中,以判斷用戶輸入的數(shù)是否是對稱素數(shù)為例,先分析了用戶既可以采用字符串形式也可以采用整數(shù)形式讀取數(shù)據(jù),再針對不同形式討論如何以模塊化的方式進行程序設計,最后將每個模塊拆分成不同的實戰(zhàn)題,并進行相應擴展,例如將整數(shù)的字符串形式與整數(shù)形式的相互轉換擴展為K進制數(shù)的轉換等。
為方便讀者學習,本書附有配套PPT教學課件、本書全部示例和實戰(zhàn)程序的源碼,以及課后習題答案,方便學校教學和讀者自學。
因編者水平有限,不足之處在所難免,懇請讀者批評指正。
編者2023年1月
第1章C語言概述1
1.1計算機與程序設計語言1
1.1.1馮·諾依曼結構1
1.1.2程序設計2
1.1.3程序設計語言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
習題17
第2章數(shù)據(jù)類型、運算符和表達式19
2.1預備知識19
2.1.1位、字節(jié)、字與字長19
2.1.2C程序與內存20
2.2數(shù)據(jù)類型21
2.2.1數(shù)據(jù)類型的劃分21
2.2.2不同數(shù)據(jù)類型的內存占用與數(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關鍵字與標識符37
2.6.1關鍵字37
2.6.2標識符38
2.7運算符38
2.7.1算術運算符39
2.7.2關系運算符40
2.7.3邏輯運算符41
2.7.4位運算符42
2.7.5賦值(復合賦值)運算符43
2.7.6其他運算符44
2.8表達式45
2.8.1運算符的優(yōu)先級和結合方向45
2.8.2自動類型轉換47
2.8.3對數(shù)據(jù)溢出的處理48
2.9數(shù)學函數(shù)48
2.10C語句49
2.11編程實戰(zhàn)51
習題53
新編C語言程序設計目錄第3章數(shù)據(jù)的輸入和輸出56
3.1預備知識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
習題70
第4章選擇結構74
4.1預備知識74
4.1.1算法的特點74
4.1.2算法的描述方法75
4.2if選擇結構77
4.2.1if單分支選擇結構77
4.2.2if…else雙分支選擇結構79
4.2.3if語句的嵌套81
4.3switch結構85
4.4編程實戰(zhàn)87
習題90
第5章循環(huán)結構94
5.1循環(huán)的相關概念94
5.1.1循環(huán)結構94
5.1.2循環(huán)條件的設計95
5.1.3循環(huán)體的設計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)的跳轉101
5.6循環(huán)的嵌套104
5.7編程實戰(zhàn)105
5.7.1數(shù)據(jù)統(tǒng)計類105
5.7.2具有特質的數(shù)的判斷114
5.7.3字符類的處理120
5.7.4打印圖形122
5.7.5窮舉問題126
習題128
第6章數(shù)組133
6.1預備知識133
6.1.1順序存儲與下標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
習題170
第7章函數(shù)176
7.1結構化程序設計與函數(shù)176
7.1.1結構化程序設計176
7.1.2函數(shù)177
7.2函數(shù)的定義、聲明與調用179
7.2.1函數(shù)的定義179
7.2.2函數(shù)的聲明與調用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關鍵字195
7.5.1static關鍵字195
7.5.2extern關鍵字195
7.6函數(shù)的嵌套調用與遞歸調用198
7.6.1函數(shù)的嵌套調用198
7.6.2函數(shù)的遞歸調用199
7.7帶參數(shù)的宏定義201
7.8編程實戰(zhàn)202
7.8.1判斷特質數(shù)的函數(shù)202
7.8.2數(shù)據(jù)類型或數(shù)據(jù)進制的轉換205
7.8.3二維數(shù)組處理函數(shù)210
習題213
第8章指針219
8.1數(shù)據(jù)與地址219
8.1.1數(shù)據(jù)與地址的關系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)分配內存250
8.11指針變量使用方法小結252
8.12編程實戰(zhàn)255
習題259
第9章結構體、共用體、枚舉與鏈表264
9.1結構體類型的聲明264
9.1.1聲明結構體類型264
9.1.2結構體類型占用的存儲空間266
9.1.3用typedef為結構體類型取別名267
9.2結構體變量的定義和初始化268
9.2.1定義結構體變量268
9.2.2結構體變量的初始化和賦值269
9.3引用結構體變量的成員269
9.4結構體數(shù)組和函數(shù)傳參272
9.5鏈表275
9.5.1鏈式存儲與結點275
9.5.2鏈表的定義276
9.5.3結點的結構體類型設計276
9.6鏈表的主要操作277
9.6.1建立鏈表277
9.6.2遍歷鏈表279
9.6.3插入結點280
9.6.4刪除結點282
9.7鏈表和數(shù)組的區(qū)別284
9.8共用體類型285
9.9枚舉類型288
9.10編程實戰(zhàn)289
習題293
第10章文件298
10.1數(shù)據(jù)文件298
10.1.1文件的分類298
10.1.2設備文件與磁盤文件299
10.1.3文件指針299
10.2文件操作300
10.2.1文件的打開與關閉300
10.2.2文本文件的順序讀寫303
10.2.3二進制文件的順序讀寫307
10.2.4位置標記的定位與隨機讀寫308
10.3編程實戰(zhàn)310
習題312
參考文獻315