本書是與譚浩強所著的《C程序設(shè)計 (第五版)》(清華大學(xué)出版社出版) 配合使用的參考書, 共包含四個部分, 分別為: 《C程序設(shè)計 (第五版)》習(xí)題和參考解答; 深入學(xué)習(xí)C程序設(shè)計; C語言程序上機(jī)指南; 上機(jī)實踐指導(dǎo)。本書內(nèi)容豐富、概念清晰、實用性強, 是學(xué)習(xí)C語言的一本好參考書。
序
從20世紀(jì)70年代末、80年代初開始,我國的高等院校開始面向各個專業(yè)的全體大學(xué)生開展計算機(jī)教育。面向非計算機(jī)專業(yè)學(xué)生的計算機(jī)基礎(chǔ)教育牽涉的專業(yè)面廣、人數(shù)眾多,影響深遠(yuǎn),它將直接影響我國各行各業(yè)、各個領(lǐng)域中計算機(jī)應(yīng)用的發(fā)展水平。這是一項意義重大而且大有可為的工作,應(yīng)該引起各方面的充分重視。
三十多年來,全國高等院校計算機(jī)基礎(chǔ)教育研究會和全國高校從事計算機(jī)基礎(chǔ)教育的老師始終不渝地在這片未被開墾的土地上辛勤工作,深入探索,努力開拓,積累了豐富的經(jīng)驗,初步形成了一套行之有效的課程體系和教學(xué)理念。高等院校計算機(jī)基礎(chǔ)教育的發(fā)展經(jīng)歷了3個階段:20世紀(jì)80年代是初創(chuàng)階段,帶有掃盲的性質(zhì),多數(shù)學(xué)校只開設(shè)一門入門課程;20世紀(jì)90年代是規(guī)范階段,在全國范圍內(nèi)形成了按3個層次進(jìn)行教學(xué)的課程體系,教學(xué)的廣度和深度都有所發(fā)展;進(jìn)入21世紀(jì),開始了深化提高的第3階段,需要在原有基礎(chǔ)上再上一個新臺階。
在計算機(jī)基礎(chǔ)教育的新階段,要充分認(rèn)識到計算機(jī)基礎(chǔ)教育面臨的挑戰(zhàn)。
(1) 在世界范圍內(nèi)信息技術(shù)以空前的速度迅猛發(fā)展,新的技術(shù)和新的方法層出不窮,要求高等院校計算機(jī)基礎(chǔ)教育必須跟上信息技術(shù)發(fā)展的潮流,大力更新教學(xué)內(nèi)容,用信息技術(shù)的新成就武裝當(dāng)今的大學(xué)生。
(2) 我國國民經(jīng)濟(jì)現(xiàn)在處于持續(xù)快速穩(wěn)定發(fā)展階段,需要大力發(fā)展信息產(chǎn)業(yè),加快經(jīng)濟(jì)與社會信息化的進(jìn)程,這就迫切需要大批既熟悉本領(lǐng)域業(yè)務(wù),又能熟練使用計算機(jī),并能將信息技術(shù)應(yīng)用于本領(lǐng)域的新型專門人才。因此需要大力提高高校計算機(jī)基礎(chǔ)教育的水平,培養(yǎng)出數(shù)以百萬計的計算機(jī)應(yīng)用人才。
(3) 21世紀(jì),信息技術(shù)教育在我國中小學(xué)中全面開展,計算機(jī)教育的起點從大學(xué)下移到中小學(xué)。水漲船高,這樣也為提高大學(xué)的計算機(jī)教育水平創(chuàng)造了十分有利的條件。
迎接21世紀(jì)的挑戰(zhàn),大力提高我國高等學(xué)校計算機(jī)基礎(chǔ)教育的水平,培養(yǎng)出符合信息時代要求的人才,已成為廣大計算機(jī)教育工作者的神圣使命和光榮職責(zé)。全國高等院校計算機(jī)基礎(chǔ)教育研究會和清華大學(xué)出版社于2002年聯(lián)合成立了“中國高等院校計算機(jī)基礎(chǔ)教育改革課題研究組”,集中了一批長期在高校計算機(jī)基礎(chǔ)教育領(lǐng)域從事教學(xué)和研究的專家、教授,經(jīng)過深入調(diào)查研究,廣泛征求意見,反復(fù)討論修改,提出了高校計算機(jī)基礎(chǔ)教育改革思路和課程方案,并于2004年7月發(fā)布了《中國高等院校計算機(jī)基礎(chǔ)教育課程體系2004》(簡稱CFC 2004)。國內(nèi)知名專家和從事計算機(jī)基礎(chǔ)教育工作的廣大教師一致認(rèn)為CFC 2004提出了一個既體現(xiàn)先進(jìn)性又切合實際的思路和解決方案,該研究成果具有開創(chuàng)性、針對性、前瞻性和可操作性,對發(fā)展我國高等院校的計算機(jī)基礎(chǔ)教育具有重要的指導(dǎo)作用。根據(jù)近年來計算機(jī)基礎(chǔ)教育的發(fā)展,課題研究組先后于2006、2008和2014年發(fā)布了《中國高等院校計算機(jī)基礎(chǔ)教育課程體系》的新版本,由清華大學(xué)出版社出版。
為了實現(xiàn)CFC提出的要求,必須有一批與之配套的教材。教材是實現(xiàn)教育思想和教學(xué)要求的重要保證,是教學(xué)改革中的一項重要的基本建設(shè)。如果沒有好的教材,提高教學(xué)質(zhì)量只是一句空話。要寫好一本教材是不容易的,不僅需要掌握有關(guān)的科學(xué)技術(shù)知識,而且要熟悉自己工作的對象,研究讀者的認(rèn)識規(guī)律,善于組織教材內(nèi)容,具有較好的文字功底,還需要學(xué)習(xí)一點教育學(xué)和心理學(xué)的知識等。一本好的計算機(jī)基礎(chǔ)教材應(yīng)當(dāng)具備以下5個要素:
(1) 定位準(zhǔn)確。要明確讀者對象,要有的放矢,不要不問對象,提筆就寫。
(2) 內(nèi)容先進(jìn)。要能反映計算機(jī)科學(xué)技術(shù)的新成果、新趨勢。
(3) 取舍合理。要做到“該有的有,不該有的沒有”,不要包羅萬象、貪多求全,不應(yīng)把教材寫成手冊。
(4) 體系得當(dāng)。要針對非計算機(jī)專業(yè)學(xué)生的特點,精心設(shè)計教材體系,不僅使教材體現(xiàn)科學(xué)性和先進(jìn)性,還要注意循序漸進(jìn),降低臺階,分散難點,使學(xué)生易于理解。
(5) 風(fēng)格鮮明。要用通俗易懂的方法和語言敘述復(fù)雜的概念。善于運用形象思維,深入淺出,引人入勝。
為了推動各高校的教學(xué),我們愿意與全國各地區(qū)、各學(xué)校的專家和老師共同奮斗,編寫和出版一批具有中國特色的、符合非計算機(jī)專業(yè)學(xué)生特點的、受廣大讀者歡迎的優(yōu)秀教材。為此,我們成立了“中國高等院校計算機(jī)基礎(chǔ)教育課程體系規(guī)劃教材”編審委員會,全面指導(dǎo)本套教材的編寫工作。
本套教材具有以下幾個特點:
(1) 全面體現(xiàn)CFC的思路和課程要求?梢哉f,本套教材是CFC的具體化。
(2) 教材內(nèi)容體現(xiàn)了信息技術(shù)發(fā)展的趨勢。由于信息技術(shù)發(fā)展迅速,教材需要不斷更新內(nèi)容,推陳出新。本套教材力求反映信息技術(shù)領(lǐng)域中新的發(fā)展、新的應(yīng)用。
(3) 按照非計算機(jī)專業(yè)學(xué)生的特點構(gòu)建課程內(nèi)容和教材體系,強調(diào)面向應(yīng)用,注重培養(yǎng)應(yīng)用能力,針對多數(shù)學(xué)生的認(rèn)知規(guī)律,盡量采用通俗易懂的方法說明復(fù)雜的概念,使學(xué)生易于學(xué)習(xí)。
(4) 考慮到教學(xué)對象不同,本套教材包括了各方面所需要的教材(重點課程和一般課程,必修課和選修課,理論課和實踐課) ,供不同學(xué)校、不同專業(yè)的學(xué)生選用。
(5) 本套教材的作者都有較高的學(xué)術(shù)造詣,有豐富的計算機(jī)基礎(chǔ)教育的經(jīng)驗,在教材中體現(xiàn)了研究會所倡導(dǎo)的思路和風(fēng)格,因而符合教學(xué)實踐,便于采用。
本套教材統(tǒng)一規(guī)劃,分批組織,陸續(xù)出版。希望能得到各位專家、老師和讀者的指正,我們將根據(jù)計算機(jī)技術(shù)的發(fā)展和廣大師生的寶貴意見及時修訂,使之不斷完善。
全國高等院校計算機(jī)基礎(chǔ)教育研究會榮譽會長
“中國高等院校計算機(jī)基礎(chǔ)教育課程體系規(guī)劃教材”編審委員會主任
前言
C語言是國內(nèi)外廣泛使用的計算機(jī)語言。許多高校都開設(shè)了“C語言程序設(shè)計”課程。作者于1991年編寫了《C程序設(shè)計》,由清華大學(xué)出版社出版,并于1999年、2005年和2010年進(jìn)行了三次修訂,受到了廣大讀者的歡迎,認(rèn)為概念清晰,敘述詳盡,例題豐富,深入淺出,通俗易懂,被大多數(shù)高校選為教材。至2017年5月該書已累計發(fā)行1400萬冊,成為國內(nèi)C語言教學(xué)的主流用書。
根據(jù)發(fā)展的需要,作者于2017年出版《C程序設(shè)計(第五版)》,為了配合該教材的教學(xué),同時編寫了這本《C程序設(shè)計(第五版)學(xué)習(xí)輔導(dǎo)》。
本書包括4個部分。
第1部分是《C程序設(shè)計(第五版)》習(xí)題和參考解答。在這一部分中包括了清華大學(xué)出版社出版的《C程序設(shè)計(第五版)》一書的全部習(xí)題。其中有些題的難度高于書中的例題,目的是使學(xué)生不滿足于已學(xué)過的內(nèi)容,而要舉一反三,善于拓展已有知識,提倡創(chuàng)新精神,培養(yǎng)解決問題的能力。希望教師能指定學(xué)生完成各章中有一定難度的習(xí)題。希望學(xué)生能盡量多做習(xí)題,以提高自己的水平。
為了方便讀者,本書提供了參考解答。除了其中少數(shù)概念問答題,由于能在教材中直接找到答案,為節(jié)省篇幅本書不另給出答案外,對所有編程題一律給出參考解答,包括程序代碼和運行結(jié)果。對于比較難的習(xí)題,除了給出程序(程序中加了注釋)外,還給出NS流程圖,并作了比較詳細(xì)的說明,以便于讀者理解。對于相對簡單的問題,只給出程序代碼和運行結(jié)果,不作詳細(xì)說明,以便給讀者留下思考的空間。對有些題目,我們給出了兩種參考答案,供讀者參考和比較,以啟發(fā)思路。
在這部分中提供了132個不同類型、不同難度的程序,全部程序都在Visual C++ 6.0環(huán)境下調(diào)試通過。由于篇幅和課時的限制,在教材和講授中不可能介紹很多例子,只能介紹一些典型的例題。本書中給出的程序?qū)嶋H上是對《C程序設(shè)計(第五版)》一書例題的補充,希望讀者能充分利用它。即使沒有時間自己做出全部習(xí)題,如果能把全部習(xí)題的參考解答都看一遍,而且都能看懂,理解不同程序的思路,也會大有裨益,能擴(kuò)大眼界,豐富知識。
應(yīng)該說明,本書給出的程序并非是唯一正確的解答,甚至不一定是最佳的一種。對同一個題目可以編出多種程序,我們給出的只是其中的一種。讀者在使用本書時,千萬不要照抄照搬,我們只是提供了一種參考方案,讀者完全可以編寫出更好的程序。
第2部分是深入學(xué)習(xí)C程序設(shè)計。包括預(yù)處理指令、位運算、常見錯誤分析和C程序案例,這是對教材內(nèi)容的補充。
“預(yù)處理指令”一章詳細(xì)地介紹預(yù)處理指令,使讀者對這些指令有系統(tǒng)的了解并善于利用它們,以提高編程效率。
位運算是C語言區(qū)別于其他高級語言的一個重要特點。C語言能對位進(jìn)行操作,使得C具有比較接近機(jī)器的特點。在編寫系統(tǒng)軟件和數(shù)據(jù)采集、檢測與控制中往往需要用到位運算。信息類專業(yè)的學(xué)生需要學(xué)習(xí)這方面的知識,因此,本書專門列出一章,介紹位運算的基本知識,供需要者選學(xué),信息類專業(yè)可以把它列入教學(xué)內(nèi)容。
“常見錯誤分析”是作者總結(jié)歸納的初學(xué)者常犯的35種錯誤,供讀者編寫程序時參考!癈程序案例”一章介紹了3個實用程序,可以幫助讀者把學(xué)習(xí)到的C程序設(shè)計的知識用于解決實際問題,能根據(jù)需要編寫應(yīng)用程序。在教材中,為了便于課堂教學(xué),例題程序的規(guī)模一般都不大。在學(xué)完各章內(nèi)容之后,需要綜合應(yīng)用已學(xué)過的知識,編寫一些應(yīng)用程序,同時提高編程能力。因此在本書中專門組織“C程序案例”一章,供讀者閱讀參考。這些案例很有實用價值。建議讀者在學(xué)完教材后,仔細(xì)閱讀這幾個案例,對于提高編程能力會有很大的幫助。
第3部分是C語言程序上機(jī)指南。介紹了Visual C++ 6.0和Visual Studio 2010集成環(huán)境下的上機(jī)方法,使讀者上機(jī)練習(xí)有所遵循。
第4部分是上機(jī)實踐指導(dǎo),介紹了程序調(diào)試和測試的初步知識,提出了上機(jī)實驗的目的與要求,并且安排了12個實驗,供各校安排實驗時參考。
可以看到,本書內(nèi)容很豐富,是學(xué)習(xí)《C程序設(shè)計(第五版)》的重要參考書?紤]到大多數(shù)學(xué)校的學(xué)時安排和多數(shù)初學(xué)者的基礎(chǔ),在主教材《C程序設(shè)計(第五版)》中只介紹程序設(shè)計的基本知識和C語言的最基本最常用的內(nèi)容,為以后進(jìn)一步學(xué)習(xí)和應(yīng)用打下一定的基礎(chǔ)。許多學(xué)生對C語言產(chǎn)生很大的興趣,希望了解更多一些,掌握更深入些,尤其有些大學(xué)生在參加科研和畢業(yè)后工作中要求具有編程的實際能力,希望有更多的指導(dǎo)。因此,作者精心編寫了本書,作為主教材的重要補充,幫助讀者有效地提高應(yīng)用能力。許多老師說,如果能把本書的習(xí)題全部獨立地做出來,C語言就基本過關(guān)了。希望廣大教師和讀者能充分利用本書提供的資源,共同提高C程序設(shè)計的教學(xué)質(zhì)量。
本書不僅可以作為《C程序設(shè)計(第五版) 》的配套教材,而且可以作為其他版本的C語言教材的參考書;既適用于高等學(xué)校教學(xué),也可供自學(xué)者參考。
本書的第14章由林小茶副教授編寫。薛淑斌、譚亦峰高級工程師參加了本書的編寫和修訂工作。
本書難免會有錯誤和不足之處,作者愿得到廣大讀者的指正。
譚浩強2017年5月
第1部分《C程序設(shè)計(第五版)》習(xí)題和參考解答
第1章程序設(shè)計和C語言1
第2章算法——程序的靈魂4
第3章最簡單的C程序設(shè)計——順序程序設(shè)計14
第4章選擇結(jié)構(gòu)程序設(shè)計24
第5章循環(huán)結(jié)構(gòu)程序設(shè)計37
第6章利用數(shù)組處理批量數(shù)據(jù)54
第7章用函數(shù)實現(xiàn)模塊化程序設(shè)計74
第8章善于利用指針99
第9章用戶自己建立數(shù)據(jù)類型128
第10章對文件的輸入輸出159
第2部分深入學(xué)習(xí)C程序設(shè)計
第11章預(yù)處理指令177
11.1宏定義178
11.1.1不帶參數(shù)的宏定義178
11.1.2帶參數(shù)的宏定義181
11.2“文件包含”處理186
11.3條件編譯189
第12章位運算193
12.1位運算和位運算符193
12.1.1“按位與”運算193
12.1.2“按位或”運算194
12.1.3“異或”運算195
12.1.4“取反”運算196
12.1.5左移運算197
12.1.6右移運算197
12.1.7位運算賦值運算符198
12.1.8不同長度的數(shù)據(jù)進(jìn)行位運算198
12.2位運算舉例198
12.3位段200
第13章常見錯誤分析204
第14章C程序案例219
14.1案例1個人所得稅計算219
14.2案例2學(xué)生試卷分?jǐn)?shù)統(tǒng)計223
14.3案例3電話訂餐信息處理229
第3部分C語言程序上機(jī)指南
第15章怎樣使用Visual C++ 6.0運行程序239
15.1Visual C++ 6.0的安裝和啟動240
15.2輸入和編輯源程序240
15.2.1新建一個C源程序的方法241
15.2.2打開一個已有的程序243
15.2.3通過已有的程序建立一個新程序的方法243
15.3編譯、連接和運行243
15.3.1程序的編譯243
15.3.2程序的調(diào)試244
15.3.3程序的連接247
15.3.4程序的執(zhí)行248
15.4建立和運行包含多個文件的程序的方法249
15.4.1由用戶建立項目工作區(qū)和項目文件249
15.4.2用戶只建立項目文件253
第16章用Visual Studio 2010運行C程序256
16.1關(guān)于Visual Studio 2010256
16.2怎樣建立新項目257
16.3怎樣建立文件260
16.4怎樣進(jìn)行編譯262
16.5怎樣運行程序263
16.6怎樣打開項目中已有的文件264
16.7怎樣編輯和運行一個包含多文件的程序265
16.8關(guān)于用Visual Studio 2010編寫和運行C程序的說明268
第4部分上機(jī)實踐指導(dǎo)
第17章程序的調(diào)試與測試269
17.1程序的調(diào)試269
17.2程序錯誤的類型271
17.3程序的測試273
第18章上機(jī)實驗的目的和要求278
18.1上機(jī)實驗的目的 278
18.2上機(jī)實驗前的準(zhǔn)備工作279
18.3上機(jī)實驗的步驟279
18.4實驗報告279
18.5實驗內(nèi)容安排的原則280
第19章實驗安排281
19.1實驗1C程序的運行環(huán)境和運行C程序的方法281
19.2實驗2數(shù)據(jù)類型、運算符和簡單的輸入輸出283
19.3實驗3最簡單的C程序設(shè)計——順序程序設(shè)計286
19.4實驗4選擇結(jié)構(gòu)程序設(shè)計287
19.5實驗5循環(huán)結(jié)構(gòu)程序設(shè)計288
19.6實驗6數(shù)組289
19.7實驗7函數(shù)(一)290
19.8實驗8函數(shù)(二)291
19.9實驗9指針(一)292
19.10實驗10指針(二)293
19.11實驗11用戶自己建立數(shù)據(jù)類型294
19.12實驗12文件操作295
參考文獻(xiàn)296