本書的寫作結(jié)合了作者多年C程序設計的授課經(jīng)驗,從知識點的講述方法、例題設計,以及示例代碼的排版風格上都充分體現(xiàn)出便于學習和適合講授的特點。通過本書的學習,不僅僅能夠掌握C語言程序設計知識,更能了解到如何運用C語言編程解決一些實際問題。
書中每一個例題在示例代碼之前都有分析,之后都有解釋,這兩處包含了編寫程序的一些思想分析和總結(jié),其中不乏一些編程經(jīng)驗和技巧,希望讀者不要僅僅將注意力集中在源代碼的閱讀上,更應該對例題的這兩個部分進行細致的閱讀。
編者走進精彩紛呈的計算機世界至今正好20年,從來沒有想過要寫一本C語言程序設計教程,因為從我學習C語言起,再到后來教授C語言課程,一直都在使用譚浩強先生的C語言教材。那不僅僅是一本經(jīng)典的C語言教材,更是對自己大學時代的一種記憶與懷念。然而,自從為非計算機專業(yè)的學生講授C語言課程以后,慢慢發(fā)現(xiàn),一些經(jīng)典的計算機專業(yè)教材由于講授內(nèi)容較全面、深入,反而不一定很適合他們。作為公共計算機課程的一種,面向非計算機專業(yè)開設的C語言程序設計課程,不需要追求掌握了多少語法知識,掌握了多少編程技巧,而應該更多地關注是否通過一門語言工具,使學生們了解計算機程序的運行原理,以及是否掌握了一定的邏輯思維能力,能否以計算機的思維方式去考慮、分析實際問題。即通過這門課程的學習,使各專業(yè)的大學生具備基本的計算思維能力,本書正是基于這樣的指導思想而寫作的。
閱讀本書時請注意以下問題。
首先,我希望讀者能夠?qū)屑哟帧⒓狱c的文字內(nèi)容引起足夠的注意,那往往是一些容易被忽視、引發(fā)錯誤的內(nèi)容。
其次,書中每一個例題在示例代碼之前都有分析,之后都有解釋,這兩處包含了編寫程序的一些思想分析和總結(jié),其中不乏一些編程經(jīng)驗和技巧,希望讀者不要僅僅將注意力集中在源代碼的閱讀上,更應該對例題的這兩個部分進行細致的閱讀。
再次,本書雖然為每一個例題都提供了完整的源代碼,卻不準備以任何形式向讀者提供這些源代碼的電子版。實際上,在互聯(lián)網(wǎng)高度發(fā)達的今天,要做源程序的發(fā)布非常容易。但是,本人堅持認為,作為一名程序設計的初學者,將每一個例題的源代碼自己輸入到計算機中本身就是一項重要的練習。你會發(fā)現(xiàn),剛開始的時候,即使對照書本小心地輸入,在編譯時還是會出現(xiàn)很多錯誤警告;而讀者是在排除這些錯誤的過程中實現(xiàn)了編程能力的提高。
最后,本書第2版雖然提供了每一章練習題的參考答案,但是仍然不建議讀者使用這些參考答案,因為對于看程序?qū)懗鼋Y(jié)果這類習題,讀者只需輸入題目中的源代碼并運行程序就能獲得正確的答案。自己運行程序,還可以練習使用斷點等方式觀察程序運行時變量的變化過程,可以更深入地了解程序的運行。對于編程題,參考答案反而會限制讀者計算思想的培養(yǎng)和C語言編程思維(第2版)形成。正所謂兵無常勢,水無常形,實現(xiàn)相同功能的源程序也可以多種多樣,發(fā)散性的思維對于學生尤為重要。請記住,只要能讓你編寫的程序順利運行,并輸出期望的結(jié)果,那它就是答案!當然,如果讀者對于部分習題的解決的確毫無頭緒時,也可以登錄清華大學出版社的官方網(wǎng)站下載本書提供的參考答案。如果讀者有任何好的意見、建議或求助,我將十分樂意通過郵件(nbchen75@sina.com)隨時為你提供幫助!
本書第2版得到了寧波工程學院電子與信息工程學院各位領導及同事的大力協(xié)助,特別是在本書修訂過程中,理學院的陳明、楊帆、林勇,機械學院的袁云龍、王明軍等老師提出了大量寶貴意見,在此向幫助過我的各位同仁表示衷心的感謝!
由于編者水平有限,書中一定存在著各種疏漏與不足之處,懇請各位專家、讀者批評、指正,謝謝!
編者2019年5月
陳萌,男,碩士,1975年出生,中國計算機協(xié)會會員,長期從事普通高校計算機基礎課程教學工作,目前已積累獨著、參編各類計算機教材7本。
第1章編程十問1
1.1何謂編程2
1.2為何編程2
1.3怎樣編程3
1.4計算機的世界有何不同4
1.5程序是怎樣工作的5
1.6為什么選擇C語言6
1.7C語言從何而來7
1.8C語言去向何方8
1.9數(shù)學與編程的關系10
1.10編程難嗎11
【技能訓練題】12
第2章編程環(huán)境與風格13
2.1搭建C語言開發(fā)環(huán)境13
2.2工程與程序24
2.3C語言程序的一般結(jié)構38
2.4標識符的命名與規(guī)則39
2.5程序的書寫風格41
【技能訓練題】43
【應試訓練題】43
第3章機器思維45
3.1機器解題的過程45
3.2用圖形描述的解題過程(流程圖)48
3.3用語言描述的解題過程(偽代碼)51
【技能訓練題】54
第4章順序結(jié)構的程序55
4.1程序的組成55
4.1.1常量554.1.2變量聲明與使用59
4.1.3C語言的運算符號61
4.1.4表達式與語句66
4.2程序與外界的交流69
4.2.1輸入到程序70
4.2.2輸出處理78
4.3程序的排錯與調(diào)試86
4.3.1軟件Bug與調(diào)試86
4.3.2常用調(diào)試工具88
4.3.3Visual Studio調(diào)試源程序的方法89
4.4典型的順序問題98
4.4.1單位及貨幣的轉(zhuǎn)換98
4.4.2面積的計算101
4.4.3整數(shù)分解問題103
【技能訓練題】104
【應試訓練題】105
第5章會思考的程序111
5.1智能的實質(zhì)111
5.2選擇結(jié)構的實現(xiàn)112
5.2.1條件表達式112
5.2.2if語句114
5.2.3switch語句123
5.2.4if和switch的選擇131
5.3典型的分支問題132
5.3.1為什么密碼都要輸入兩次132
5.3.2成績轉(zhuǎn)換問題(百分制轉(zhuǎn)優(yōu)、良、中、差)133
5.3.3排序問題136
【技能訓練題】138
【應試訓練題】139
第6章循環(huán)往復,周而復始145
6.1C語言的三種循環(huán)結(jié)構145
6.1.1先判斷,后循環(huán)(while)146
6.1.2先循環(huán),后判斷(dowhile)148
6.1.3for語句151
6.2無限循環(huán)與中途退出153
6.2.1無限循環(huán)153
6.2.2break和continue155
6.2.3被遺忘的goto159
6.3典型的循環(huán)問題160
6.3.1循環(huán)輸入160
6.3.2多項式的求解163
6.3.3循環(huán)的嵌套164
【技能訓練題】166
【應試訓練題】167
第7章模塊化與協(xié)作開發(fā)174
7.1任務分解與協(xié)作174
7.1.1任務分解的意義174
7.1.2團隊合作175
7.2函數(shù)的定義與使用176
7.2.1自定義函數(shù)176
7.2.2函數(shù)的聲明與調(diào)用183
7.2.3全局變量與局部變量185
7.2.4變量的生存周期188
7.3庫函數(shù)與API190
7.3.1庫函數(shù)191
7.3.2系統(tǒng)API192
7.3.3第三方API193
7.4遞歸194
【技能訓練題】198
【應試訓練題】199
第8章批量數(shù)據(jù)的處理209
8.1一維數(shù)組與線性結(jié)構209
8.1.1一維數(shù)組的定義與初始化211
8.1.2一維數(shù)組的應用214
8.2二維數(shù)組223
8.2.1二維數(shù)組的定義223
8.2.2二維數(shù)組的初始化224
8.2.3二維數(shù)組的應用226
8.3字符串231
8.3.1字符數(shù)組與字符串的關系231
8.3.2字符串的輸入與輸出234
8.3.3常見字符串處理函數(shù)235
8.3.4字符串的應用238
【技能訓練題】244
【應試訓練題】245
第9章指針與內(nèi)存253
9.1指針是什么253
9.1.1Windows的內(nèi)存管理253
9.1.2指針的定義255
9.1.3指針的使用257
9.1.4指針的右左法則259
9.2指針的常用方法261
9.2.1指針在數(shù)組中的運用261
9.2.2指針在函數(shù)中的運用270
【技能訓練題】279
【應試訓練題】280
第10章Windows文件系統(tǒng)及操作288
10.1Windows文件系統(tǒng)288
10.1.1Windows文件系統(tǒng)簡介288
10.1.2文件、文件夾和路徑289
10.1.3C語言中對路徑的描述290
10.1.4字符文件與二進制文件291
10.1.5文件操作的一般流程291
10.2文本文件的基本操作293
10.2.1文本文件讀寫函數(shù)293
10.2.2文本文件讀寫示例296
10.3二進制文件的基本操作301
10.3.1二進制文件讀寫函數(shù)301
10.3.2二進制文件讀寫示例304
【技能訓練題】309
【應試訓練題】310
第11章自定義數(shù)據(jù)類型313
11.1結(jié)構體313
11.1.1結(jié)構體數(shù)據(jù)類型簡介313
11.1.2結(jié)構體定義與引用314
11.1.3結(jié)構體應用示例317
11.2共用體319
11.2.1共用體類型簡介319
11.2.2共用體定義與引用320
11.2.3共用體應用示例321
【技能訓練題】323
【應試訓練題】324
參考文獻328
附錄AASCII碼表329附錄BVC常見錯誤提示331
附錄C常用庫函數(shù)索引表334