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