新標(biāo)準(zhǔn)C++程序設(shè)計教程
定 價:44.5 元
- 作者:郭煒 著
- 出版時間:2012/8/1
- ISBN:9787302283805
- 出 版 社:清華大學(xué)出版社
- 中圖法分類:TP312C++
- 頁碼:427
- 紙張:膠版紙
- 版次:1
- 開本:16開
《重點大學(xué)計算機專業(yè)系列教材:新標(biāo)準(zhǔn)C++程序設(shè)計教程》基于新的C++標(biāo)準(zhǔn)“C++11”,從全新的思路出發(fā),融合作者豐富的編程實踐經(jīng)驗,深入淺出地全面介紹C++程序設(shè)計的過程,包含豐富的樣例程序,強調(diào)實踐性和專業(yè)性。
《重點大學(xué)計算機專業(yè)系列教材:新標(biāo)準(zhǔn)C++程序設(shè)計教程》適合作為高等院校理工類專業(yè)程序設(shè)計課程的教材、學(xué)生自學(xué)和做畢業(yè)設(shè)計的參考書,也可供IT從業(yè)人員和編程愛好者參考。
《重點大學(xué)計算機專業(yè)系列教材:新標(biāo)準(zhǔn)C++程序設(shè)計教程》面向大學(xué)計算機專業(yè)的低年級學(xué)生或非計算機專業(yè)但對編程能力要求較高的學(xué)生。內(nèi)容深廣卻通俗易懂,入門與提高并重,覆蓋了C++語言的方方面面,尤其是全面介紹了標(biāo)準(zhǔn)模板庫STL的用法。 編者有十年的C++語言第一線教學(xué)經(jīng)驗,本書寫作時,就已經(jīng)將對學(xué)生困惑的解答融入其中,用精簡的語言直指問題的重點、難點和本質(zhì),力圖使讀者能獨立自學(xué)本書。 本書程序?qū)嵗S富實用,貼近編程實踐,強調(diào)程序設(shè)計基本思路、面向?qū)ο蠡舅枷牒退惴ǖ呐囵B(yǎng),而不是僅僅羅列C++的語法規(guī)則。 本書書名中的“新標(biāo)準(zhǔn)”有兩層含義。一是指本書所有的講述和程序都是嚴(yán)格遵循C++標(biāo)準(zhǔn)的,而且介紹了一些最新C++11標(biāo)準(zhǔn)的內(nèi)容。第二層含義更為重要,指的是希望讀者通過對本書的學(xué)習(xí),對C++的掌握程度能夠達(dá)到更高的標(biāo)準(zhǔn),除了深入理解面向?qū)ο蟮某绦蛟O(shè)計外,還能夠進(jìn)行泛型程序設(shè)計并熟練使用STL。
一、 本書的寫作背景
C++功能強大、運用廣泛,許多大學(xué)都將其作為入門的程序設(shè)計語言進(jìn)行教學(xué)。筆者在北京大學(xué)信息科學(xué)技術(shù)學(xué)院講授C++程序設(shè)計已有10年,隨著時間的推移,漸覺現(xiàn)有的教材已經(jīng)不能滿足教學(xué)的需要,于是萌生了自己編寫一本教材的想法。
C++有兩大特點: 支持面向?qū)ο蟮某绦蛟O(shè)計和支持泛型程序設(shè)計。然而,國內(nèi)大部分教材往往對“泛型程序設(shè)計”這部分內(nèi)容基本忽略,或只是略作交待。這導(dǎo)致許多學(xué)過或準(zhǔn)備學(xué)C++的學(xué)生有如下印象:C++是為了編寫大型的程序而設(shè)計的,如果編寫一個十幾、幾十行的小程序,沒有必要用C++,用C語言就足夠了。實際上,編寫很小的程序用面向?qū)ο蟮某绦蛟O(shè)計方法確無必要,但不等于用C++沒必要。C++中的標(biāo)準(zhǔn)模板庫(STL)是泛型程序設(shè)計的最成功應(yīng)用,其中包含許多常用的數(shù)據(jù)結(jié)構(gòu)(如動態(tài)數(shù)組、棧等)和算法(如排序、二分查找等),STL即便應(yīng)用于十幾行的程序中,也能有效地提高編程效率。對熟練的C++程序員來說,編寫一個十幾行的程序多半不會考慮到面向?qū)ο蟮某绦蛟O(shè)計,但會很自然地用到STL。在筆者看來,如果計算機專業(yè)的學(xué)生學(xué)了C++卻不會用STL,那么找工作面試的時候是會受影響的。C++標(biāo)準(zhǔn)委員會成員Andrew Koenig有句名言“庫設(shè)計就是語言設(shè)計,語言設(shè)計就是庫設(shè)計!睂W(xué)了C++語言,卻不會用該語言的核心庫,對于計算機專業(yè)的學(xué)生來說,這樣的教學(xué)很難說是成功的。
國內(nèi)大多數(shù)C++教材對泛型程序設(shè)計和STL講述甚少,國外雖有幾部經(jīng)典教材,全面覆蓋了C++的兩大特點,但是都卷帙浩繁,動輒近千頁,不適合初學(xué)者。為解決這個矛盾,筆者編寫了本教材,篇幅適當(dāng),全面講述了C++面向?qū)ο蟮母鞣N特性,此外還覆蓋了標(biāo)準(zhǔn)模板庫90%以上的內(nèi)容。初學(xué)者通過本書的學(xué)習(xí),可以比較全面地掌握C++程序設(shè)計語言的精髓。
另外,大多數(shù)C++教材依據(jù)的是1998年的C++標(biāo)準(zhǔn)(一般稱為“C++98”)。而在1998年后,C++標(biāo)準(zhǔn)進(jìn)行了一些修訂,加入了一些新特性,2011年C++標(biāo)準(zhǔn)委員會又通過了新的C++標(biāo)準(zhǔn)“C++11”。這些變化在大多數(shù)教材中沒有體現(xiàn)。讓教材與時俱進(jìn),也是筆者編寫本教材的初衷之一。
二、 本書的特點
1. 內(nèi)容深廣卻通俗易懂,入門與提高并重
本書面向大學(xué)計算機專業(yè)的低年級學(xué)生,或非計算機專業(yè)但對編程能力要求較高的學(xué)生。本書可作為入門的程序設(shè)計語言教學(xué)之用,沒學(xué)過C語言的讀者可以直接學(xué)習(xí)本書。
本書內(nèi)容很廣,覆蓋了C++語言的方方面面,全面講述了標(biāo)準(zhǔn)模板庫STL的用法,幾乎可以作為C++語言的參考手冊來查閱。第4篇“C++高級主題”中的內(nèi)容更是大多數(shù)同等篇幅的教材所不曾涉及的。而且,由于本書的宗旨是讓讀者不但要知其然,還要知其所以然,因此對于C++的一些語法特性,不但介紹如何使用,還會講解C++為什么會有這個語法特性,甚至該特性是如何實現(xiàn)的,如“多態(tài)”的實現(xiàn)方法。
筆者有10年的C++語言第一線教學(xué)經(jīng)驗,非常清楚學(xué)生在學(xué)習(xí)C++時哪些地方不易掌握,會提出什么樣的問題,以及他們的問題應(yīng)該如何回答。因此,在本書寫作時,就已經(jīng)將學(xué)生困惑的解答融入其中,用精簡的語言直指問題的重點、難點和本質(zhì),可以說將有限的文字都用在了刀刃上。筆者的目標(biāo)是力圖做到“讀者不用教師講授,也能獨立看懂本書”。
2. 緊扣C++標(biāo)準(zhǔn)
國內(nèi)大多數(shù)C++教材依據(jù)的是1998年的C++標(biāo)準(zhǔn)“C++98”。許多教材甚至都不能完全符合“C++98”的標(biāo)準(zhǔn),這從其聲稱“程序都在Visual C++ 6.0中編譯通過”就可看出——Visual C++ 6.0并不是嚴(yán)格遵循“C++98”標(biāo)準(zhǔn)的編譯器。目前,對C++標(biāo)準(zhǔn)支持最好的編譯器有GNU gcc和微軟的Visual C++ 10.0(包含在Visual Studio 2010中)等。本書中的所有程序除個別有特殊說明的以外,都同時在Visual C++ 10.0和Dev C++ 4.9.9.2(其內(nèi)核編譯器是gcc)中編譯通過,并且運行結(jié)果相同,可以保證是符合C++標(biāo)準(zhǔn)的,而不是某種“C++方言”。
最新的“C++11”標(biāo)準(zhǔn)通過的時間很短,目前還沒有編譯器能完全支持它。因此,本書不可能完全以“C++11”作為依據(jù)。本書的主要依據(jù)依然是“C++98”,但是收錄了幾個“C++98”之后新引入的特性,如“l(fā)ong long”數(shù)據(jù)類型、無序容器(即哈希表)、智能指針shared_ptr等。本書中的頭文件都是C++風(fēng)格的,不像某些教材仍然使用C語言風(fēng)格的頭文件。另外,許多教材中的程序在用到字符串時往往使用C語言風(fēng)格的字符數(shù)組,而本書則盡量使用C++風(fēng)格的string對象處理字符串。
3. 程序?qū)嵗S富實用,貼近編程實踐
筆者不僅具有豐富的C++教學(xué)經(jīng)驗,還有著數(shù)十萬行的C++商業(yè)軟件開發(fā)經(jīng)驗。筆者獨立開發(fā)了多種流行的英語學(xué)習(xí)軟件,如《我愛背單詞》、《我愛背句子》、《我愛學(xué)語法》、《我愛學(xué)音標(biāo)》、《角斗士超級復(fù)讀機》等,還開發(fā)了背單詞的網(wǎng)站“愛單詞網(wǎng)”。這些軟件大量使用C++語言進(jìn)行開發(fā),有的完全用C++寫成。因此,筆者自認(rèn)為在對C++語言的運用和理解方面,比一般的教材作者多了一些心得,更能從實踐的角度闡述如何運用C++的各種特性。本書中所有樣例程序都由筆者精心編寫,絕非網(wǎng)上復(fù)制所得。程序風(fēng)格優(yōu)美,貼近現(xiàn)實,對實踐的指導(dǎo)意義很強。
4. 強調(diào)程序設(shè)計基本思想的培養(yǎng)
筆者擔(dān)任北京大學(xué)ACM國際大學(xué)生程序設(shè)計競賽隊教練已有8年,手下的隊員都是北京大學(xué)最出色的編程高手。他們的成長、求學(xué)、求職經(jīng)歷可以驗證,算法才是程序設(shè)計的核心。學(xué)習(xí)程序設(shè)計決不是僅僅掌握一門語言的語法,更重要的是掌握算法。只掌握語言的語法,在碰到具體問題時往往還是不知道如何去編程解決。作為入門的程序設(shè)計語言教材,本書不可能講述太多的算法,但是程序設(shè)計的基本思想是必定要涉及的。為此,本書專門辟出一章,講述了枚舉、遞歸、二分3種基本的程序設(shè)計思想。此外,其他章節(jié)的一些例題和程序也能體現(xiàn)程序設(shè)計的基本思路。
三、 內(nèi)容編排
本書主要分為以下四篇。
第1篇結(jié)構(gòu)化程序設(shè)計: 是對C語言的繼承以及在C語言基礎(chǔ)上的一些擴充。學(xué)過C語言的讀者可以粗略閱讀甚至跳過此篇大部分內(nèi)容,但是需要學(xué)習(xí)目錄中帶“*”的章節(jié),這些章節(jié)仍然是C語言中沒有的內(nèi)容。
第2篇面向?qū)ο蟮某绦蛟O(shè)計: 包含類和對象、運算符重載、繼承、多態(tài)等內(nèi)容,是C++語言的學(xué)習(xí)重點。
第3篇泛型程序設(shè)計: 包括如何編寫模板,以及如何使用標(biāo)準(zhǔn)模板庫STL。即便不想用面向?qū)ο蟮某绦蛟O(shè)計方法編程,學(xué)習(xí)STL也是大有裨益的。
第4篇C++高級主題: 涉及了異常處理、名字空間、C++風(fēng)格的強制類型轉(zhuǎn)換等C++語言中比較深入的內(nèi)容,以及C++11標(biāo)準(zhǔn)引入的幾個新特性。
本書各章最后都有小結(jié)和習(xí)題。各章內(nèi)的講述中還穿插了許多思考題,思考題難度較大,很適合作為啟發(fā)式教學(xué)的討論話題。
四、 總結(jié)
總而言之,本書書名中的“新標(biāo)準(zhǔn)”有兩層含義: 第一層含義是指本書所有的講述和程序都是嚴(yán)格遵循 C++標(biāo)準(zhǔn)的,而且提及了一些新C++標(biāo)準(zhǔn)的內(nèi)容; 第二層含義更為重要,指的是希望讀者通過本書的學(xué)習(xí),對C++的掌握程度能夠達(dá)到更高的標(biāo)準(zhǔn),除了深入理解面向?qū)ο蟮某绦蛟O(shè)計外,還能夠進(jìn)行泛型程序設(shè)計并熟練使用STL。
本書的配套課件和書中的例題程序代碼可以從清華大學(xué)出版社網(wǎng)站(www.tup.com.cn)下載。如果在本書和課件的下載使用中遇到問題,請聯(lián)系fuhy@tup.tsinghua.edu.cn。
五、 鳴謝
編寫本書的動力來自作者在北京大學(xué)信息學(xué)院“程序設(shè)計實習(xí)”課程的教學(xué)經(jīng)歷。感謝課程主持人李文新教授對作者在教學(xué)中的支持和指導(dǎo)。還要感謝多年來共同講授此課程的余華山老師、田永鴻老師,和他們的討論使我獲益良多。三位老師編寫的講義,也是本書的重要參考。
感謝您選用本書。由于筆者水平所限,不足之處在所難免,歡迎讀者及同仁們批評指正,筆者不勝感激。
郭煒2012年6月于北京大學(xué)
郭煒,北京大學(xué)信息科學(xué)技術(shù)學(xué)院教師,北京大學(xué)ACM國際大學(xué)生程序設(shè)計競賽隊教練。不僅具有十年的C++教學(xué)經(jīng)驗,還有著數(shù)十萬行的C++商業(yè)軟件開發(fā)經(jīng)驗,獨立開發(fā)了多種流行的英語學(xué)習(xí)軟件(如我愛背單詞、我愛學(xué)語法、我愛學(xué)音標(biāo)),創(chuàng)立了背單詞的網(wǎng)站——愛單詞網(wǎng)。精研算法,曾6次負(fù)責(zé)為ACM國際大學(xué)生程序設(shè)計競賽亞洲區(qū)預(yù)選賽命題,是國內(nèi)為此項賽事主持命題次數(shù)最多的人。
第1篇 結(jié)構(gòu)化程序設(shè)計
第1章 計算機基礎(chǔ)知識
1.1 信息在計算機中的表示和存儲
1.1.1 如何用0和1表示各種信息
1.1.2 二進(jìn)制和十六進(jìn)制
1.1.3 整數(shù)和小數(shù)的計算機表示
1.2 計算機程序設(shè)計語言
1.2.1 機器語言
1.2.2 匯編語言
1.2.3 高級語言
1.3 C++語言的歷史
1.4 小結(jié)
習(xí)題
第2章 C++語言的基本要素
2.1 C++的標(biāo)識符
2.2 C++的關(guān)鍵字
2.3 最簡單的C++程序
2.4 變量
2.4.1 變量的定義
2.4.2 變量的初始化
2.4.3 變量的賦值
2.4.4 常變量
2.5 C++的數(shù)據(jù)類型
2.5.1 C++基本數(shù)據(jù)類型
2.5.2 數(shù)據(jù)類型自動轉(zhuǎn)換
2.5.3 用cin讀人類型不同的變量
2.6 常量
2.6.1 整型常量
2.6.2 實數(shù)型常量
2.6.3 布爾型常量
2.6.4 字符型常量
2.6.5 字符串常量
2.6.6 符號常量
2.7 運算符和表達(dá)式
2.7.1 算術(shù)運算符
2.7.2 賦值運算符
2.7.3 關(guān)系運算符
2.7.4 邏輯運算符和邏輯表達(dá)式
2.7.5 位運算符
2.7.6 條件運算符
2.7.7 sizeof運算符
2.7.8 強制類型轉(zhuǎn)換運算符
2.7.9 逗號運算符
2.7.10 運算符的優(yōu)先級和結(jié)合性
2.8 注釋
2.9 小結(jié)
習(xí)題
第3章 C++語言的控制結(jié)構(gòu)
3.1 用if語句實現(xiàn)選擇結(jié)構(gòu)
3.2 用switch語句實現(xiàn)選擇結(jié)構(gòu)
3.3 用for語句實現(xiàn)循環(huán)結(jié)構(gòu)
3.4 用while語句實現(xiàn)循環(huán)結(jié)構(gòu)
3.5 用dowhile語句實現(xiàn)循環(huán)結(jié)構(gòu)
3.6 用break語句跳出循環(huán)
3.7 continue語句
3.8 goto語句
3.9 使用freopen方便程序調(diào)試
3.10 小結(jié)
習(xí)題
第4章 函數(shù)
4.1 函數(shù)的定義和調(diào)用
4.1.1 函數(shù)的定義
……
第2篇 面向?qū)ο蟮某绦蛟O(shè)計
第3篇 泛型程序設(shè)計
第4篇 C++高級主題