關(guān)于我們
書單推薦
新書推薦
|
程序設(shè)計教程
本書以C++為編程語言,介紹程序設(shè)計的基本思想、方法和技術(shù)。本書內(nèi)容圍繞程序設(shè)計的基礎(chǔ)知識、過程式和面向?qū)ο蟪绦蛟O(shè)計基本內(nèi)容進行展開,主要包括:計算機基礎(chǔ)知識、基本數(shù)據(jù)類型、常量、變量、操作符、表達(dá)式、流程控制、結(jié)構(gòu)化程序設(shè)計、過程抽象、遞歸函數(shù)、復(fù)雜數(shù)據(jù)類型(數(shù)組、結(jié)構(gòu)等)、數(shù)據(jù)抽象、繼承、類屬類型(STL)、輸入/輸出、異常處理以及事件驅(qū)動和基于MFC“文檔-視”結(jié)構(gòu)的面向?qū)ο蟮腤indows應(yīng)用程序框架等。
自本教材的第2版出版以來,根據(jù)我們的教學(xué)實踐以及廣大讀者的反饋意見,我們發(fā)現(xiàn)教材還存在一些不盡如人意的地方,現(xiàn)予以修訂。
教材第3版的變動主要體現(xiàn)在以下幾個方面: 1.重新組織和調(diào)整了一些章節(jié)的內(nèi)容,使得教材內(nèi)容安排更加合理,并進一步突出教材對主流程序設(shè)計思想、概念和技術(shù)的介紹。例如:把對整數(shù)的補碼表示以及實數(shù)的浮點表示的描述集中放入1.1.3 節(jié)“機內(nèi)信息表示”中介紹;把基于斷言的程序調(diào)試從第4章“過程抽象—函數(shù)”移至第10章“異常處理”中介紹;在第5章“復(fù)合數(shù)據(jù)的描述—構(gòu)造數(shù)據(jù)類型”的子標(biāo)題中顯式指出每種類型的作用;把“操作符重載”從單獨的一章(第2版的第7章)變成一節(jié)(6.6.5節(jié))放入6.6節(jié)的“對象與類的進一步討論”中;把C++的編譯預(yù)處理命令(包括條件編譯)、常用標(biāo)準(zhǔn)函數(shù)和STL算法以及MFC常用類的介紹放到附錄中;圍繞“消息驅(qū)動”和“文檔-視”軟件結(jié)構(gòu)重新組織了第11章對基于MFC的面向?qū)ο蟪绦蛟O(shè)計的介紹;等等。 2.針對C++新的國際標(biāo)準(zhǔn)(C++11),增加一些對程序設(shè)計有良好支持的C++內(nèi)容。例如:增加了對λ表達(dá)式的介紹,包括λ表達(dá)式的定義(4.6.4節(jié)“匿名函數(shù)—λ表達(dá)式”)、實現(xiàn)(6.6.5節(jié)中的“函數(shù)調(diào)用操作符重載”)以及應(yīng)用(5.5.6節(jié)“函數(shù)指針”和8.3節(jié)“C++標(biāo)準(zhǔn)模板庫”),通過λ表達(dá)式可以實現(xiàn)匿名函數(shù),它把函數(shù)定義和使用合二為一,以提高程序中“臨時用一下”的小函數(shù)的靈活性;增加了對轉(zhuǎn)移構(gòu)造函數(shù)(6.6.4節(jié)“對象拷貝構(gòu)造過程的優(yōu)化—轉(zhuǎn)移構(gòu)造函數(shù)”)和轉(zhuǎn)移賦值操作符重載函數(shù)(6.6.5節(jié))的介紹,它們基于“右值引用”參數(shù)類型實現(xiàn)把資源從即將消亡的對象轉(zhuǎn)移(而不是復(fù)制)到新創(chuàng)建的或已有的對象中,從而提高程序效率;等等。 3.針對初學(xué)者,尤其是自學(xué)者,對一些內(nèi)容的描述進行了完善,并對全書的語言文字和邏輯進行了優(yōu)化,使得教材更加便于閱讀;對教材例子中的程序代碼增加了注釋,使得它們更加容易理解。另外,盡量減少了在前面出現(xiàn)而在后面才會詳細(xì)介紹的概念,以避免給初學(xué)者帶來困擾。對于必須提前出現(xiàn)的概念以“將在……節(jié)……中介紹”的引用形式給出,而在后面用到前面介紹的內(nèi)容時,將采用“參見……節(jié)的……”的引用形式。 4.補充了一些習(xí)題,使得讀者能更好地理解和掌握核心內(nèi)容,并有針對性地進行程序設(shè)計訓(xùn)練。 5.修正了教材第2版中的一些錯誤。 本書修訂過程中得到了很多人的幫助,在第3版出版之際向他們表示感謝。特別感謝劉奇志老師和黃書劍老師,他們在與作者一起承擔(dān)程序設(shè)計課程的教學(xué)過程中發(fā)現(xiàn)了本教材的一些問題,并對本教材的修訂提出了很多很好的建議,作者獲益良多。另外,還要感謝策劃編輯朱劼對我們的鼓勵與鞭策,并為教材編寫出謀劃策。 作者于南京大學(xué)2015年2月第2版前言本書第1版自2004年出版以來,得到了廣大讀者的熱情關(guān)注和支持,很多讀者還提出了寶貴的建議,我們深表感謝。 在近幾年的教學(xué)中,我們也發(fā)現(xiàn)了本書的一些不足之處。首先,編寫該教材的初衷是介紹程序設(shè)計的基本思想、概念和技術(shù),C++語言是作為編程實現(xiàn)語言的角色出現(xiàn),然而,在教材某些內(nèi)容的表述上違背了這個初衷,教材的一些地方出現(xiàn)了C++語言“喧賓奪主”的情況。其次,教材在一些內(nèi)容的表達(dá)上過于“精煉”,使初學(xué)者有“看天書”的感覺。再次,教材對現(xiàn)在比較流行的C++標(biāo)準(zhǔn)模板庫(STL)以及它所支持的泛型程序設(shè)計沒有給出足夠的介紹,從而給讀者學(xué)習(xí)使用STL帶來了困難。此外,教材中還存在少量的錯誤。 針對上述問題,我們對教材進行了修訂。第2版的變動主要體現(xiàn)在以下幾個方面: 1)重新組織了一些章節(jié)的內(nèi)容,并調(diào)整了相應(yīng)章節(jié)(主要是節(jié))的標(biāo)題和次序,進一步突出了程序設(shè)計的主流思想、概念和技術(shù)。 2)對教材的文字進行了潤色,補充了例子,并為例子中的程序代碼增加了注釋,使之更加容易理解。 3)補充了對STL的介紹,包括一些常用的容器和算法以及它們的使用實例,有利于讀者更好地進行泛型程序設(shè)計。 4)增加了對計算機內(nèi)部信息表示的介紹,使得讀者能更好地理解程序設(shè)計中涉及的二進制。 5)補充了一些習(xí)題,使讀者有更多的機會進行有針對性的訓(xùn)練。 6)對一些重要的程序設(shè)計術(shù)語用不同的字體加以突出的標(biāo)注并給出了它們的英文對照,突出了對程序設(shè)計重要概念的介紹。 7)修正了上一版中的一些錯誤。 在教材的修訂過程中,得到了很多人幫助,在教材第2版出版之際向他們表示感謝,并希望繼續(xù)得到大家的支持,使教材進一步得到完善。 作者于南京大學(xué)2009年2月 第1版前言隨著計算機應(yīng)用領(lǐng)域的不斷擴大、應(yīng)用層次的不斷加深,社會對計算機軟件的需求急劇增長,這就導(dǎo)致了軟件的規(guī)模不斷擴大、復(fù)雜程度不斷提高。如何設(shè)計出大量的滿足用戶需求的高質(zhì)量軟件是軟件工作者所面臨的嚴(yán)峻挑戰(zhàn)。 作為計算機軟件的主要表現(xiàn)形式—計算機程序不同于其他程序(如音樂會程序),它是由計算機來執(zhí)行的。這就使得計算機程序的編制(程序設(shè)計)不能完全以人的思維模式和習(xí)慣來進行,它往往要受到計算機解決問題的方式和特點的限制。除此之外,要設(shè)計出解決各種問題的程序,程序設(shè)計者往往還需要了解與問題領(lǐng)域有關(guān)的知識。這些都給程序設(shè)計帶來一定的難度。 從程序設(shè)計的發(fā)展歷史來看,程序設(shè)計經(jīng)歷了從低級語言到高級語言、從以編碼為中心到面向軟件生存周期的軟件工程、從過程式到面向?qū)ο蟮陌l(fā)展過程。這一過程體現(xiàn)了人們對程序設(shè)計活動的不斷認(rèn)識和改進的過程,特別是從過程式程序設(shè)計到面向?qū)ο蟪绦蛟O(shè)計的發(fā)展,體現(xiàn)了人們對以自然的方式來描述和解決問題的需求,它使得解題過程更接近于人的思維方式。 有人認(rèn)為程序設(shè)計是一門藝術(shù),而藝術(shù)基于人的靈感和天賦。對于一些小型程序的設(shè)計而言,上述的說法可能有一些道理。但是,對于大型、復(fù)雜的程序設(shè)計問題,靈感和天賦是不能很好地解決問題的,幾十年的程序設(shè)計實踐已證明了這一點。不可否認(rèn),程序設(shè)計需要靈感和天賦,它們往往在程序的一些局部設(shè)計上發(fā)揮著作用。但從總體上講,程序設(shè)計是一門科學(xué),它是有規(guī)律和步驟可循的。通過對程序設(shè)計的基本思想、概念和技術(shù)的學(xué)習(xí),再加上必要的訓(xùn)練和實踐,程序設(shè)計的規(guī)律和步驟是可以掌握的,這正是本書的主旨所在。本書強調(diào)準(zhǔn)確的程序設(shè)計基本概念、良好的程序設(shè)計風(fēng)格和實際動手能力的訓(xùn)練與培養(yǎng)。 關(guān)于C++語言是否適合作為介紹程序設(shè)計時的編程實現(xiàn)語言,目前存在不同的看法。持反對意見的人認(rèn)為C++太靈活,以至于會使初學(xué)者感到無所適從。本書之所以選擇C++語言作為實現(xiàn)語言,首先,因為C++語言是一種流行的高級語言,很多人都在用C++編寫實際的程序;其次,C++支持大部分基本的程序設(shè)計思想、概念和技術(shù),其中包括對過程式及面向?qū)ο髢煞N程序設(shè)計范型的支持。再次,與其他高級語言相比,C++語言具有靈活和高效等特點,這使得一些程序設(shè)計思想、概念和技術(shù)能夠更好地實現(xiàn)。本書是以介紹基本的程序思想、概念和技術(shù)為主旨,C++服務(wù)于這個主旨,而不是相反,這樣,初學(xué)者在使用C++時能夠做到有的放矢。因此,本書對C++的一些特殊的、用于解決非主流的程序設(shè)計問題的成分和技巧不予重點介紹。特別地,本書對一些屬于C++語言“文化”范疇的內(nèi)容不予過分強調(diào)。 本書的內(nèi)容分成兩大部分:第1章至第5章為第一部分,主要對一些基本的程序設(shè)計思想、概念和技術(shù)以及過程式程序設(shè)計的基本內(nèi)容進行介紹,其中包括:數(shù)據(jù)類型、表達(dá)式、流程控制、子程序(函數(shù))、遞歸等;第6章至第12章為第二部分,重點介紹面向?qū)ο蟪绦蛟O(shè)計的基本內(nèi)容,其中包括:類/對象、繼承、操作符重載、類屬(模板)、輸入/輸出、異常處理以及面向?qū)ο蟮腤indows應(yīng)用程序基本框架等。 本書既適合于程序設(shè)計的初學(xué)者使用,同時,對具有一些程序設(shè)計經(jīng)驗的人也有一定的參考價值。本書可以作為一學(xué)年的程序設(shè)計課程使用,其中,第一學(xué)期介紹第1章到第5章的全部內(nèi)容以及第10章的部分內(nèi)容;第二學(xué)期介紹第6章到第9章全部內(nèi)容、第10章的部分內(nèi)容以及第11章到12章的全部內(nèi)容。如果讀者已學(xué)過過程式程序設(shè)計(如C語言程序設(shè)計等)的基本內(nèi)容,則本書也可作為一學(xué)期的面向?qū)ο蟪绦蛟O(shè)計課程使用,重點介紹第6章到12章的內(nèi)容。書中加“*”標(biāo)記的節(jié)在初次閱讀時可以跳過。 本書的編寫和完成與很多人的幫助是分不開的。首先,要感謝鄭國梁教授對本書編寫工作的精心指導(dǎo)。在內(nèi)容的選取、安排、用語的規(guī)范性等方面,鄭老師都事無巨細(xì)地給予了考慮,并檢查了全文(包括每個例子程序)。值得一提的是,作者編寫本書所必備的專業(yè)知識和專業(yè)素質(zhì)是在鄭老師的長期熏陶下獲得的,這些知識和素質(zhì)使得作者能夠完成本書的編寫。其次,非常感謝尹存燕老師和戴新宇在本書習(xí)題的設(shè)計和文字易讀性方面所做的大量工作;非常感謝孫明欣和周明對書中內(nèi)容所做的檢查工作,特別是對本書初稿中一些概念上的模糊與謬誤、內(nèi)容安排的合理性與易讀性以及在遵守C++標(biāo)準(zhǔn)規(guī)范方面所提出的建議;感謝胡昊和徐鋒,作者對一些基本概念的理解是在與他們就相關(guān)問題的討論中獲得的。另外,還要感謝機械工業(yè)出版社的溫莉芳總編輯對本書編寫工作的鼓勵和支持。 最后,要感謝我們的家人對本書編寫工作的理解和支持,本書的編寫占用了大量本應(yīng)與他們共度的家庭歡樂時間。感謝所有支持和幫助過本書編寫工作的人們。 由于作者水平有限,加之時間倉促,錯誤和疏漏在所難免,懇請廣大讀者不吝指教,以便于我們在今后的版本中進行改進。
第3版 前言
第2版 前言 第1版 前言 教學(xué)建議 第1章 概述 1.1 計算機的工作模型 1.1.1 馮·諾依曼體系結(jié)構(gòu) 1.1.2 硬件與軟件 1.1.3 機內(nèi)信息表示 1.2 程序設(shè)計 1.2.1 程序設(shè)計范式 1.2.2 程序設(shè)計步驟 1.2.3 程序設(shè)計語言 1.3 C++語言 1.3.1 概述 1.3.2 C++程序的構(gòu)成 1.3.3 C++語言的詞法 1.3.4 C++程序的運行步驟 1.4 小結(jié) 1.5 習(xí)題 第2章 簡單數(shù)據(jù)的描述-基本數(shù)據(jù)類型和表達(dá)式 2.1 概述 2.2 基本數(shù)據(jù)類型 2.2.1 整數(shù)類型 2.2.2 實數(shù)類型 2.2.3 字符類型 2.2.4 邏輯類型 2.3 數(shù)據(jù)的表現(xiàn)形式 2.3.1 常量 2.3.2 變量 2.3.3 變量值的輸入 2.4 數(shù)據(jù)的基本運算-操作符 2.4.1 操作符概述 2.4.2 算術(shù)操作符 2.4.3 關(guān)系與邏輯操作符 2.4.4 位操作符 2.4.5 賦值操作符 2.4.6 其他操作符 2.4.7 操作數(shù)的類型轉(zhuǎn)換 2.5 數(shù)據(jù)基本運算的實現(xiàn)-表達(dá)式 2.5.1 表達(dá)式的構(gòu)成與分類 2.5.2 操作符的優(yōu)先級和結(jié)合性 2.5.3 表達(dá)式中操作數(shù)的類型轉(zhuǎn)換 2.5.4 帶副作用操作符的表達(dá)式計算 2.5.5 表達(dá)式結(jié)果的輸出 2.6 小結(jié) 2.7 習(xí)題 第3章 程序的流程控制(算法)描述-語句 3.1 概述 3.2 順序執(zhí)行 3.2.1 表達(dá)式語句 3.2.2 復(fù)合語句 3.2.3 空語句 3.3 選擇執(zhí)行 3.3.1 if語句 3.3.2 switch語句 3.4 循環(huán)(重復(fù))執(zhí)行 3.4.1 迭代與窮舉 3.4.2 while語句 3.4.3 do-while語句 3.4.4 for語句 3.4.5 計數(shù)循環(huán)和事件循環(huán) 3.4.6 循環(huán)程序設(shè)計實例 3.5 無條件轉(zhuǎn)移 3.5.1 goto語句 3.5.2 break語句 3.5.3 continue語句 3.6 程序設(shè)計風(fēng)格 3.6.1 結(jié)構(gòu)化程序設(shè)計 3.6.2 關(guān)于goto語句 3.7 小結(jié) 3.8 習(xí)題 第4章 過程抽象-函數(shù) 4.1 概述 4.1.1 功能分解與復(fù)合 4.1.2 子程序及子程序間的數(shù)據(jù)傳遞 4.2 C++函數(shù) 4.2.1 函數(shù)的定義 4.2.2 函數(shù)的調(diào)用 4.2.3 值作為參數(shù)傳遞 4.2.4 局部變量與全局變量 4.2.5 基于函數(shù)的過程式程序設(shè)計 4.3 標(biāo)識符的作用域與變量的生存期 4.3.1 程序的多模塊結(jié)構(gòu) 4.3.2 標(biāo)識符的作用域 4.3.3 命名空間 4.3.4 變量的生存期(存儲分配) *4.3.5 基于棧的函數(shù)調(diào)用的實現(xiàn) 4.4 遞歸函數(shù) 4.4.1 什么是遞歸函數(shù) 4.4.2 “分而治之”的程序設(shè)計 4.4.3 遞歸與循環(huán)的選擇 4.4.4 遞歸函數(shù)應(yīng)用實例 4.5 標(biāo)準(zhǔn)函數(shù)庫 4.6 C++函數(shù)的進一步討論 4.6.1 內(nèi)聯(lián)函數(shù) 4.6.2 帶默認(rèn)值的形式參數(shù) 4.6.3 函數(shù)名重載 4.6.4 匿名函數(shù)-λ表達(dá)式 4.7 小結(jié) 4.8 習(xí)題 第5章 復(fù)合數(shù)據(jù)的描述-構(gòu)造數(shù)據(jù)類型 5.1 枚舉類型-自定義值集的數(shù)據(jù)描述 5.1.1 枚舉類型的定義 5.1.2 枚舉類型的操作 5.2 數(shù)組類型-由多個同類型元素構(gòu)成的復(fù)合數(shù)據(jù)描述 5.2.1 一維數(shù)組類型-線性復(fù)合數(shù)據(jù)的描述 5.2.2 一維字符數(shù)組-字符串類型的一種實現(xiàn) 5.2.3 二維數(shù)組類型-二維復(fù)合數(shù)據(jù)的描述 5.2.4 數(shù)組類型的應(yīng)用 5.3 結(jié)構(gòu)類型-由若干屬性構(gòu)成的復(fù)合數(shù)據(jù)描述 5.3.1 結(jié)構(gòu)類型的定義 5.3.2 結(jié)構(gòu)類型的操作 5.3.3 結(jié)構(gòu)類型的應(yīng)用 5.4 聯(lián)合類型-用一種類型表示多種類型的數(shù)據(jù) 5.4.1 聯(lián)合類型的定義與操作 5.4.2 聯(lián)合類型的應(yīng)用 5.5 指針類型-內(nèi)存地址的描述 5.5.1 指針類型的定義 5.5.2 指針類型的基本操作 5.5.3 指針作為參數(shù)類型 5.5.4 指針與動態(tài)變量 5.5.5 指針與數(shù)組 5.5.6 函數(shù)指針 *5.5.7 多級指針 5.6 引用類型-變量的別名 5.6.1 引用類型的定義 5.6.2 引用作為參數(shù)類型 5.7 小結(jié) 5.8 習(xí)題 第6章 數(shù)據(jù)抽象-對象與類 6.1 概述 6.1.1 數(shù)據(jù)抽象與封裝 6.1.2 面向?qū)ο蟪绦蛟O(shè)計 *6.1.3 面向?qū)ο蟪绦蛟O(shè)計與過程式程序設(shè)計的對比 6.2 類 6.2.1 數(shù)據(jù)成員 6.2.2 成員函數(shù) 6.2.3 成員的訪問控制-信息隱藏 6.3 對象 6.3.1 對象的創(chuàng)建 6.3.2 對象的操作 6.3.3 this指針 6.4 對象的初始化和消亡前處理 6.4.1 構(gòu)造函數(shù) 6.4.2 析構(gòu)函數(shù) 6.4.3 成員對象的初始化 6.4.4 拷貝構(gòu)造函數(shù) 6.5 類作為模塊 6.5.1 類模塊的組成 *6.5.2 Demeter法則 6.6 對象與類的進一步討論 6.6.1 對常量對象的訪問-常(const)成員函數(shù) 6.6.2 同類對象之間的數(shù)據(jù)共享-靜態(tài)(static)數(shù)據(jù)成員 6.6.3 提高對象私有數(shù)據(jù)成員的訪問效率-友元(friend) 6.6.4 對象拷貝構(gòu)造過程的優(yōu)化-轉(zhuǎn)移構(gòu)造函數(shù) 6.6.5 操作符重載 6.7 小結(jié) 6.8 習(xí)題 第7章 繼承(類的復(fù)用)-派生類 7.1 概述 7.1.1 類之間的繼承關(guān)系-基類與派生類 7.1.2 繼承的作用 7.2 單繼承 7.2.1 單繼承派生類的定義 7.2.2 在派生類中訪問基類成員-protected訪問控制 7.2.3 派生類對基類成員的訪問控制-繼承方式 7.2.4 派生類對象的初始化和賦值操作 7.2.5 單繼承的應(yīng)用實例 7.2.6 類之間的聚集關(guān)系 7.3 消息(成員函數(shù)調(diào)用)的動態(tài)綁定 7.3.1 消息的多態(tài)性 7.3.2 虛函數(shù)與消息的動態(tài)綁定 7.3.3 純虛函數(shù)和抽象類 *7.3.4 虛函數(shù)動態(tài)綁定的一種實現(xiàn) 7.4 多繼承 7.4.1 多繼承的必要性 7.4.2 多繼承派生類的定義 7.4.3 命名沖突 7.4.4 重復(fù)繼承-虛基類 7.5 小結(jié) 7.6 習(xí)題 第8章 類屬類型(泛型)-模板 8.1 概述 8.2 模板 8.2.1 函數(shù)模板 8.2.2 類模板 8.2.3 模板的復(fù)用 8.3 C++標(biāo)準(zhǔn)模板庫 8.3.1 概述 8.3.2 容器 8.3.3 迭代器 8.3.4 算法 8.4 小結(jié) 8.5 習(xí)題 第9章 輸入/輸出 9.1 概述 9.2 面向控制臺的輸入/輸出 9.2.1 基于函數(shù)庫的控制臺I/O 9.2.2 基于類庫的控制臺I/O 9.2.3 抽取/插入操作符“>>”和“<<”的重載 9.3 面向文件的輸入/輸出 9.3.1 文件概述 9.3.2 基于函數(shù)庫的文件I/O 9.3.3 基于類庫的文件I/O 9.4 面向字符串變量的輸入/輸出 9.5 小結(jié) 9.6 習(xí)題 第10章 異常處理 10.1 概述 10.1.1 什么是異常 10.1.2 異常處理的基本手段 10.2 C++異常處理機制 10.2.1 try、throw以及catch語句 10.2.2 異常的嵌套處理 10.3 基于斷言的程序調(diào)試 10.4 小結(jié) 10.5 習(xí)題 第11章 Windows應(yīng)用程序設(shè)計 11.1 Windows應(yīng)用程序的基本結(jié)構(gòu) 11.1.1 Windows應(yīng)用程序簡介 11.1.2 消息驅(qū)動的程序結(jié)構(gòu) 11.2 面向?qū)ο蟮腤indows應(yīng)用程序結(jié)構(gòu) 11.2.1 Windows應(yīng)用程序中的對象 11.2.2 微軟基礎(chǔ)類庫(MFC) 11.2.3 基于MFC“文檔-視”結(jié)構(gòu)的應(yīng)用框架 11.3 小結(jié) 11.4 習(xí)題 附錄A ASCII字符集及其編碼 附錄B IEEE浮點數(shù)的內(nèi)部表示 附錄C C++標(biāo)準(zhǔn)函數(shù)庫中的常用函數(shù) 附錄D C++編譯預(yù)處理命令 附錄E C++標(biāo)準(zhǔn)模板庫(STL)常用功能 附錄F MFC一些常用類的功能 參考文獻(xiàn)
你還可能感興趣
我要評論
|