本書通過案例教學的方式,由淺入深,讓學生在模仿訓練應(yīng)用的過程中,快速掌握程序設(shè)計的基本思想和基本方法。 本書共10章,主要內(nèi)容包括C語言概述、C簡單編程、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)、數(shù)組、函數(shù)、指針、結(jié)構(gòu)體、文件及應(yīng)用實例。各章均給出了內(nèi)容豐富又有代表性的例題,全部程序都在Dev C 中調(diào)試通過,同時也對Dev C 環(huán)境進行了介紹。書后配有各章習題解析及習題答案。其中,大部分例題和習題配有微視頻講解。同時,作者團隊在中國大學慕課平臺上開設(shè)了C語言學習輔導與習題課的慕課課程。 本書可作為高等學校各專業(yè)C程序設(shè)計課程的教材,也可以作為各類計算機培訓班的教材和成人教育同類課程教材及自學教材。
在當前MOOC學習、線上線下混合教學、翻轉(zhuǎn)課堂等新技術(shù)、新術(shù)語、新形式層出不窮、方興未艾的歷史時期,本教材立足于C語言程序設(shè)計基礎(chǔ)本身,又結(jié)合新的形式、新的方法,試圖將經(jīng)典的知識以全新的視角詮釋出來,方便教師與學生的教與學。主要特色如下:與MOOC線上課程相配套,同時可通過掃描二維碼的方式鏈接小視頻對重點知識、例題習題進行視頻講解,方便學生學習;通過貫穿全書的案例教學將理論與實踐有機結(jié)合,并在重點章節(jié)習題中增加面向?qū)I(yè)的案例,讓學生能夠?qū)W以致用;文件部分的學習提前至數(shù)組部分,方便學生在后續(xù)章節(jié)中的學習使用。
C程序設(shè)計教程與實訓(第3版)程序設(shè)計能力是計算機基礎(chǔ)教育的重要組成部分,是高等學校學生應(yīng)具備的基本技能之一。程序設(shè)計知識的學習有助于學生真正理解計算機工作原理,了解計算機解決問題的方法,有效訓練學生的邏輯思維和抽象思維,同時開闊學生的視野,培養(yǎng)豐富的想象力和創(chuàng)造力,終幫助學生更好地使用計算機解決本專業(yè)科研、工作和生活中的相關(guān)問題。
學習程序設(shè)計是既有挑戰(zhàn)性,又頗有成就感的過程。有經(jīng)驗的程序員在重新審視C語言的學習時,常常會感覺這門課程其實很簡單。然而,在實際面對初學者的教學過程中,卻面臨著比想象中多得多的困難。常見的問題是,開課之初學生有很大的熱情,但隨著學習的深入,到了循環(huán)、數(shù)組部分,有些學生仍然遲遲不能入門,慢慢地失去了學習的興趣,造成惡性循環(huán),終甚至放棄了該課程的學習。學生普遍反映對于抽象的C程序設(shè)計課程難于找到入門的捷徑。這些情況的出現(xiàn),原因是多方面的。其中很重要的原因就是長期以來,程序設(shè)計課程過多強調(diào)語言本身及其表達細節(jié),忽視了程序設(shè)計的本質(zhì),造成很多學生過多地陷入具體細節(jié)的旋渦里,無法站在一定的高度欣賞程序設(shè)計的美。同時,C程序設(shè)計又是一門實踐性很強的課程,學生必須通過較多的編程訓練才能掌握。因此,如果能讓學生一開始就很清楚自己要做的事情,循序漸進地領(lǐng)會程序設(shè)計的精妙,在實踐中形成良好的程序設(shè)計風格,并自始至終興趣濃厚,相信C語言的教學工作將會收到事半功倍的效果。
鑒于此,我們決定從教材入手,轉(zhuǎn)換思路。在教材的編寫過程中,本著從始至終簡化語法,培養(yǎng)學生動手編程能力的初衷,力爭獨辟蹊徑,寫出特色,讓學生了解C程序的編寫其實遠沒有傳說中那樣困難。
本書共分為10章,涵蓋了C程序設(shè)計教程應(yīng)包含的基本內(nèi)容,并將文件的基本使用方法提前至數(shù)組一章,讓學生提前了解文件的應(yīng)用,并在后續(xù)知識的學習中反復使用,加深理解。
同時,前8章均由引例開始,引出該章將要引入的新知識,采用提出問題分析問題引入新知識解決問題模仿編程總結(jié)提高這樣一個循序漸進、螺旋式上升的教學模式。將一個個典型的、針對性強的、貼近現(xiàn)實或貼近專業(yè)的案例程序設(shè)計作為貫穿始終的主線,將課程內(nèi)容抽絲剝繭般解析開來。學生可通過課堂練習題、課后習題和課后提高題等幾個環(huán)節(jié)提升程序設(shè)計能力,達到由淺入深、舉一反三進行程序設(shè)計實訓的目的。
此外,本書重要章節(jié)(如循環(huán)結(jié)構(gòu)、數(shù)組、函數(shù)、指針等章節(jié))的課后習題均增加了面向各類專業(yè)的應(yīng)用與提高的部分習題,為各類專業(yè)學生了解計算機在本專業(yè)的應(yīng)用提供感性認識。
C程序設(shè)計教程與實訓(第3版)前言本次再版與之前的不同是:
(1) 重點例題和多數(shù)課后習題配有微視頻講解,通過掃描二維碼可以觀看。
(2) 在中國大學MOOC平臺開設(shè)了C語言學習輔導與習題課的慕課課程,與教材內(nèi)容對應(yīng)。
(3) 進一步精選、增加了例題和習題,特別是同一個例子在幾個章節(jié)中反復出現(xiàn),便于比較方法之間的差別和效率。
本書的配套電子資源可在清華大學出版社官網(wǎng)(www.tup.tsinghua.edu.cn)下載。
培養(yǎng)學生程序設(shè)計能力的方法仍在研究和探索中,限度地提高學生的學習效果是我們永恒的奮斗目標。
本書由從事了多年計算機基礎(chǔ)課程教學、具有豐富教學實踐經(jīng)驗的一線教師編寫完成。第1、2、7章由李芳編著,第3、5章及附錄由高敬陽編著,第4、6章由馬靜編著,第8~10章由萬靜編著。全書由高敬陽組織編寫并統(tǒng)稿。感謝第2版團隊教師李國捷、吳蕾、尤楓的支持和付出。
由于作者水平有限,書中難免有錯誤和不妥之處,懇請讀者批評指正。
編者2021年5月
高敬陽:博士,教授,博士生導師,北京市教學名師。
多年來帶領(lǐng)團隊一直致力于教學改革一線,大大提升了人才培養(yǎng)質(zhì)量,該團隊被評為北京市優(yōu)秀教學團隊,本人曾榮獲霍英東教育基金會第八屆青年教師獎;北京市優(yōu)秀教學成果二等獎;主編出版了十一五、十二五規(guī)劃教材、北京市優(yōu)質(zhì)教材《大學計算機基礎(chǔ)》和《大學計算機基礎(chǔ)實驗指導》;主編《C程序設(shè)計教程與實訓》榮獲北京市精品教材;在《中國大學教學》等期刊發(fā)表教改論文多篇;帶領(lǐng)團隊錄制的2門課程在中國大學MOOC平臺上上線。
主持了國家自然科學基金、北京市自然科學基金等項目。
第1章C語言概述1
1.1引例1
1.2C語言程序的基本結(jié)構(gòu)2
1.3C語言基本符號3
1.4程序設(shè)計的基本概念4
1.4.1程序和程序設(shè)計4
1.4.2算法5
1.4.3程序設(shè)計語言6
1.5運行C程序的步驟和開發(fā)環(huán)境7
1.5.1運行C程序的步驟7
1.5.2集成開發(fā)環(huán)境8
本章小結(jié)12
習題112
第2章C簡單編程13
2.1引例13
2.2數(shù)據(jù)與類型14
2.3常量和變量14
2.3.1常量14
2.3.2變量17
2.4運算符與表達式19
2.4.1算術(shù)運算符與算術(shù)表達式19
2.4.2賦值運算符與賦值表達式20
2.4.3關(guān)系運算符與關(guān)系表達式21
2.4.4邏輯運算符與邏輯表達式21
2.4.5條件運算符及條件表達式22
2.4.6逗號運算符與逗號表達式22
2.4.7sizeof運算符22
2.4.8位運算符與位運算23
2.4.9數(shù)據(jù)間的混合運算24
2.5數(shù)據(jù)的輸入輸出25
2.5.1字符輸入輸出函數(shù)25
2.5.2格式輸出函數(shù)printf()26
2.5.3格式輸入函數(shù)scanf()27
2.6順序結(jié)構(gòu)程序設(shè)計29
2.6.1C語言的語句29
2.6.2順序結(jié)構(gòu)程序設(shè)計舉例30
本章小結(jié)31
習題232
目錄第3章選擇結(jié)構(gòu)34
3.1引例34
3.2if語句35
3.2.1ifelse形式35
3.2.2if形式37
3.2.3if語句的嵌套38
3.2.4ifelse if形式41
3.3switch語句43
本章小結(jié)46
習題346
第4章循環(huán)結(jié)構(gòu)49
4.1引例49
4.2while語句50
4.3dowhile語句53
4.4for語句55
4.5循環(huán)嵌套58
4.6break和continue語句60
4.6.1break語句60
4.6.2continue語句62
4.7goto語句64
4.8循環(huán)應(yīng)用65
本章小結(jié)71
習題471
第5章數(shù)組75
5.1引例75
5.2一維數(shù)組77
5.2.1數(shù)組的概念77
5.2.2一維數(shù)組的定義77
5.2.3一維數(shù)組的引用78
5.2.4一維數(shù)組的初始化79
5.2.5一維數(shù)組的應(yīng)用79
5.3二維數(shù)組82
5.3.1二維數(shù)組的定義82
5.3.2二維數(shù)組的引用和初始化83
5.3.3二維數(shù)組的應(yīng)用84
5.4字符數(shù)組和字符串87
5.4.1字符數(shù)組87
5.4.2字符串88
5.4.3字符串處理函數(shù)91
5.4.4字符串數(shù)組94
5.5用文件處理數(shù)據(jù)96
5.6數(shù)組應(yīng)用98
本章小結(jié)102
習題5103
第6章函數(shù)106
6.1引例106
6.2函數(shù)的定義及調(diào)用107
6.2.1函數(shù)的定義108
6.2.2函數(shù)的調(diào)用109
6.2.3函數(shù)聲明111
6.2.4兩種特殊的函數(shù)112
6.3數(shù)組作為函數(shù)的參數(shù)113
6.3.1一維數(shù)組作為函數(shù)的參數(shù)113
6.3.2函數(shù)間的參數(shù)傳遞114
6.3.3二維數(shù)組作為函數(shù)的參數(shù)119
6.3.4字符數(shù)組作為函數(shù)的參數(shù)121
6.4函數(shù)的嵌套與遞歸123
6.5程序的多文件組織127
6.5.1多文件組織127
6.5.2Dev C 集成環(huán)境中多文件組織的應(yīng)用129
6.6作用域和存儲類型130
6.6.1變量的作用域130
6.6.2變量的存儲類型133
6.6.3函數(shù)的存儲類型138
6.7函數(shù)的應(yīng)用138
本章小結(jié)140
習題6141
第7章指針145
7.1引例145
7.2指針變量的定義和引用146
7.2.1指針變量的定義146
7.2.2指針變量的引用147
7.2.3指針變量的應(yīng)用148
7.3指針與數(shù)組149
7.3.1指向數(shù)組元素的指針149
7.3.2指針與字符串151
7.3.3指針與二維數(shù)組的關(guān)系153
7.4指針與函數(shù)157
7.4.1指針作為函數(shù)的參數(shù)157
7.4.2返回值為指針的函數(shù)161
7.4.3函數(shù)指針162
7.5指針數(shù)組和指向指針的指針163
7.5.1指針數(shù)組164
7.5.2指向指針的指針165
7.5.3命令行參數(shù)與字符指針數(shù)組167
本章小結(jié)168
習題7169
第8章結(jié)構(gòu)體172
8.1引例172
8.2結(jié)構(gòu)體類型的聲明和變量的定義173
8.2.1結(jié)構(gòu)體類型的聲明173
8.2.2結(jié)構(gòu)體類型變量的定義174
8.2.3結(jié)構(gòu)體變量的引用175
8.2.4結(jié)構(gòu)體變量的初始化176
8.3結(jié)構(gòu)體數(shù)組177
8.3.1定義結(jié)構(gòu)體數(shù)組178
8.3.2結(jié)構(gòu)體數(shù)組的初始化178
8.3.3結(jié)構(gòu)體數(shù)組的引用178
8.4結(jié)構(gòu)體指針180
8.4.1結(jié)構(gòu)體指針變量的定義與引用180
8.4.2指向結(jié)構(gòu)體數(shù)組的指針182
8.4.3結(jié)構(gòu)體變量和指向結(jié)構(gòu)體的指針作為函數(shù)參數(shù)183
8.5動態(tài)存儲分配186
8.6鏈表187
8.6.1鏈表的概念187
8.6.2動態(tài)鏈表189
8.7共用體194
8.7.1共用體的概念194
8.7.2共用體變量的引用195
8.8枚舉類型196
8.8.1枚舉類型的定義196
8.8.2枚舉變量的定義196
8.8.3枚舉變量的賦值和使用196
8.9用typedef命名類型198
本章小結(jié)199
習題8200
第9章文件204
9.1文件概述204
9.1.1文件的概念204
9.1.2緩沖文件系統(tǒng)205
9.1.3文件結(jié)構(gòu)和文件類型指針205
9.2文件的打開和關(guān)閉206
9.2.1文件打開函數(shù)206
9.2.2文件關(guān)閉函數(shù)207
9.3文件的讀寫207
9.3.1文件的字符輸入輸出函數(shù)208
9.3.2文件的字符串輸入輸出函數(shù)209
9.3.3文件的格式化輸入輸出函數(shù)211
9.3.4文件的數(shù)據(jù)塊輸入輸出函數(shù)212
9.4其他文件函數(shù)214
9.5應(yīng)用舉例216
本章小結(jié)218
習題9218
第10章應(yīng)用實例222
10.1數(shù)值計算222
10.1.1一維多項式求值222
10.1.2一元三點拉格朗日插值223
10.1.3對分法求非線性方程實根226
10.1.4線性方程組求解229
10.2排序233
10.2.1直接插入排序233
10.2.2希爾排序234
10.2.3快速排序235
10.2.4選擇排序237
10.2.5歸并排序238
10.3管理系統(tǒng)239
10.3.1系統(tǒng)功能239
10.3.2設(shè)計思路240
10.3.3代碼實現(xiàn)242
本章小結(jié)248
習題10248
附錄AASCII碼表249
附錄B運算符的優(yōu)先級和結(jié)合性250
附錄C常用庫函數(shù)252
附錄D預處理命令257
D.1宏定義257
D.2文件包含259
D.3條件編譯259
附錄E各章習題解析與提示261
參考文獻274