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