關(guān)于我們
書單推薦
新書推薦
|
中國(guó)高等院校計(jì)算機(jī)基礎(chǔ)教育課程體系規(guī)劃教材:C程序設(shè)計(jì)(第4版)
從20世紀(jì)70年代末、80年代初開(kāi)始,我國(guó)的高等院校開(kāi)始面向各個(gè)專業(yè)的全體大學(xué)生開(kāi)展計(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)該引起各方面的充分重視。
20世紀(jì)90年代以來(lái),C語(yǔ)言迅速在全世界普及推廣。無(wú)論在中國(guó)還是在世界各國(guó),“C語(yǔ)言程序設(shè)計(jì)”始終是高等學(xué)校的一門基本的計(jì)算機(jī)課程。C語(yǔ)言程序設(shè)計(jì)在計(jì)算機(jī)教育和計(jì)算機(jī)應(yīng)用中發(fā)揮著重要的作用。
作者于1991年編著了《C程序設(shè)計(jì)》一書,由清華大學(xué)出版社出版。該書針對(duì)初學(xué)者的特點(diǎn)和認(rèn)知規(guī)律,精選內(nèi)容,分散難點(diǎn),降低臺(tái)階,例題豐富,深入淺出。出版后受到廣大讀者的熱烈歡迎。許多讀者說(shuō)“C語(yǔ)言原來(lái)是比較難學(xué)的,但自從《C程序設(shè)計(jì)》出版后,C語(yǔ)言變得不難學(xué)了”。根據(jù)C語(yǔ)言的發(fā)展和教學(xué)的實(shí)踐,作者先后對(duì)該書進(jìn)行了兩次大的修訂,先后重印160多次,累計(jì)發(fā)行超過(guò)1100萬(wàn)冊(cè),平均每年印刷60萬(wàn)冊(cè),成為我國(guó)廣大初學(xué)者學(xué)習(xí)C語(yǔ)言程序設(shè)計(jì)的主流用書。國(guó)內(nèi)許多介紹C語(yǔ)言的書籍多以本書為藍(lán)本。本書曾榮獲原電子工業(yè)部?jī)?yōu)秀教材一等獎(jiǎng)、全國(guó)高等院校計(jì)算機(jī)基礎(chǔ)教育研究會(huì)優(yōu)秀教材一等獎(jiǎng)、全國(guó)高校出版社優(yōu)秀暢銷書特等獎(jiǎng)。這是對(duì)我的莫大鼓勵(lì)和鞭策。 在此書再版之際,作者想對(duì)學(xué)習(xí)程序設(shè)計(jì)問(wèn)題提出以下幾點(diǎn)看法。 1. 為什么要學(xué)習(xí)程序設(shè)計(jì) 大學(xué)生不能滿足于只會(huì)用辦公軟件,應(yīng)當(dāng)有更高的要求,對(duì)于理工科的學(xué)生尤其如此。 計(jì)算機(jī)的本質(zhì)是“程序的機(jī)器”,程序和指令的思想是計(jì)算機(jī)系統(tǒng)中最基本的概念。程序設(shè)計(jì)是軟件開(kāi)發(fā)人員的基本功。只有懂得程序設(shè)計(jì),才能進(jìn)一步懂得計(jì)算機(jī),真正了解計(jì)算機(jī)是怎樣工作的。通過(guò)學(xué)習(xí)程序設(shè)計(jì),學(xué)會(huì)進(jìn)一步了解計(jì)算機(jī)的工作原理,更好地理解和應(yīng)用計(jì)算機(jī);掌握用計(jì)算機(jī)處理問(wèn)題的方法;培養(yǎng)分析問(wèn)題和解決問(wèn)題的能力;具有編制程序的初步能力。即使將來(lái)不是計(jì)算機(jī)專業(yè)人員,由于學(xué)過(guò)程序設(shè)計(jì),理解軟件生產(chǎn)的特點(diǎn)和生產(chǎn)過(guò)程,就能與程序開(kāi)發(fā)人員更好地溝通與合作,開(kāi)展本領(lǐng)域中的計(jì)算機(jī)應(yīng)用,開(kāi)發(fā)與本領(lǐng)域有關(guān)的應(yīng)用程序。 因此,無(wú)論計(jì)算機(jī)專業(yè)學(xué)生還是非計(jì)算機(jī)專業(yè)學(xué)生,都應(yīng)當(dāng)學(xué)習(xí)程序設(shè)計(jì)知識(shí),并且把它作為進(jìn)一步學(xué)習(xí)與應(yīng)用計(jì)算機(jī)的基礎(chǔ)。 2. 為什么選擇C語(yǔ)言 進(jìn)行程序設(shè)計(jì),必須用一種計(jì)算機(jī)語(yǔ)言作為工具,否則只是紙上談兵。可供選擇的語(yǔ)言很多,各有特點(diǎn)和應(yīng)用領(lǐng)域。C語(yǔ)言功能豐富、表達(dá)能力強(qiáng)、使用靈活方便、應(yīng)用面廣、目標(biāo)程序效率高、可移植性好,既具有高級(jí)語(yǔ)言的優(yōu)點(diǎn),又具有低級(jí)語(yǔ)言的許多特點(diǎn),既適于編寫系統(tǒng)軟件,又能方便地用來(lái)編寫應(yīng)用軟件。 有人以為C++語(yǔ)言出現(xiàn)后,C語(yǔ)言過(guò)時(shí)了,淘汰了,這是一種誤解。C++是為處理較大規(guī)模的程序開(kāi)發(fā)而研制的大型語(yǔ)言,它比C語(yǔ)言復(fù)雜得多,難學(xué)得多。事實(shí)上,將來(lái)并不是每個(gè)人都需要用C++編制大型程序。C語(yǔ)言是更為基本的。美國(guó)一位資深軟件專家寫了一篇文章,題目是“對(duì)計(jì)算機(jī)系學(xué)生的建議”,是經(jīng)驗(yàn)之談,可供參考。他說(shuō)“大學(xué)生畢業(yè)前要學(xué)好C語(yǔ)言,C語(yǔ)言是當(dāng)前程序員共同的語(yǔ)言。它使程序員互相溝通,比你在大學(xué)學(xué)到的‘現(xiàn)代語(yǔ)言’(比如ML語(yǔ)言、Java語(yǔ)言、Python語(yǔ)言或者正在教授的流行語(yǔ)言)都更接近機(jī)器”。他指出: “不管你懂得多少延續(xù)、閉包、異常處理,只要你不能解釋為什么while(s++=t++)的作用是復(fù)制字符串,那你就是在盲目無(wú)知的情況下編程,就像一個(gè)醫(yī)生不懂最基本的解剖學(xué)就在開(kāi)處方”。 C語(yǔ)言更適合于解決某些小型程序的編程。C語(yǔ)言作為傳統(tǒng)的面向過(guò)程的程序設(shè)計(jì)語(yǔ)言,在編寫底層的設(shè)備驅(qū)動(dòng)程序和內(nèi)嵌應(yīng)用程序時(shí),往往是更好的選擇。 現(xiàn)在大多數(shù)高校把C語(yǔ)言作為第一門計(jì)算機(jī)語(yǔ)言進(jìn)行程序設(shè)計(jì)教學(xué),這是合適的,有了C的基礎(chǔ),在需要時(shí)進(jìn)一步學(xué)習(xí)C++,也是很容易過(guò)渡的。 3. 怎樣組織程序設(shè)計(jì)的教學(xué)?怎樣處理算法和語(yǔ)言的關(guān)系 要進(jìn)行程序設(shè)計(jì),要解決兩個(gè)問(wèn)題: (1) 要學(xué)習(xí)和掌握解決問(wèn)題的思路和方法,即算法; (2) 學(xué)習(xí)怎樣實(shí)現(xiàn)算法,即用計(jì)算機(jī)語(yǔ)言編寫程序,達(dá)到用計(jì)算機(jī)解題的目的。 因此,課程的內(nèi)容應(yīng)當(dāng)主要包括兩個(gè)方面: 算法和語(yǔ)言。算法是靈魂,不掌握算法就是無(wú)米之炊。語(yǔ)言是工具,不掌握語(yǔ)言,編程就成了空中樓閣。二者都是必要的,缺一不可。作者的做法是: 以程序設(shè)計(jì)為中心,把二者緊密結(jié)合起來(lái),既不能孤立地抽象地研究算法,更不能孤立地枯燥地學(xué)習(xí)語(yǔ)法。 算法是重要的,但本課程不是專門研究算法與邏輯的理論課程,不可能系統(tǒng)全面地介紹算法;也不是脫離語(yǔ)言環(huán)境研究算法,而是在學(xué)習(xí)編程的過(guò)程中,介紹有關(guān)的典型算法,引導(dǎo)學(xué)生思考怎樣構(gòu)造一個(gè)算法。編寫程序的過(guò)程就是設(shè)計(jì)算法的過(guò)程。 語(yǔ)言工具也是重要的,掌握基本的語(yǔ)法規(guī)則是編程的基礎(chǔ),如果不掌握必要的語(yǔ)法規(guī)則,連最簡(jiǎn)單的程序也編不出來(lái),或者編出來(lái)的程序錯(cuò)誤百出,無(wú)法運(yùn)行。但是掌握C語(yǔ)言絕不能靠死學(xué)死記,就像熟讀英語(yǔ)的語(yǔ)法不一定會(huì)寫英文文章,靠字典是學(xué)不好外語(yǔ)的。如果你去看C語(yǔ)言標(biāo)準(zhǔn)文本,可能感覺(jué)如看“天書”一樣,恐怕只有計(jì)算機(jī)專家才能看懂。絕不能把程序設(shè)計(jì)課程變成枯燥地介紹語(yǔ)法的課程,學(xué)習(xí)語(yǔ)法要服務(wù)于編程。 在30年前我們編寫《BASIC語(yǔ)言》時(shí)就已經(jīng)遇到了這個(gè)問(wèn)題,我們堅(jiān)決摒棄了孤立地介紹語(yǔ)法的做法,而是以程序設(shè)計(jì)為中心,把算法與語(yǔ)言緊密結(jié)合起來(lái)。不是根據(jù)語(yǔ)言規(guī)則的分類和順序作為教學(xué)和教材的章節(jié)和順序,而是從應(yīng)用的角度切入,以編程為目的,以編程為主線,從初學(xué)者的認(rèn)知規(guī)律出發(fā),由淺入深,由易到難,構(gòu)造了教材和教學(xué)的體系。一開(kāi)始就讓學(xué)生看懂簡(jiǎn)單的程序,編寫簡(jiǎn)單的程序,然后逐步深入。語(yǔ)法規(guī)則不是通過(guò)孤立的學(xué)習(xí)而是在學(xué)習(xí)編程的過(guò)程中學(xué)到的。隨著編程難度的逐步提高,算法和語(yǔ)法的學(xué)習(xí)同步趨于深入。學(xué)生在富有創(chuàng)意、引人入勝的編程中,學(xué)會(huì)了算法,掌握了語(yǔ)法,把枯燥無(wú)味的語(yǔ)法規(guī)則變成生動(dòng)活潑的編程應(yīng)用。事實(shí)證明這種做法是成功的。多年來(lái),我們堅(jiān)持和發(fā)展了這種行之有效的方法,取得了很好的效果。 近年來(lái)許多學(xué)校的經(jīng)驗(yàn)表明,按照這種思路進(jìn)行教學(xué),教師容易教,學(xué)生容易學(xué),效果很好。 4. 怎樣學(xué)習(xí)C程序設(shè)計(jì) (1) 要著眼于培養(yǎng)能力。C語(yǔ)言程序設(shè)計(jì)并不是一門純理論的課程,而是一門應(yīng)用的課程。應(yīng)當(dāng)注意培養(yǎng)分析問(wèn)題的能力、構(gòu)造算法的能力、編程的能力和調(diào)試程序的能力。 (2) 要把重點(diǎn)放在解題的思路上,通過(guò)大量的例題學(xué)習(xí)怎樣設(shè)計(jì)一個(gè)算法,構(gòu)造一個(gè)程序。初學(xué)時(shí)更不要在語(yǔ)法細(xì)節(jié)上死背死摳。一開(kāi)始就要學(xué)會(huì)看懂程序,編寫簡(jiǎn)單的程序,然后逐步深入。語(yǔ)法細(xì)節(jié)是需要通過(guò)較長(zhǎng)期的實(shí)踐才能熟練掌握的。初學(xué)時(shí),切忌過(guò)早地濫用C語(yǔ)言的某些容易引起錯(cuò)誤的細(xì)節(jié)(如不適當(dāng)?shù)厥褂?+和--)。 (3) 掌握基本要求,注意打好基礎(chǔ)。在學(xué)校學(xué)習(xí)階段,主要是學(xué)習(xí)程序設(shè)計(jì)的方法,進(jìn)行程序設(shè)計(jì)的基本訓(xùn)練,為將來(lái)進(jìn)一步學(xué)習(xí)和應(yīng)用打下基礎(chǔ)。不可能通過(guò)幾十小時(shí)的學(xué)習(xí),由一個(gè)門外漢變成編程高手,編寫出大型而實(shí)用的程序,要求應(yīng)當(dāng)實(shí)事求是。如果學(xué)時(shí)有限,有些較深入的內(nèi)容可以選學(xué)或自學(xué),把精力放在最基本、最常用的內(nèi)容上,學(xué)好基本功。 (4) 要十分重視實(shí)踐環(huán)節(jié)。光靠聽(tīng)課和看書是學(xué)不會(huì)程序設(shè)計(jì)的,學(xué)習(xí)本課程既要掌握概念,又必須動(dòng)手編程,還要親自上機(jī)調(diào)試運(yùn)行。讀者一定要重視實(shí)踐環(huán)節(jié),包括編程和上機(jī)。既會(huì)編寫程序,又會(huì)調(diào)試程序。學(xué)得好與壞,不是看你“知不知道”,而是“會(huì)不會(huì)干”。考核方法應(yīng)當(dāng)是編寫程序和調(diào)試程序,而不應(yīng)該只采用是非題和選擇題。 (5) 要舉一反三。學(xué)習(xí)程序設(shè)計(jì),主要是掌握程序設(shè)計(jì)的思路和方法。學(xué)會(huì)使用一種計(jì)算機(jī)語(yǔ)言編程,在需要時(shí)改用另一種語(yǔ)言應(yīng)當(dāng)不會(huì)太困難。不能設(shè)想今后一輩子只使用在學(xué)校里學(xué)過(guò)的某一種語(yǔ)言。但是無(wú)論用哪一種語(yǔ)言進(jìn)行程序設(shè)計(jì),其基本規(guī)律是一樣的。在學(xué)習(xí)時(shí)一定要學(xué)活用活,舉一反三,掌握規(guī)律,在以后需要時(shí)能很快地掌握其他新的語(yǔ)言進(jìn)行編程。 (6) 要提倡和培養(yǎng)創(chuàng)新精神。教師和學(xué)生都不應(yīng)當(dāng)局限于教材中的內(nèi)容,應(yīng)該啟發(fā)學(xué)生的學(xué)習(xí)興趣和創(chuàng)新意識(shí)。能夠在教材程序的基礎(chǔ)上,思考更多的問(wèn)題,編寫難度更大的程序。在本書每章的習(xí)題中,包括了一些難度較大的題目,建議學(xué)生盡量選做,學(xué)會(huì)自己發(fā)展知識(shí),提高能力。 (7) 如果對(duì)學(xué)生有較高的程序設(shè)計(jì)要求,應(yīng)當(dāng)在學(xué)習(xí)本課程后,安排一次集中的課程設(shè)計(jì)環(huán)節(jié),要求學(xué)生獨(dú)立完成一個(gè)有一定規(guī)模的程序。 5. 從實(shí)際出發(fā),區(qū)別對(duì)待 學(xué)習(xí)本課程的有計(jì)算機(jī)專業(yè)學(xué)生,也有非計(jì)算機(jī)專業(yè)的大學(xué)生;有本科生,也有?(高職)學(xué)生;有重點(diǎn)大學(xué)的學(xué)生,也有一般大學(xué)的學(xué)生。情況各異,要求不同,必須從實(shí)際出發(fā),制訂出切實(shí)可行的教學(xué)要求和教學(xué)方案,切忌脫離實(shí)際的一刀切。 例如,對(duì)計(jì)算機(jī)專業(yè)學(xué)生,要求應(yīng)當(dāng)比非計(jì)算機(jī)專業(yè)高,尤其是對(duì)算法的要求應(yīng)當(dāng)高一些,不僅會(huì)用現(xiàn)成的算法,還應(yīng)當(dāng)會(huì)設(shè)計(jì)一般的算法。最好能在學(xué)完本課程后獨(dú)立完成一個(gè)有一定規(guī)模的程序。 對(duì)高職學(xué)生的要求應(yīng)不同于本科生,更不應(yīng)搬用重點(diǎn)大學(xué)的做法,不宜在算法上要求太高,因?yàn)楦呗毑皇桥囵B(yǎng)設(shè)計(jì)算法的人才,而應(yīng)切實(shí)掌握語(yǔ)言工具,具有較強(qiáng)的動(dòng)手和實(shí)踐能力,例如編碼能力、調(diào)試能力。 對(duì)基礎(chǔ)較好、學(xué)生程度較高的學(xué)校,可以少講多練,強(qiáng)調(diào)自學(xué),有的內(nèi)容課堂上可以不講或少講,指定學(xué)生自學(xué)。引導(dǎo)學(xué)生通過(guò)自學(xué)和實(shí)踐發(fā)展知識(shí),盡可能完成一些難度較高的習(xí)題。 6. 為什么要修訂《C程序設(shè)計(jì)》 任何工作都要與時(shí)俱進(jìn),不斷完善,追求完美。計(jì)算機(jī)科學(xué)技術(shù)不斷發(fā)展,C語(yǔ)言也在發(fā)展,在高校計(jì)算機(jī)教學(xué)過(guò)程中不斷累積了新的經(jīng)驗(yàn),廣大讀者在學(xué)習(xí)過(guò)程中也對(duì)本書提出了一些新的期望和建議。因此,作者對(duì)《C程序設(shè)計(jì)》一書再次進(jìn)行修訂,第四版保持了前三版的寫作風(fēng)格,保持了概念清晰、通俗易懂的特點(diǎn),并在以下幾個(gè)方面作了修改: (1) 按照C 99標(biāo)準(zhǔn)進(jìn)行介紹,以適應(yīng)C語(yǔ)言的發(fā)展,使程序更加規(guī)范。 目前大多數(shù)介紹C語(yǔ)言的教材是按照C 89標(biāo)準(zhǔn)介紹的,本書按照C 99的規(guī)定進(jìn)行介紹,程序符合C 99的要求。例如: ① 數(shù)據(jù)類型介紹中,增加了C 99擴(kuò)充的雙長(zhǎng)整型(long long int)、復(fù)數(shù)浮點(diǎn)型(float_complex,double_complex,long long _complex)、布爾型(bool)等,使讀者有所了解。 ② C 99要求,main函數(shù)的類型一律指定為int型,并在函數(shù)的末尾加一個(gè)返回語(yǔ)句“return 0;”。 ③ C 99增加了注釋行的新形式——以雙鈄線//開(kāi)始的內(nèi)容作為注釋行,這本來(lái)是C++的注釋行形式,現(xiàn)在C 99把它擴(kuò)充進(jìn)來(lái)了,使編程更加方便。同時(shí)保留了原來(lái)的/……/形式,以使原來(lái)按C 89標(biāo)準(zhǔn)編寫的程序可以不加修改仍可使用。本書采用C 99的注釋新形式,讀者使用更方便,而且符合發(fā)展需要。因此,本書的程序基本上采用下面的形式: #include int main()//指定main函數(shù)為int類型 { return 0;//如函數(shù)正常執(zhí)行,返回整數(shù)0 } ④ C 99增加的其他一些具體內(nèi)容,在書中有關(guān)章節(jié)中專門注明,以提醒讀者。 由于C 99是在C 89的基礎(chǔ)上增加或擴(kuò)充一些功能而成的,因此C 89和C 99基本上是兼容的。用C 89編寫的程序在C 99環(huán)境下仍然可以運(yùn)行。C 99所增加的有些新的功能和規(guī)則,是在編制比較復(fù)雜的程序時(shí)為方便使用和提高效率而用的,本書對(duì)目前暫時(shí)用不到的內(nèi)容不作介紹,以免讀者分心,增加學(xué)習(xí)難度。在將來(lái)進(jìn)行深入編程時(shí)再逐步了解和學(xué)習(xí)。 目前社會(huì)上使用的一些C編譯系統(tǒng),有的并未實(shí)現(xiàn)C 99的要求,有的實(shí)現(xiàn)了C 99的部分功能。 考慮到讀者上機(jī)實(shí)踐的條件,本書中的例題程序都可以在目前廣泛使用的C++編譯系統(tǒng)中使用。 (2) 考慮到國(guó)內(nèi)當(dāng)前的情況和讀者使用的方便,本書中的程序是用Visual C++ 6.0編譯的,運(yùn)行結(jié)果也是在Visual C++ 6.0環(huán)境下得到的。在分析時(shí)也以Visual C++ 6.0環(huán)境為例進(jìn)行介紹。如果采用其他編譯系統(tǒng),也大同小異,不會(huì)產(chǎn)生任何問(wèn)題。 (3) 加強(qiáng)算法。第2章專門介紹算法的概念、算法的特點(diǎn)、表示算法的工具以及怎樣設(shè)計(jì)算法,并通過(guò)一些簡(jiǎn)單的例子說(shuō)明怎樣構(gòu)造一個(gè)算法。使讀者有一個(gè)初步的、基本的了解。在以后各章中,由淺入深地結(jié)合例題介紹各種典型的算法,并且馬上用C語(yǔ)言實(shí)現(xiàn)此算法,寫出程序。這樣就使算法與程序緊密結(jié)合,而且通過(guò)運(yùn)行程序,得到結(jié)果,便于驗(yàn)證算法的正確性。學(xué)習(xí)時(shí)不會(huì)覺(jué)得抽象,而會(huì)覺(jué)得算法具體有趣,看得見(jiàn),摸得著。 在各例題中,在給出問(wèn)題后,都先進(jìn)行分析問(wèn)題,介紹解題思路,也就是構(gòu)造算法,然后才是根據(jù)算法編寫程序,而不是先列出程序再解釋程序,從中了解算法。這樣做,更符合讀者認(rèn)知規(guī)律,更容易理解算法,也引導(dǎo)讀者在做題時(shí)先考慮算法再編程,而不是坐下來(lái)就寫程序。培養(yǎng)好的習(xí)慣。 (4) 更加通俗易懂,容易學(xué)習(xí)。作者充分考慮到廣大初學(xué)者的情況,精心設(shè)計(jì)體系,適當(dāng)降低門檻,便于讀者入門。盡量少用深?yuàn)W難懂的專業(yè)術(shù)語(yǔ),用通俗易懂的方法和語(yǔ)言闡述清楚復(fù)雜的概念,使復(fù)雜的問(wèn)題簡(jiǎn)單化。沒(méi)有學(xué)過(guò)計(jì)算機(jī)原理和高等數(shù)學(xué)的讀者完全可以掌握本書的內(nèi)容。 本書采用作者提出的“提出問(wèn)題—解決問(wèn)題—?dú)w納分析”的新的教學(xué)三部曲,先具體后抽象,先實(shí)際后理論,先個(gè)別后一般。而不是先抽象后具體,先理論后實(shí)際,先一般后個(gè)別。在介紹每個(gè)例題時(shí),都采取以下的步驟: 給出問(wèn)題—解題思路—編寫程序—運(yùn)行結(jié)果—程序分析—有關(guān)說(shuō)明,使讀者很容易理解。即使沒(méi)有教師講解,讀者也能看懂本書的內(nèi)容,就有可能做到,教師少講,提倡自學(xué),上機(jī)實(shí)踐。 (5) 重新組織內(nèi)容。根據(jù)近年來(lái)各校教學(xué)中的實(shí)際情況,作者對(duì)本書內(nèi)容作了以下調(diào)整: ① 根據(jù)非計(jì)算機(jī)專業(yè)學(xué)生的培養(yǎng)要求和將來(lái)工作的情況,在教材中不再包括“位運(yùn)算”一章。考慮到有部分讀者需要學(xué)習(xí)這部分內(nèi)容,將“位運(yùn)算”的內(nèi)容列入《C程序設(shè)計(jì)(第四版)學(xué)習(xí)輔導(dǎo)》一書中,供選學(xué)。 ② 取消《C程序設(shè)計(jì)(第三版)》中的第3章“數(shù)據(jù)類型、運(yùn)算符與表達(dá)式”。這章內(nèi)容涉及數(shù)據(jù)在計(jì)算機(jī)內(nèi)存中的存儲(chǔ)形式,讀者感到一開(kāi)始就接觸這些內(nèi)容比較難學(xué)。在第四版中,對(duì)這些內(nèi)容進(jìn)行精簡(jiǎn),不再單獨(dú)列章,將其中最基本的、必須了解的內(nèi)容結(jié)合在第3章“最簡(jiǎn)單的C程序設(shè)計(jì)”中介紹,這樣可以降低學(xué)習(xí)難度。 ③ 第三版包括“預(yù)處理命令”一章,考慮到這章的內(nèi)容不是最基本的,在第四版中對(duì)它不作詳細(xì)的介紹,而把它放在《C程序設(shè)計(jì)(第四版)學(xué)習(xí)輔導(dǎo)》一書中,供選學(xué)。 ④ 考慮到絕大多數(shù)讀者在學(xué)習(xí)本課程之前未學(xué)習(xí)過(guò)其他計(jì)算機(jī)語(yǔ)言,缺乏對(duì)計(jì)算機(jī)語(yǔ)言和程序的基本了解,把第三版的第1章“C語(yǔ)言概述”改為“程序設(shè)計(jì)和C語(yǔ)言”,在這一章中增加了計(jì)算機(jī)語(yǔ)言和程序的基本知識(shí)。 ⑤ 許多學(xué)校把本課程放在一年級(jí)學(xué)習(xí),此時(shí)還未學(xué)習(xí)或未學(xué)完高等數(shù)學(xué),在學(xué)本課程時(shí)對(duì)有關(guān)高等教學(xué)的程序感到有困難,在第四版中不再包括有關(guān)高等數(shù)學(xué)的內(nèi)容,具有高中以上文化程度的讀者都能看懂本書。 ⑥ 在第三版的“結(jié)構(gòu)體與共用體”一章中有設(shè)計(jì)鏈表(鏈表的建立、插入、刪除和輸出等)的內(nèi)容,對(duì)于非計(jì)算機(jī)專業(yè)學(xué)生來(lái)說(shuō),難度較大。作者認(rèn)為,這部分內(nèi)容對(duì)非計(jì)算機(jī)專業(yè)可以不作為基本要求,在第四版中對(duì)這部分內(nèi)容作了精簡(jiǎn),只對(duì)鏈表作簡(jiǎn)單的介紹,讀者對(duì)之有一定了解即可。考慮到這部分對(duì)計(jì)算機(jī)專業(yè)學(xué)生是需要的,我們把有關(guān)鏈表的詳細(xì)內(nèi)容作為習(xí)題供選做,并在《C程序設(shè)計(jì)(第四版)學(xué)習(xí)輔導(dǎo)》一書的習(xí)題解答中給出完整的程序,供需要者參考。 ⑦ 專門編寫了“C程序案例” 一章,綜合應(yīng)用各章的知識(shí)。提供了不同難度、不同類型的程序。閱讀這些程序,可以使學(xué)生了解怎樣去編寫應(yīng)用程序,提高自己的編程能力。這部分內(nèi)容安排在《C程序設(shè)計(jì)(第四版)學(xué)習(xí)輔導(dǎo)》一書中,供需要者參考。 相信經(jīng)過(guò)修改后,本書會(huì)更加容易學(xué)習(xí),效果更好。 7. 為了滿足不同的需要,出版不同層次的C程序設(shè)計(jì)教材 全國(guó)各校的情況不同,學(xué)生的基礎(chǔ)和學(xué)習(xí)要求也不盡同,不可能都采用同一本教材。教材應(yīng)當(dāng)滿足多層次多樣化的要求。許多學(xué)校的老師認(rèn)為《C程序設(shè)計(jì)》是一本經(jīng)過(guò)長(zhǎng)期教學(xué)實(shí)踐檢驗(yàn)的優(yōu)秀教材,其內(nèi)容與風(fēng)格已為廣大師生所熟悉,希望在《C程序設(shè)計(jì)》的基礎(chǔ)上組織不同層次的教材,供不同對(duì)象選用。作者與清華大學(xué)出版社反復(fù)研究,決定出版C程序設(shè)計(jì)的系列教材,包括以下3種: (1) 《C程序設(shè)計(jì)(第四版)》,即本書。本書系統(tǒng)全面,內(nèi)容深入,講授詳盡,包含了許多其他教材中沒(méi)有的內(nèi)容,尤其是針對(duì)編程實(shí)踐中容易出現(xiàn)的問(wèn)題作了提醒和分析,是學(xué)習(xí)C語(yǔ)言程序設(shè)計(jì)的理想教材。適合程度較高、基礎(chǔ)較好的學(xué)校和讀者使用。 (2) 《C程序設(shè)計(jì)教程》。以《C程序設(shè)計(jì)》一書的內(nèi)容為基礎(chǔ),適當(dāng)減少內(nèi)容,突出重點(diǎn),緊扣最基本的要求,適合學(xué)時(shí)相對(duì)較少的本科院校使用。該書已被教育部正式列為“普通高等教育國(guó)家級(jí)規(guī)劃教材”。 (3) 《C語(yǔ)言程序設(shè)計(jì)(第2版)》。內(nèi)容更加精練,要求適當(dāng)降低,寫法上更加通俗易懂,適合應(yīng)用型大學(xué)和程度較好的高職院校使用。該書亦已列為“普通高等教育國(guó)家級(jí)規(guī)劃教材”和普通高等教育精品教材。 為了幫助讀者學(xué)習(xí)本書,作者同時(shí)編寫了《C程序設(shè)計(jì)(第四版)學(xué)習(xí)輔導(dǎo)》,內(nèi)容包括: 本書各章習(xí)題的參考答案;位運(yùn)算;C程序案例;Visual C++集成環(huán)境的使用方法;程序的調(diào)試與測(cè)試;上機(jī)實(shí)習(xí)指導(dǎo)等。該書由清華大學(xué)出版社于2010年與本書同時(shí)出版。 在本書出版之際,作者衷心感謝全國(guó)高等院校計(jì)算機(jī)基礎(chǔ)教育研究會(huì)和全國(guó)各高校教師多年來(lái)始終不渝的關(guān)心與鼎力支持,感謝廣大讀者給予我的理解與厚愛(ài),感謝清華大學(xué)出版社30年來(lái)的密切合作與支持。沒(méi)有這一切,我不可能取得今天的成就。我永遠(yuǎn)感謝曾經(jīng)幫助和支持過(guò)我的、相識(shí)的和不相識(shí)的同志和朋友。 薜淑斌和譚亦峰高級(jí)工程師參加了本書的研討并編寫部分程序。由于作者水平有限,本書肯定會(huì)有不少缺點(diǎn)和不足,熱切期望得到專家和讀者的批評(píng)指正。 譚浩強(qiáng)謹(jǐn)識(shí)2010年3月于清華園 對(duì)使用本教材的建議 (1) 本書是作為高等學(xué)校學(xué)生學(xué)習(xí)C程序設(shè)計(jì)的教材,對(duì)象是沒(méi)有學(xué)過(guò)計(jì)算機(jī)程序設(shè)計(jì)的大學(xué)生。本書既注重概念清晰,使讀者建立起對(duì)程序設(shè)計(jì)和C語(yǔ)言的清晰理解,又注意引導(dǎo)學(xué)生學(xué)以致用,使學(xué)生在較短的時(shí)間內(nèi)初步學(xué)會(huì)用C語(yǔ)言編寫程序,具有初步的編程知識(shí)和能力,而不是僅停留在理論知識(shí)層面上。雖然如此,本書與就業(yè)上崗前的職業(yè)培訓(xùn)教材是有區(qū)別的,也不是供軟件開(kāi)發(fā)人員使用的手冊(cè)和技術(shù)規(guī)范,本書帶有基礎(chǔ)的性質(zhì),主要幫助學(xué)生學(xué)習(xí)程序設(shè)計(jì)方法,學(xué)習(xí)怎樣去編寫程序,為以后的進(jìn)一步提高與應(yīng)用打好基礎(chǔ)。如果讀者準(zhǔn)備從事軟件開(kāi)發(fā)工作,可以在學(xué)習(xí)本書的基礎(chǔ)上進(jìn)一步學(xué)習(xí)有關(guān)專業(yè)知識(shí)和職業(yè)要求。 (2) 本書系統(tǒng)全面,內(nèi)容豐富,供基礎(chǔ)較好的學(xué)校和學(xué)生學(xué)習(xí)。建議采取課堂講授與自學(xué)相結(jié)合的方法。在課堂上教師主要介紹編程思路和怎樣用C語(yǔ)言去實(shí)現(xiàn)算法,不要孤立地一一介紹語(yǔ)法的細(xì)節(jié),但是要在介紹程序時(shí)重點(diǎn)指出關(guān)鍵之處,以及容易出錯(cuò)的地方。要求學(xué)生通過(guò)自己上機(jī)實(shí)踐來(lái)理解程序設(shè)計(jì)方法,學(xué)會(huì)正確使用C語(yǔ)言工具,具有初步編程能力。語(yǔ)法不是靠講和背學(xué)會(huì)的,而是在實(shí)踐中掌握的。 (3) 在本書第11章“常見(jiàn)錯(cuò)誤分析”中列舉了初學(xué)者在編程序時(shí)常出現(xiàn)的錯(cuò)誤,這是作者在多年教學(xué)實(shí)踐中收集和總結(jié)出來(lái)的,是很有價(jià)值的,希望教師和同學(xué)能充分利用這個(gè)資源。教師可以結(jié)合教學(xué)提醒學(xué)生避免出現(xiàn)類似的錯(cuò)誤。學(xué)生在學(xué)習(xí)過(guò)程中可以隨時(shí)翻閱,了解在什么情況下容易出錯(cuò)。在經(jīng)過(guò)一段時(shí)間的編程和上機(jī)實(shí)踐后,再系統(tǒng)地閱讀一下,回顧和總結(jié)自己易出錯(cuò)的問(wèn)題,這樣可以減少錯(cuò)誤,提高編程效率。 (4) 要善于利用習(xí)題。本書各章中的習(xí)題包括不同類型、不同程度的142道題目。其中有些題目的難度高于書中的例題,這樣做的目的是使學(xué)生不滿足于已學(xué)過(guò)的內(nèi)容,而要舉一反三,善于發(fā)展已有知識(shí),提倡創(chuàng)新精神,培養(yǎng)解決問(wèn)題的能力。有的專家和讀者說(shuō),如果能獨(dú)立地完成全部習(xí)題,他的C語(yǔ)言學(xué)習(xí)就過(guò)關(guān)了。希望教師能指定學(xué)生完成各章中有一定難度的習(xí)題。希望學(xué)生能盡量多做習(xí)題,以提高自己的水平。 在《C程序設(shè)計(jì)(第四版)學(xué)習(xí)輔導(dǎo)》一書中,提供了絕大多數(shù)習(xí)題的參考解答,列出了程序。對(duì)于比較難的習(xí)題,除了給出程序外,還作了比較詳細(xì)的說(shuō)明。這些習(xí)題解答實(shí)際上是作者對(duì)本教材例題的補(bǔ)充,希望讀者能充分利用它。學(xué)生即使沒(méi)有時(shí)間自己做全部習(xí)題,如果能把全部習(xí)題的參考解答都看一遍,而且都能看懂,也會(huì)很有收獲,能擴(kuò)大眼界,豐富知識(shí)。教師也可以挑選一些習(xí)題解答在課堂上講授,作為補(bǔ)充例題。 (5) 預(yù)處理指令往往是C程序中必要的部分,尤其是用#include指令來(lái)包含頭文件和用#define指令定義符號(hào)常量。在本教材中結(jié)合編寫程序,介紹了怎樣使用這兩種預(yù)處理指令。在《C程序設(shè)計(jì)(第四版)學(xué)習(xí)輔導(dǎo)》一書中,專門有一章系統(tǒng)地、詳細(xì)地介紹各種預(yù)處理指令的使用,以供使用參考。教師可在介紹#include指令和#define指令時(shí),說(shuō)明還有其他預(yù)處理指令,請(qǐng)同學(xué)們自己學(xué)習(xí)參考。 (6) “位運(yùn)算”是C語(yǔ)言區(qū)別于其他高級(jí)語(yǔ)言的一個(gè)重要特點(diǎn)。C語(yǔ)言能對(duì)“位” 進(jìn)行操作,使得C具有比較接近機(jī)器的特點(diǎn)?紤]到非計(jì)算機(jī)專業(yè)學(xué)生的情況,在這次修訂時(shí)在教材中不再包括位運(yùn)算的內(nèi)容。但是,在編寫系統(tǒng)軟件和數(shù)據(jù)采集、檢測(cè)與控制中往往需要用到位運(yùn)算。信息類專業(yè)的學(xué)生需要學(xué)習(xí)這方面的知識(shí),因此,把位運(yùn)算的內(nèi)容放到《C程序設(shè)計(jì)(第四版)學(xué)習(xí)輔導(dǎo)》一書中,計(jì)算機(jī)和其他信息類專業(yè)可以把它列入教學(xué)內(nèi)容,其他讀者可以選學(xué)。 (7) 為了便于教學(xué),本教材中的例題程序的規(guī)模一般都不大。在學(xué)完各章內(nèi)容之后,需要綜合應(yīng)用已學(xué)過(guò)的知識(shí),編寫一些應(yīng)用程序,以提高編程能力。在《C程序設(shè)計(jì)(第四版)學(xué)習(xí)輔導(dǎo)》一書中專門有一章“C程序案例”,這些案例很有實(shí)用價(jià)值,對(duì)于讀者在學(xué)習(xí)本書后提高編程能力會(huì)有很大的幫助。要善于利用這些資源,教師可以指定學(xué)生閱讀這些程序。 (8) 由于學(xué)時(shí)少,只靠幾十小時(shí)的教學(xué)就能使學(xué)生真正掌握C程序設(shè)計(jì)是困難的,如果有條件,最好在學(xué)完本教材后安排一次課程設(shè)計(jì),要求學(xué)生獨(dú)立完成一個(gè)有一定規(guī)模的程序設(shè)計(jì),這是一個(gè)重要的教學(xué)實(shí)踐環(huán)節(jié),能大大提高學(xué)生的獨(dú)立編程能力。 (9) 有的學(xué)校由于分配給本課程的學(xué)時(shí)有限,可能不能講完教材中的全部?jī)?nèi)容。建議不要把本書后面幾章舍棄,應(yīng)當(dāng)讓學(xué)生基本學(xué)完第1~10章,使學(xué)生對(duì)C語(yǔ)言有全面的了解。例如,文件的概念是很重要的,寧可作簡(jiǎn)單的介紹,也不要放棄。前5章的進(jìn)度可以快些,有些程序可指定學(xué)生自學(xué)。
第1章 程序設(shè)計(jì)和C語(yǔ)言
1.1 什么是計(jì)算機(jī)程序 1.2 什么是計(jì)算機(jī)語(yǔ)言 1.3 C語(yǔ)言的發(fā)展及其特點(diǎn) 1.4 最簡(jiǎn)單的C語(yǔ)言程序 1.4.1 最簡(jiǎn)單的C語(yǔ)言程序舉例 1.4.2 C語(yǔ)言程序的結(jié)構(gòu) 1.5 運(yùn)行C程序的步驟與方法 1.6 程序設(shè)計(jì)的任務(wù) 習(xí)題 第2章 算法——程序的靈魂 2.1 什么是算法 2.2 簡(jiǎn)單的算法舉例 2.3 算法的特性 2.4 怎樣表示一個(gè)算法 2.4.1 用自然語(yǔ)言表示算法 2.4.2 用流程圖表示算法 2.4.3 三種基本結(jié)構(gòu)和改進(jìn)的流程圖 2.4.4 用N-S流程圖表示算法 2.4.5 用偽代碼表示算法 2.4.6 用計(jì)算機(jī)語(yǔ)言表示算法 2.5 結(jié)構(gòu)化程序設(shè)計(jì)方法 習(xí)題 第3章 最簡(jiǎn)單的C程序設(shè)計(jì)——順序程序設(shè)計(jì) 3.1 順序程序設(shè)計(jì)舉例 3.2 數(shù)據(jù)的表現(xiàn)形式及其運(yùn)算 3.2.1 常量和變量 3.2.2 數(shù)據(jù)類型 3.2.3 整型數(shù)據(jù) 3.2.4 字符型數(shù)據(jù) 3.2.5 浮點(diǎn)型數(shù)據(jù) 3.2.6 怎樣確定常量的類型 3.2.7 運(yùn)算符和表達(dá)式 3.3 C語(yǔ)句 3.3.1 C語(yǔ)句的作用和分類 3.3.2 最基本的語(yǔ)句——賦值語(yǔ)句 3.4 數(shù)據(jù)的輸入輸出 3.4.1 輸入輸出舉例 3.4.2 有關(guān)數(shù)據(jù)輸入輸出的概念 3.4.3 用printf函數(shù)輸出數(shù)據(jù) 3.4.4 用scanf函數(shù)輸入數(shù)據(jù) 3.4.5 字符數(shù)據(jù)的輸入輸出 習(xí)題 第4章 選擇結(jié)構(gòu)程序設(shè)計(jì) 4.1 選擇結(jié)構(gòu)和條件判斷 4.2 用if語(yǔ)句實(shí)現(xiàn)選擇結(jié)構(gòu) 4.2.1 用if語(yǔ)句處理選擇結(jié)構(gòu)舉例 4.2.2 if語(yǔ)句的一般形式 4.3 關(guān)系運(yùn)算符和關(guān)系表達(dá)式 4.3.1 關(guān)系運(yùn)算符及其優(yōu)先次序 4.3.2 關(guān)系表達(dá)式 4.4 邏輯運(yùn)算符和邏輯表達(dá)式 4.4.1 邏輯運(yùn)算符及其優(yōu)先次序 4.4.2 邏輯表達(dá)式 4.4.3 邏輯型變量 4.5 條件運(yùn)算符和條件表達(dá)式 4.6 選擇結(jié)構(gòu)的嵌套 4.7 用switch語(yǔ)句實(shí)現(xiàn)多分支選擇結(jié)構(gòu) 4.8 選擇結(jié)構(gòu)程序綜合舉例 習(xí)題 第5章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì) 5.1 為什么需要循環(huán)控制 5.2 用while語(yǔ)句實(shí)現(xiàn)循環(huán) 5.3 用do…while語(yǔ)句實(shí)現(xiàn)循環(huán) 5.4 用for語(yǔ)句實(shí)現(xiàn)循環(huán) 5.5 循環(huán)的嵌套 5.6 幾種循環(huán)的比較 5.7 改變循環(huán)執(zhí)行的狀態(tài) 5.7.1 用break語(yǔ)句提前終止循環(huán) 5.7.2 用continue語(yǔ)句提前結(jié)束本次循環(huán) 5.7.3 break語(yǔ)句和continue語(yǔ)句的區(qū)別 5.8 循環(huán)程序舉例 習(xí)題 第6章 利用數(shù)組處理批量數(shù)據(jù) 6.1 怎樣定義和引用一維數(shù)組 6.1.1 怎樣定義一維數(shù)組 6.1.2 怎樣引用一維數(shù)組元素 6.1.3 一維數(shù)組的初始化 6.1.4 一維數(shù)組程序舉例 6.2 怎樣定義和引用二維數(shù)組 6.2.1 怎樣定義二維數(shù)組 6.2.2 怎樣引用二維數(shù)組的元素 6.2.3 二維數(shù)組的初始化 6.2.4 二維數(shù)組程序舉例 6.3 字符數(shù)組 6.3.1 怎樣定義字符數(shù)組 6.3.2 字符數(shù)組的初始化 6.3.3 怎樣引用字符數(shù)組中的元素 6.3.4 字符串和字符串結(jié)束標(biāo)志 6.3.5 字符數(shù)組的輸入輸出 6.3.6 使用字符串處理函數(shù) 6.3.7 字符數(shù)組應(yīng)用舉例 習(xí)題 第7章 用函數(shù)實(shí)現(xiàn)模塊化程序設(shè)計(jì) 7.1 為什么要用函數(shù) 7.2 怎樣定義函數(shù) 7.2.1 為什么要定義函數(shù) 7.2.2 定義函數(shù)的方法 7.3 調(diào)用函數(shù) 7.3.1 函數(shù)調(diào)用的形式 7.3.2 函數(shù)調(diào)用時(shí)的數(shù)據(jù)傳遞 7.3.3 函數(shù)調(diào)用的過(guò)程 7.3.4 函數(shù)的返回值 7.4 對(duì)被調(diào)用函數(shù)的聲明和函數(shù)原型 7.5 函數(shù)的嵌套調(diào)用 7.6 函數(shù)的遞歸調(diào)用 7.7 數(shù)組作為函數(shù)參數(shù) 7.7.1 數(shù)組元素作函數(shù)實(shí)參 7.7.2 數(shù)組名作函數(shù)參數(shù) 7.7.3 多維數(shù)組名作函數(shù)參數(shù) 7.8 局部變量和全局變量 7.8.1 局部變量 7.8.2 全局變量 7.9 變量的存儲(chǔ)方式和生存期 7.9.1 動(dòng)態(tài)存儲(chǔ)方式與靜態(tài)存儲(chǔ)方式 7.9.2 局部變量的存儲(chǔ)類別 7.9.3 全局變量的存儲(chǔ)類別 7.9.4 存儲(chǔ)類別小結(jié) 7.10 關(guān)于變量的聲明和定義 7.11 內(nèi)部函數(shù)和外部函數(shù) 7.11.1 內(nèi)部函數(shù) 7.11.2 外部函數(shù) 習(xí)題 第8章 善于利用指針 8.1 指針是什么 8.2 指針變量 8.2.1 使用指針變量的例子 8.2.2 怎樣定義指針變量 8.2.3 怎樣引用指針變量 8.2.4 指針變量作為函數(shù)參數(shù) 8.3 通過(guò)指針引用數(shù)組 8.3.1 數(shù)組元素的指針 8.3.2 在引用數(shù)組元素時(shí)指針的運(yùn)算 8.3.3 通過(guò)指針引用數(shù)組元素 8.3.4 用數(shù)組名作函數(shù)參數(shù) 8.3.5 通過(guò)指針引用多維數(shù)組 8.4 通過(guò)指針引用字符串 8.4.1 字符串的引用方式 8.4.2 字符指針作函數(shù)參數(shù) 8.4.3 使用字符指針變量和字符數(shù)組的比較 8.5 指向函數(shù)的指針 8.5.1 什么是函數(shù)指針 8.5.2 用函數(shù)指針變量調(diào)用函數(shù) 8.5.3 怎樣定義和使用指向函數(shù)的指針變量 8.5.4 用指向函數(shù)的指針作函數(shù)參數(shù) 8.6 返回指針值的函數(shù) 8.7 指針數(shù)組和多重指針 8.7.1 什么是指針數(shù)組 8.7.2 指向指針數(shù)據(jù)的指針 8.7.3 指針數(shù)組作main函數(shù)的形參 8.8 動(dòng)態(tài)內(nèi)存分配與指向它的指針變量 8.8.1 什么是內(nèi)存的動(dòng)態(tài)分配 8.8.2 怎樣建立內(nèi)存的動(dòng)態(tài)分配 8.8.3 void指針類型 8.9 有關(guān)指針的小結(jié) 習(xí)題 第9章 用戶自己建立數(shù)據(jù)類型 9.1 定義和使用結(jié)構(gòu)體變量 9.1.1 自己建立結(jié)構(gòu)體類型 9.1.2 定義結(jié)構(gòu)體類型變量 9.1.3 結(jié)構(gòu)體變量的初始化和引用 9.2 使用結(jié)構(gòu)體數(shù)組 9.2.1 定義結(jié)構(gòu)體數(shù)組 9.2.2 結(jié)構(gòu)體數(shù)組的應(yīng)用舉例 9.3 結(jié)構(gòu)體指針 9.3.1 指向結(jié)構(gòu)體變量的指針 9.3.2 指向結(jié)構(gòu)體數(shù)組的指針 9.3.3 用結(jié)構(gòu)體變量和結(jié)構(gòu)體變量的指針作函數(shù)參數(shù) 9.4 用指針處理鏈表 9.4.1 什么是鏈表 9.4.2 建立簡(jiǎn)單的靜態(tài)鏈表 9.4.3 建立動(dòng)態(tài)鏈表 9.4.4 輸出鏈表 9.5 共用體類型 9.5.1 什么是共用體類型 9.5.2 引用共用體變量的方式 9.5.3 共用體類型數(shù)據(jù)的特點(diǎn) 9.6 使用枚舉類型 9.7 用typedef聲明新類型名 習(xí)題 第10章 對(duì)文件的輸入輸出 10.1 C文件的有關(guān)基本知識(shí) 10.1.1 什么是文件 10.1.2 文件名 10.1.3 文件的分類 10.1.4 文件緩沖區(qū) 10.1.5 文件類型指針 10.2 打開(kāi)與關(guān)閉文件 10.2.1 用fopen函數(shù)打開(kāi)數(shù)據(jù)文件 10.2.2 用fclose函數(shù)關(guān)閉數(shù)據(jù)文件 10.3 順序讀寫數(shù)據(jù)文件 10.3.1 怎樣向文件讀寫字符 10.3.2 怎樣向文件讀寫一個(gè)字符串 10.3.3 用格式化的方式讀寫文件 10.3.4 用二進(jìn)制方式向文件讀寫一組數(shù)據(jù) 10.4 隨機(jī)讀寫數(shù)據(jù)文件 10.4.1 文件位置標(biāo)記及其定位 10.4.2 隨機(jī)讀寫 10.5 文件讀寫的出錯(cuò)檢測(cè) 習(xí)題 第11章 常見(jiàn)錯(cuò)誤分析 附錄 附錄A 在Visual C++ 6.0環(huán)境下運(yùn)行C程序的方法 附錄B 常用字符與ASCII代碼對(duì)照表 附錄C C語(yǔ)言中的關(guān)鍵字 附錄D 運(yùn)算符和結(jié)合性 附錄E C語(yǔ)言常用語(yǔ)法提要 附錄F C庫(kù)函數(shù) 參考文獻(xiàn)
如果只是編寫和運(yùn)行一個(gè)很簡(jiǎn)單的程序,上面介紹的步驟就夠了。但是實(shí)際上要處理的問(wèn)題比上面見(jiàn)到的例子復(fù)雜得多,需要考慮和處理的問(wèn)題也復(fù)雜得多。程序設(shè)計(jì)是指從確定任務(wù)到得到結(jié)果、寫出文檔的全過(guò)程。
從確定問(wèn)題到最后完成任務(wù),一般經(jīng)歷以下幾個(gè)工作階段: 。1)問(wèn)題分析。對(duì)于接手的任務(wù)要進(jìn)行認(rèn)真的分析,研究所給定的條件,分析最后應(yīng)達(dá)到的目標(biāo),找出解決問(wèn)題的規(guī)律,選擇解題的方法。在此過(guò)程中可以忽略一些次要的因素,使問(wèn)題抽象化,例如用數(shù)學(xué)式子表示問(wèn)題的內(nèi)在特性。這就是建立模型。 (2)設(shè)計(jì)算法。即設(shè)計(jì)出解題的方法和具體步驟。例如要解一個(gè)方程式,就要選擇用什么方法求解,并且把求解的每一個(gè)步驟清晰無(wú)誤地寫出來(lái)。一般用流程圖來(lái)表示解題的步驟。 (3)編寫程序。根據(jù)得到的算法,用一種高級(jí)語(yǔ)言編寫出源程序。 。4)對(duì)源程序進(jìn)行編輯、編譯和連接,得到可執(zhí)行程序。 。5)運(yùn)行程序,分析結(jié)果。運(yùn)行可執(zhí)行程序,得到運(yùn)行結(jié)果。能得到運(yùn)行結(jié)果并不意味著程序正確,要對(duì)結(jié)果進(jìn)行分析,看它是否合理。例如把“b=a;”錯(cuò)寫為“a=b;”,程序不存在語(yǔ)法錯(cuò)誤,能通過(guò)編譯,但運(yùn)行結(jié)果顯然與預(yù)期不符。因此要對(duì)程序進(jìn)行調(diào)試(debug)。調(diào)試的過(guò)程就是通過(guò)上機(jī)發(fā)現(xiàn)和排除程序中故障的過(guò)程。經(jīng)過(guò)調(diào)試,得到了正確的結(jié)果,但是工作不應(yīng)到此結(jié)束。不要只看到某一次結(jié)果是正確的,就認(rèn)為程序沒(méi)有問(wèn)題。例如,求c-b/a,當(dāng)a=4,b=2時(shí),求出c的值為0.5,是正確的,但是當(dāng)a-0,b-2時(shí),就無(wú)法求出c的值。說(shuō)明程序?qū)δ承⿺?shù)據(jù)能得到正確結(jié)果,對(duì)另外一些數(shù)據(jù)卻得不到正確結(jié)果,程序還有漏洞,因此,還要對(duì)程序進(jìn)行測(cè)試(test)。所謂測(cè)試,就是設(shè)計(jì)多組測(cè)試數(shù)據(jù),檢查程序?qū)Σ煌瑪?shù)據(jù)的運(yùn)行情況,從中盡量發(fā)現(xiàn)程序中存在的漏洞,并修改程序,使之能適用于各種情況,作為商品提供使用的程序,是必須經(jīng)過(guò)嚴(yán)格測(cè)試的。 在本書的配套書《C程序設(shè)計(jì)(第四版)學(xué)習(xí)輔導(dǎo)》中對(duì)程序的調(diào)試和測(cè)試做了進(jìn)一步的說(shuō)明,讀者可以參考。 (6)編寫程序文檔。許多程序是提供給別人使用的,如同正式的產(chǎn)品應(yīng)當(dāng)提供產(chǎn)品說(shuō)明書一樣,正式提供給用戶使用的程序,必須向用戶提供程序說(shuō)明書(也稱為用戶文檔)。內(nèi)容應(yīng)包括:程序名稱、程序功能、運(yùn)行環(huán)境、程序的裝入和啟動(dòng)、需要輸入的數(shù)據(jù),以及使用注意事項(xiàng)等。
你還可能感興趣
我要評(píng)論
|