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