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