本書自第1版出版以來,就深受廣大讀者歡迎,成為學習C 的經(jīng)典教材,這是*的第9版。本書共分19章,從計算機科學的基礎知識和內(nèi)容開始,介紹C 程序的基本組成部分,C 語言的語法和結構,類與面向?qū)ο缶幊,文件與I/O操作,遞歸的應用,多態(tài)與虛函數(shù),異常處理,模板實現(xiàn)與標準模板庫使用,鏈表的概念與操作,棧與隊列的概念與操作,二叉樹及其操作等。
本書的知識體系完整,編寫體例充分考慮了教學的需要,全書給出了思考題447道,復習與練習題586道,挑戰(zhàn)編程題304道,完整程序362個,非常適合作為高等院校計算機及相關專業(yè)程序設計與數(shù)據(jù)結構的教材,也是精通C 程序設計的*用書。
(1)知識體系完善,循序漸進,容易掌握。
(2)編寫體例適合教學,充分考慮到教學的進度和需要。
(3)圖示講解,一目了然;示例程序,精心設計。
(4)編程挑戰(zhàn)極具可擴展性。
(5)練習題447道,復習題586道,挑戰(zhàn)編程題304道,程序362個。
歡迎使用本書第9版中文版。本書適用于2或3學期的C 編程課程或一學期的快速課程。對于剛接觸編程的學生,以及其他語言課程的初學者,學習本書將大有裨益。本書不但為初學者提供了編程方面的基礎知識,也針對具有一定基礎的學習者深入探討了C 語言的技術細節(jié)、陷阱和微妙之處。本書的編寫風格清晰明快、易于理解,它涵蓋了介紹性編程課程的所有必要主題。本書還包含大量的示例程序,這些示例簡潔、實用,并且注重和現(xiàn)實接軌,確保學生不僅能學習到如何實現(xiàn)C 的功能和構造,還了解為什么要使用以及何時使用它們。
第9版中的內(nèi)容
新C 11標準
C 11是C 語言的最新標準。在該標準開發(fā)之初,它被稱為C 0x版本。2011年8月,國際標準化組織(International Standards Organization,ISO)批準了該版本,新標準正式定名為C 11。絕大多數(shù)流行的C 編譯器現(xiàn)在都已經(jīng)支持該標準。
新的C 11標準包含了核心語言的新特性,并且拓展了C 標準程序庫,但是,本書并不嚴格要求使用C 11編譯器。本書在介紹C 11標準的新性能時,會在頁邊附加C 11的圖標提示,沒有該圖標提示的程序仍然可以使用以前的編譯器進行編譯。
本書介紹的C 11主題
* 在第2章中介紹了auto關鍵字,它是一種簡化復雜變量定義的方式。該關鍵字使得編譯器可以從變量的初始化值推斷出它的數(shù)據(jù)類型。
* 第2章還介紹了新的long long int和unsigned long long int數(shù)據(jù)類型以及LL常數(shù)后綴。
* 第5章介紹了如何將一個string對象直接傳遞給一個文件流對象的open成員函數(shù),而不必調(diào)用c_str()成員函數(shù)。同時,也為使用早期編譯器的讀者保留了對于c_str()成員函數(shù)的使用介紹。
* 第7章介紹了強類型枚舉enum。
* 在第8章介紹了基于范圍的循環(huán)。這個新的循環(huán)機制會自動對數(shù)組、矢量或其他集合的每個元素進行迭代,無須使用計數(shù)器變量或下標。
* 第8章還介紹了初始化變量的新方式,演示了如何使用初始化列表來初始化一個矢量。
* 第10章介紹了智能指針,并且提供了新的獨占指針unique_ptr和共享指針shared_ptr的多個應用實例,解釋了如何使用它們安全地分配和使用動態(tài)內(nèi)存,以及要使用智能指針的原因。
* 第10章還介紹了移動賦值運算符,以及nullptr關鍵字,該關鍵字現(xiàn)在是表示空指針的新標準方式。
* 第11章討論了移動構造函數(shù),并且深入介紹了移動賦值運算符,此外還介紹了Lambda表達式。
* 第12章介紹了C 11 string庫中的新函數(shù),討論了新的重載函數(shù)to_string,它可以將數(shù)字值轉換為string對象。
* 第15章介紹和演示了新的override關鍵字的使用,它可以防止難以察覺的覆蓋錯誤。此外還介紹了final關鍵字,它可以防止虛成員函數(shù)被覆蓋。
* 第16章介紹了新的C 11函數(shù)begin(c)和end(c),以指定集合c中的開頭和末尾位置。
其他新變化
本書的教學方法和寫作風格與以前的版本保持一致。除了上面介紹的新增?C ?11?標 準內(nèi)容之外,還有許多其他方面的改進,使其更方便讀者學習使用。
更新材料
整本書中的材料已更新,以反映技術和軟件開發(fā)環(huán)境的變化。本書的知識介紹更加簡潔明快,并且在介紹性編程教學中融入了最佳實踐,因此,本書新增了大量圖形或經(jīng)過重新設計的插圖,在各章還添加了很多新的或經(jīng)過改寫的示例程序,使全書內(nèi)容更加豐富。
新資料
本書針對很多主題都添加了新的資料。除了上面介紹的使用C 11新特性的主題之外,新版還包括了對常數(shù)、隨機數(shù)以及枚舉數(shù)據(jù)類型等知識點的新修改,以及在設計類方面的改進資料。
新編程挑戰(zhàn)
新版在每個章節(jié)都增加了新的編程挑戰(zhàn)題目。
重組章節(jié)
為了提高讀者的學習能力,新版對若干章節(jié)進行了重組。例如,在第5章關于循環(huán)的介紹中,現(xiàn)在已經(jīng)重組為先讓讀者使用while循環(huán)進行更多的練習,然后再介紹do-while和for循環(huán)。在第6章關于函數(shù)的介紹中,已經(jīng)重組了定義和調(diào)用函數(shù)、函數(shù)原型介紹和main函數(shù)等方面的內(nèi)容。
本書的組織結構
本書以循序漸進的方式講授有關C 的內(nèi)容。每一章都涵蓋了一系列主題,并且可幫助學生隨著學習的進度而逐漸建立起完善的知識體系。雖然這些章節(jié)可以很輕松地按照現(xiàn)有順序進行教學,但也有一定的靈活性。下面的依賴關系圖(圖P-1)提出了可能的教學順序建議。
圖P-1 本書內(nèi)容依賴關系圖
第1章介紹基礎的硬件、軟件和編程概念。如果已經(jīng)掌握了這些主題的知識,則可以選擇跳過本章。
第2~6章涵蓋了基本的C 語法、數(shù)據(jù)類型、表達式、選擇結構、重復結構和函數(shù)等。這些章的每一章都建立在前一章的基礎上,應該按照所提出的順序開展教學。
第7章介紹面向?qū)ο缶幊,它可以在?章之后的任何時候進行學習,但必須在第11章之前。喜歡先引入數(shù)組概念的教師可以在第7章之前先講授第8章。當然,8.13節(jié)(對象數(shù)組)需要先學習第7章才能講授。
如圖P-1所示,在本書的后半部分,可以按任何順序?qū)W習第11~14章,第11章、第15章和第16章應該按順序進行。對于希望在本課程中盡早介紹數(shù)據(jù)結構的教師,可以跳過第15章和第16章的高級面向?qū)ο缶幊讨R,先講授第17章(鏈表)、第18章(棧和隊列)以及第19章(二叉樹),但是它們必須安排在第14章(遞歸)之后。并且,在這種情況下,有必要忽略第17~19章中有關處理模板和標準模板庫的部分。
各章內(nèi)容概述
第1章:計算機和編程簡介
該章提供了和計算機科學領域相關的基礎知識和內(nèi)容,涵蓋了硬件、軟件、操作系統(tǒng)、編程、解決問題和軟件工程等多方面的基本概念。介紹了關鍵詞、變量、運算符和標點符號等程序組件,以及層次結構圖和偽代碼等編程工具。綜合演練部分向?qū)W生展示了如何使用cout語句創(chuàng)建個性化的輸出消息。本章末尾的編程挑戰(zhàn)可以幫助學生了解如何使用相同的基本輸入、處理和輸出結構來創(chuàng)建多個程序。
第2章:C 簡介
該章旨在幫助學生初步了解C ,介紹了C 程序的基本部件、數(shù)據(jù)類型、變量和文本的使用、賦值語句、簡單的算術運算、程序輸出和注釋等。該章介紹了C string類,并且從此處開始,本書將使用string對象作為處理字符串的主要方法。該章還引入了編程風格約定,建立了良好的編程風格示范,并且貫穿全書。綜合演練部分則讓學生可以玩簡單的基于文本的圖形游戲。
第3章:表達式和交互
在該章中,學生將學習編寫輸入和處理數(shù)字、字符和字符串數(shù)據(jù)的程序,也包括算術運算符的使用和數(shù)學表達式的創(chuàng)建,以及運算符的優(yōu)先級等重點知識。該章還有一個專門的小節(jié)介紹調(diào)試方法以及如何手動跟蹤程序。此外還包括使用隨機數(shù)字、簡單的輸出格式設置、數(shù)據(jù)類型轉換和強制轉換,以及使用庫函數(shù)處理數(shù)字等。綜合演練部分向?qū)W生展示了如何創(chuàng)建一個簡單的互動文字游戲。
第4章:條件選擇
在該章中,學生將學習關系表達式,以及如何使用if、else和if-else if語句來控制程序的流程。此外也介紹了邏輯運算符、條件運算符和switch語句等。同時還提供了這些結構的應用示例說明,如菜單驅(qū)動的程序。該章還介紹了塊和作用域的概念,并延續(xù)調(diào)試的話題,討論了驗證輸出結果的問題。綜合演練部分允許學生使用隨機數(shù)字和分支語句來創(chuàng)建算命游戲。
第5章:循環(huán)
該章介紹了C 的重復控制機制。幫助學生了解while循環(huán)、do-while循環(huán)和for循環(huán),以及各種控制它們的方法。這些方法包括使用計數(shù)器、用戶輸入、結束標記符號和到達文件末尾測試等。該章還提供了很多使用循環(huán)的應用程序,例如保持累計匯總和執(zhí)行數(shù)據(jù)驗證等。該章還增加了一個關于文件處理的小節(jié)。另外,在有關調(diào)試和測試的部分,介紹了如何創(chuàng)建良好的測試數(shù)據(jù)。該章綜合演練部分向?qū)W生介紹了Windows命令,如何使用它們創(chuàng)建豐富多彩的輸出,以及通過循環(huán)實現(xiàn)彩色顯示。
第6章:函數(shù)
在該章中,學生將學習如何構建模塊化程序,并了解為什么要進行模塊化。該章首先介紹了void和值返回函數(shù)、形參傳遞等知識,強調(diào)了通過值傳遞和通過引用傳遞參數(shù)的區(qū)別。該章也介紹了變量作用域的概念,對局部變量、全局變量和靜態(tài)局部變量進行了區(qū)分。此外還介紹和演示了函數(shù)重載操作。綜合演練部分包括一個模塊化的菜單驅(qū)動程序,強調(diào)函數(shù)的多樣性,說明如何通過發(fā)送給它們的參數(shù)來控制其行為。
第7章:類和對象簡介
該章開始關注面向?qū)ο蟮姆独W生們將學習如何定義自己的類以及如何創(chuàng)建和使用這些類的對象。該章詳細介紹了哪些函數(shù)屬于一個類,而哪些函數(shù)則屬于使用這個類的客戶端程序。良好的面向?qū)ο髮嵺`是先進行充分的討論和模塊化設計,例如通過仔細構建的讀取器和設置器函數(shù)來保護成員數(shù)據(jù),并隱藏客戶端程序的類實現(xiàn)細節(jié)。一旦學生適應了使用類和對象,則可以深入探討本章提供的面向?qū)ο蠓治龊驮O計的主題。該章還介紹了有關枚舉數(shù)據(jù)類型和結構的相關知識。在綜合演練部分,學生們將學習使用屏幕控制技術來創(chuàng)建模擬溜溜球運動的動畫。
第8章:數(shù)組
在該章中,學生將學習如何創(chuàng)建和使用單維和多維數(shù)組。該章提供了許多數(shù)組處理的例子,包括使用函數(shù)來計算數(shù)組中的總和、平均值、最高值和最低值等。該章還介紹了使用二維數(shù)組創(chuàng)建表、按行或按列分析數(shù)組數(shù)據(jù)等。此外還演示了使用并行數(shù)組的編程技巧,并向?qū)W生展示了如何使用數(shù)據(jù)文件作為輸入源來填充數(shù)組。該章介紹了基于范圍的for循環(huán),它是遍歷數(shù)組所有元素的簡便方式。此外還引入了標準模板庫矢量,并使之與數(shù)組進行比較,以加深學生的印象。關于對象數(shù)組和結構數(shù)組的內(nèi)容被特意放在章節(jié)的末尾,這樣方便教師跳過第7章而先講授這一章,以后需要時再回來講授該節(jié)。綜合演練部分演示如何使用數(shù)組創(chuàng)建一個石頭、剪刀、布游戲。
第9章:搜索、排序和算法分析
在本章中,學生將學習搜索存儲在數(shù)組中的信息和排序數(shù)組(包括對象數(shù)組)的基本知識。該章涵蓋了線性搜索、二分搜索、冒泡排序和選擇排序算法,并加入了STL矢量搜索和排序的相關內(nèi)容。該章還提供了算法分析的簡要介紹,并向?qū)W生展示了如何確定兩種算法中哪一種算法更有效。該章的綜合演練部分使用了表格查找或搜索算法來編碼和解碼秘密消息。
第10章:指針
該章介紹了如何使用指針,主要內(nèi)容包括指針算術、指針初始化、指針比較、指針和數(shù)組、指針和函數(shù)、動態(tài)內(nèi)存分配、新的nullptr關鍵字等。另外還新增了有關智能指針的內(nèi)容,介紹如何使用它們避免內(nèi)存泄漏。綜合演練部分演示了如何使用指針訪問返回日歷時間的庫數(shù)據(jù)結構和函數(shù)。
第11章:類和面向?qū)ο缶幊淘斀?br /> 該章在第7章的基礎上繼續(xù)深入探討了有關類和面向?qū)ο缶幊痰南嚓P內(nèi)容。它涵蓋了對象的繼承、聚合和組合等有一定深度的內(nèi)容,并說明了Is-a和Has-a的區(qū)別。該章內(nèi)容還包括常量成員函數(shù)、靜態(tài)成員、友元、按成員賦值、復制構造函數(shù)、對象類型轉換運算符、轉換構造函數(shù)、運算符重載、移動構造函數(shù)和移動賦值運算符等。此外還添加了一個新的章節(jié),介紹函數(shù)對象和C 11的Lambda表達式。綜合演練部分匯集了繼承和轉換構造函數(shù)的概念,以構建一個程序,該程序?qū)?shù)組的內(nèi)容格式化為一個HTML表格,以便在Web站點上顯示。
第12章:C字符串和string類詳解
該章介紹了用于處理字符和C字符串的標準庫函數(shù),以及有關string類函數(shù)的資料,涵蓋新的C 11中的string庫、新的重載的to_string函數(shù)(將數(shù)字值轉換為string對象)等。綜合演練部分向?qū)W生展示了如何訪問基于字符串的程序環(huán)境,以獲取有關計算機和運行該程序的網(wǎng)絡的信息。
第13章:高級文件和I/O操作
該章介紹了更多有關順序訪問文本文件和隨機訪問二進制文件的內(nèi)容。討論了以不同的模式打開文件的設置,以及讀取和寫入文件內(nèi)容的多種方法。綜合演練程序應用了該章介紹的許多技術,將兩個文本文件合并成一個HTML文檔,以便在Web上顯示,并用不同的顏色來說明每個數(shù)據(jù)塊來自哪個文件。
第14章:遞歸
該章定義和演示了遞歸。通過清晰的遞歸調(diào)用圖示,講解了遞歸的原理和用法,并討論了遞歸應用程序。該章還提供了多種遞歸算法示例,包括計算階乘的遞歸函數(shù)、遞歸找到最大公約數(shù)、遞歸執(zhí)行二分搜索、使用QuickSort進行排序以及遞歸解決漢諾塔問題等。對于需要更多挑戰(zhàn)的學生來說,還可以研究本章提供的窮舉和枚舉算法。綜合演練部分使用遞歸來評估前綴表達式。
第15章:多態(tài)和虛函數(shù)
該章繼續(xù)深入討論類和面向?qū)ο缶幊,并介紹了一些更高級的概念,如多態(tài)和虛函數(shù)。此外還提供了抽象基類、純虛函數(shù)、繼承層次結構中的類型兼容性以及虛擬繼承等方面的內(nèi)容。綜合演練部分說明了如何使用繼承和多態(tài)來顯示圖形并使之產(chǎn)生動畫。
第16章:異常、模板和標準模板庫
該章介紹了如何使用異常來開發(fā)增強的錯誤捕獲技術,然后討論了如何使用函數(shù)和類模板來創(chuàng)建通用代碼。最后,還介紹了由標準模板庫(STL)提供的容器、迭代器和算法。綜合演練部分使用了標準模板庫中的各種容器來創(chuàng)建一款寓教于樂的兒童游戲。
第17章:鏈表
該章介紹使用鏈表所需的概念和技術。學生將首先了解鏈表抽象數(shù)據(jù)類型(ADT),然后學習如何創(chuàng)建和銷毀鏈表,以及編寫函數(shù)以插入、追加和刪除結點,遍歷鏈表和搜索特定結點的函數(shù)。此外還演示了鏈表類模板的使用。綜合演練部分將面向?qū)ο缶幊痰脑S多重要概念匯集在一起,通過將對象、繼承、多態(tài)與STL的list類相結合,為一組圖形制作 動畫。
第18章:棧和隊列
在該章中,學生將學習創(chuàng)建和使用靜態(tài)棧、動態(tài)棧和隊列。學生將了解到棧和隊列的操作,以及每個抽象數(shù)據(jù)類型的模板。基于靜態(tài)數(shù)組的棧使用異常處理機制來處理棧的溢出和下溢,該章提供了定義、拋出和捕獲異常的真實而自然的例子。綜合演練部分討論了評估后綴表達式的策略,以及使用棧將后綴表達式轉換為中綴表達式的方法。
第19章:二叉樹
該章介紹了二叉樹抽象數(shù)據(jù)類型并演示了許多二叉樹操作,包括遍歷樹,插入、刪除和替換元素,搜索特定的元素,以及銷毀樹。綜合演練部分介紹了一個足夠多樣化的樹結構來創(chuàng)建譜系樹。
書中的附錄
附錄A:ASCII字符集?ASCII和擴展ASCII字符及其代碼的列表。
附錄B:運算符優(yōu)先級和關聯(lián)性?C 運算符的優(yōu)先級和關聯(lián)性列表。
附錄C:思考題答案?該附錄可以作為一個工具供學生參考。通過做思考題和比較自己的答案,學生可以判斷自己對各章知識點的掌握程度。該附錄包括本書所有思考題的 答案。
附錄D:復習和練習奇數(shù)題的答案?學生可以用來評估自身對全書知識點的理解和掌握程度的另一個工具。
本書配套站點上的其他附錄
附錄E:面向?qū)ο缶幊毯喗?面向?qū)ο缶幊痰母拍詈托g語介紹。
附錄F:在類設計中使用UML?統(tǒng)一建模語言(UML)類圖的簡要介紹及其使用示例。
附錄G:多源文件程序?關于如何使用多個源文件創(chuàng)建、編譯和鏈接程序的教程。包括使用函數(shù)頭文件、類規(guī)范文件和類實現(xiàn)文件。
附錄H:多重和虛繼承?為已經(jīng)熟悉單個繼承的讀者提供的多重和虛繼承的C 概念的自助討論。
附錄I:頭文件和庫函數(shù)參考?本書中使用的C 庫函數(shù)和頭文件的參考。
附錄J:命名空間?對命名空間及其用途的解釋,提供了關于如何定義命名空間和訪問其成員的示例。
附錄K:C 強制轉換和運行時類型標識?介紹了在C 中進行類型強制轉換的不同方法和運行時類型標識。
附錄L:傳遞命令行參數(shù)?介紹編寫接受命令行參數(shù)的C 程序。本附錄對于在UNIX或Linux等命令行環(huán)境下工作的學生非常有用。
附錄M:二進制數(shù)字和位運算?二進制數(shù)字系統(tǒng)和C 位運算符的指南,以及整數(shù)的內(nèi)部存儲的教程。
附錄N:流程圖介紹?介紹流程圖及其符號的教程。它包括處理順序、選擇、大小寫、重復和調(diào)用其他模塊。該附錄中提供了本書若干個程序的示例流程圖。
本書特色內(nèi)容
核心概念:本書大部分章節(jié)內(nèi)容都以核心概念的陳述開始,它總結了本章的重點思想或核心知識點。
示例程序:本書有超過350個完整的示例程序,每個程序設計為突出目前正在討論的主題。在大多數(shù)情況下,這些都是實用示例。本書配套站點提供了這些程序的源代碼,以便學生可以自己運行程序。
程序輸出:在絕大多數(shù)示例程序之后,都有一個屏幕輸出樣本,向讀者演示了程序應該如何起作用。
綜合演練:這是一個特殊的部分,在每一章的最后都有,讀者可以通過該演練做一些聰明而有趣的事情,進而更好地掌握本章的內(nèi)容。
思考題:這是讀者測試自己學習效用的工具,也有利于讀者掌握學習要點。本書后面的附錄C提供了所有關于思考題的答案。
注意:出現(xiàn)在書中的適當位置。這些簡短的解釋性文字對于厘清知識要點或闡釋容易引起誤解的內(nèi)容很有幫助。
警告:對于某些C 特性、編程技術或做法提出警告,因為它們可能會導致程序出現(xiàn)故障或丟失數(shù)據(jù)。
案例研究:本書絕大多數(shù)章節(jié)都提供了模擬現(xiàn)實世界應用的案例研究,并且為每一個案例研究提供了完整的代碼。在本書配套站點上提供了更多的案例研究。這些案例研究旨在強調(diào)它們所出現(xiàn)章節(jié)的主要知識點。
復習和練習:本書每一章都提供了一套完整而多樣的復習和練習,如填空和簡答題,可以檢查學生對本章介紹內(nèi)容的掌握程度。接下來是對分析和解決問題能力的練習,如算法工作臺、預測輸出結果和找出錯誤部分。每個章節(jié)還提供了一項軟件技能練習,側重于培養(yǎng)學生的溝通技能和團隊協(xié)作能力。此外,本書后面的附錄D提供了所有章節(jié)的復習和練習奇數(shù)題的答案。
編程挑戰(zhàn):本書每一章都提供了一組編程練習,旨在鞏固學生對當前正在學習的知識要點和編程技巧的認識。在大多數(shù)情況下,這些挑戰(zhàn)題目提出了現(xiàn)實世界中需要解決的 問題。
團隊項目:本書有若干個團隊編程項目,建議由一個學生團隊完成。其中一個學生可以建立程序的用戶界面,另一個學生負責寫數(shù)學代碼,還有一個學生負責設計和實現(xiàn)一個程序使用的類。這個過程類似于許多專業(yè)程序的開發(fā)方式,并且也鼓勵課堂內(nèi)的團隊合作。
補 充 資 料
學生資源
以下項目可在www.pearsonhighered.com/cs-resources的Gaddis Series資源頁面上獲得:
* 本書包含的每個程序的完整源代碼。
* 額外的案例研究及其完整的源代碼。
* 本書附帶的全套附錄(包括若干個教程)。
* 訪問本書配套站點上的視頻教程。
* 下載大量編程環(huán)境和IDE的鏈接,包括Visual Studio Community Edition。
致??謝
本書的開發(fā)和出版獲得了很多人的幫助。在此謹對以下評審人員提供的有益建議和專業(yè)知識表示衷心感謝。
目??錄
第1章 計算機和編程簡介 1
1.1 為什么要使用程序 1
1.2 計算機系統(tǒng):硬件和軟件 2
1.2.1 硬件 2
1.2.2 軟件 5
1.2.3 思考題 6
1.3 程序和編程語言 6
1.3.1 程序的定義 7
1.3.2 編程語言 8
1.3.3 源代碼、目標代碼和可執(zhí)行
代碼 9
1.3.4 思考題 11
1.4 程序的組成 11
1.4.1 語言元素 11
1.4.2 代碼行和語句 13
1.4.3 變量 14
1.4.4 變量定義 14
1.5 輸入、處理和輸出 15
思考題 15
1.6 編程過程 16
1.6.1 設計和創(chuàng)建程序 16
1.6.2 軟件工程的定義 19
1.6.3 思考題 20
1.7 綜合演練:顯示個性化消息 20
1.7.1 復習和練習 21
1.7.2 編程挑戰(zhàn) 23
第2章 C 簡介 24
2.1 C 程序的部件 24
思考題 27
2.2 cout對象 27
2.3 #include指令 32
思考題 33
2.4 變量和賦值語句 33
2.5 常數(shù) 35
2.5.1 有時數(shù)字并不是數(shù)字 36
2.5.2 思考題 36
2.6 標識符 37
2.7 整型數(shù)據(jù)類型 39
2.7.1 整數(shù)和長整型常數(shù) 42
2.7.2 十六進制和八進制常數(shù) 43
2.7.3 思考題 43
2.8 浮點數(shù)據(jù)類型 44
2.8.1 浮點常數(shù) 45
2.8.2 將浮點值分配給整型變量 46
2.8.3 思考題 47
2.9 char數(shù)據(jù)類型 47
2.10 C string類 51
2.10.1 使用string類 51
2.10.2 思考題 52
2.11 bool數(shù)據(jù)類型 52
2.12 確定數(shù)據(jù)類型的大小 53
2.13 變量賦值和初始化詳解 54
2.14 作用域 56
2.15 算術運算符 56
思考題 60
2.16 注釋 60
2.16.1 單行注釋 61
2.16.2 多行注釋 61
2.17 編程風格 62
2.18 綜合演練:笑臉! 63
2.18.1 復習和練習 64
2.18.2 編程挑戰(zhàn) 68
第3章 表達式和交互 71
3.1 cin對象 71
3.1.1 輸入多個值 74
3.1.2 思考題 76
3.2 數(shù)學表達式 77
3.2.1 運算符的優(yōu)先級 79
3.2.2 關聯(lián)性 80
3.2.3 用圓括號分組 80
3.2.4 將代數(shù)表達式轉換為編程
語句 81
3.2.5 指數(shù)問題詳解 81
3.2.6 思考題 83
3.3 數(shù)據(jù)類型轉換和類型強制轉換 85
3.3.1 類型強制轉換 86
3.3.2 思考題 89
3.4 溢出和下溢 90
3.5 命名常量 91
思考題 93
3.6 多變量和組合賦值 94
3.6.1 組合賦值運算符 94
3.6.2 思考題 96
3.7 格式化輸出 97
3.7.1 setprecision操作符 100
3.7.2 fixed操作符 103
3.7.3 showpoint操作符 104
3.7.4 left和right操作符 105
3.7.5 思考題 107
3.8 處理字符和字符串 107
3.8.1 輸入字符串 108
3.8.2 輸入一個字符 110
3.8.3 使用cin.get 110
3.8.4 混合使用cin >>和cin.get 112
3.8.5 使用cin.ignore 112
3.8.6 實用的string成員函數(shù)和
運算符 113
3.8.7 使用C字符串 115
3.8.8 為C字符串賦值 116
3.8.9 跟蹤一個C字符串的大小 117
3.8.10 讀取一行輸入 119
3.8.11 思考題 120
3.9 更多數(shù)學庫函數(shù) 120
3.10 隨機數(shù)字 122
3.10.1 限制隨機數(shù)的范圍 125
3.10.2 思考題 125
3.11 關于調(diào)試:手動跟蹤程序 126
3.12 Green Fields Landscaping案例
研究第1部分 127
3.12.1 問題陳述 127
3.12.2 程序設計 128
3.12.3 程序 128
3.12.4 General Crates公司案例
研究 130
3.13 綜合演練:單詞游戲 130
3.13.1 復習和練習 132
3.13.2 編程挑戰(zhàn) 137
第4章 條件選擇 143
4.1 關系運算符 143
4.1.1 關系的值 144
4.1.2 真值和假值 145
4.1.3 思考題 147
4.2 if語句 148
4.2.1 編程風格和if語句 151
4.2.2 要注意的3個常見錯誤 151
4.2.3 真值詳解 153
4.2.4 標記 154
4.2.5 整數(shù)標記 155
4.2.6 思考題 155
4.3 if-else語句 156
4.3.1 使用if 或if-else的時機 157
4.3.2 比較浮點數(shù) 159
4.3.3 思考題 161
4.4 if-else if語句 161
4.4.1 使用結尾else 166
4.4.2 思考題 167
4.5 菜單驅(qū)動程序 168
4.6 嵌套if語句 170
思考題 173
4.7 邏輯運算符 174
4.7.1 &&運算符 174
4.7.2 || 運算符 176
4.7.3 ! 運算符 178
4.7.4 布爾變量和?!運算符 179
4.7.5 邏輯運算符的優(yōu)先級和
關聯(lián)性 181
4.7.6 使用邏輯運算符檢查數(shù)字
范圍 182
4.7.7 思考題 182
4.8 驗證用戶輸入 183
4.9 塊和作用域詳解 185
4.9.1 同名變量 186
4.9.2 思考題 187
4.10 字符和字符串詳解 188
4.10.1 比較字符 188
4.10.2 比較string對象 189
4.10.3 測試字符 191
4.10.4 思考題 193
4.11 條件運算符 194
4.11.1 使用條件表達式的值 195
4.11.2 思考題 197
4.12 switch語句 197
4.12.1 在菜單驅(qū)動系統(tǒng)中使用
switch 203
4.12.2 思考題 205
4.13 枚舉數(shù)據(jù)類型 206
思考題 209
4.14 關于測試和調(diào)試:驗證輸出結果 210
4.15 Green Fields Landscaping案例研
究第2部分 212
4.15.1 問題陳述 212
4.15.2 程序設計 213
4.15.3 程序 214
4.15.4 Crazy A1的計算機商業(yè)
案例研究 216
4.16 綜合演練:算命游戲 217
4.16.1 復習和練習 218
4.16.2 編程挑戰(zhàn) 222
第5章 循環(huán) 228
5.1 循環(huán)介紹:while循環(huán) 228
5.1.1 while循環(huán) 228
5.1.2 while是一個預測試循環(huán) 230
5.1.3 無限循環(huán) 231
5.1.4 編程風格和while循環(huán) 232
5.1.5 思考題 234
5.2 使用while循環(huán)驗證輸入 235
5.3 遞增和遞減運算符 237
5.3.1 后綴和前綴模式 239
5.3.2 在數(shù)學表達式中使用遞增
和遞減運算符 241
5.3.3 在關系表達式中使用遞增
和遞減運算符 241
5.3.4 思考題 242
5.4 計數(shù)器 243
5.5 保持累計匯總 245
5.6 標記符號 247
思考題 248
5.7 do-while循環(huán) 249
5.7.1 toupper函數(shù) 251
5.7.2 與菜單一起使用do-while 252
5.7.3 思考題 254
5.8 for循環(huán) 254
5.8.1 for循環(huán)是一個預測試循環(huán) 257
5.8.2 避免修改for循環(huán)體中的
計數(shù)器變量 257
5.8.3 更新表達式的其他形式 258
5.8.4 定義for循環(huán)初始化表達式
中的變量 258
5.8.5 創(chuàng)建用戶控制的for循環(huán) 258
5.8.6 在初始化和更新表達式中
使用多個語句 259
5.8.7 省略for循環(huán)的表達式或
循環(huán)體 260
5.8.8 思考題 260
5.9 關于軟件工程:決定使用哪個
循環(huán) 261
5.9.1 while循環(huán) 261
5.9.2 do-while循環(huán) 262
5.9.3 for循環(huán) 262
5.10 嵌套循環(huán) 262
5.11 打破循環(huán) 265
5.11.1 在嵌套循環(huán)中使用break 266
5.11.2 continue語句 267
5.11.3 思考題 268
5.12 使用文件進行數(shù)據(jù)存儲 269
5.12.1 文件類型 270
5.12.2 文件訪問方法 271
5.12.3 文件名和文件流對象 271
5.12.4 為輸入輸出文件設置
程序 272
5.12.5 創(chuàng)建文件流對象并打開
文件 273
5.12.6 關閉文件 274
5.12.7 將數(shù)據(jù)寫入文件 274
5.12.8 從文件讀取數(shù)據(jù) 276
5.12.9 讀取位置 278
5.12.10 讓用戶指定一個文件名 279
5.12.11 使用舊版本C 中的
c_str成員函數(shù) 280
5.12.12 檢測文件的末尾 280
5.12.13 測試文件打開的錯誤 282
5.12.14 思考題 284
5.13 關于測試和調(diào)試:創(chuàng)建良好的
測試數(shù)據(jù) 284
5.14 Central Mountain Credit Union
案例研究 287
5.14.1 問題陳述 287
5.14.2 計算 287
5.14.3 變量 287
5.14.4 程序設計 288
5.14.5 詳細偽代碼 288
5.14.6 程序 289
5.14.7 測試程序 291
5.14.8 Lightening Lanes案例
研究 291
5.15 綜合演練:多彩世界 291
5.15.1 復習和練習 294
5.15.2 編程挑戰(zhàn) 299
第6章 函數(shù) 305
6.1 模塊化編程 305
6.2 定義和調(diào)用函數(shù) 306
6.2.1 空函數(shù) 307
6.2.2 調(diào)用函數(shù) 307
6.2.3 思考題 313
6.3 函數(shù)原型 314
6.4 將數(shù)據(jù)發(fā)送到函數(shù)中 315
6.5 按值傳遞數(shù)據(jù) 320
思考題 322
6.6 使用return語句 323
6.7 從函數(shù)返回值 325
6.7.1 定義一個返回值函數(shù) 325
6.7.2 調(diào)用返回值函數(shù) 326
6.8 返回一個布爾值 330
思考題 332
6.9 在菜單驅(qū)動程序中使用函數(shù) 332
6.10 局部變量和全局變量 336
6.10.1 局部變量 336
6.10.2 局部變量生存期 338
6.10.3 使用形參值初始化本地
變量 338
6.10.4 全局變量 338
6.10.5 全局常數(shù) 340
6.10.6 具有相同名稱的局部
變量和全局變量 342
6.11 靜態(tài)局部變量 343
思考題 345
6.12 默認實參 346
6.13 使用引用變量作為形參 349
6.13.1 按引用傳遞實參和
按值傳遞實參的時機 353
6.13.2 將文件傳遞給函數(shù) 355
6.13.3 思考題 358
6.14 重載函數(shù) 359
6.15 使用exit()函數(shù) 364
思考題 365
6.16 樁模塊和驅(qū)動模塊 366
6.17 小樂透案例研究 369
6.17.1 問題陳述 369
6.17.2 程序設計 369
6.17.3 程序 371
6.17.4 High Adventrue Travel
Agency旅行社案例研究 374
6.18 綜合演練:發(fā)光的南瓜燈 374
6.18.1 復習和練習 378
6.18.2 編程挑戰(zhàn) 381
第7章 類和對象簡介 388
7.1 抽象數(shù)據(jù)類型 388
7.1.1 抽象 388
7.1.2 在軟件開發(fā)中使用抽象 389
7.1.3 抽象數(shù)據(jù)類型 389
7.2 面向?qū)ο缶幊?389
7.3 關于類的介紹 391
7.3.1 使用已經(jīng)知道的類 391
7.3.2 創(chuàng)建自己的類 392
7.3.3 訪問修飾符 393
7.3.4 private和public成員的
位置 393
7.4 創(chuàng)建和使用對象 394
7.4.1 訪問對象的成員 395
7.4.2 訪問器和設置器 396
7.5 定義成員函數(shù) 397
7.5.1 類成員函數(shù)的命名約定 399
7.5.2 避免陳舊數(shù)據(jù) 402
7.5.3 內(nèi)聯(lián)函數(shù)詳解 402
7.5.4 思考題 403
7.6 構造函數(shù) 403
7.6.1 重載構造函數(shù) 407
7.6.2 默認構造函數(shù) 408
7.7 析構函數(shù) 409
思考題 410
7.8 私有成員函數(shù) 412
7.9 將對象傳遞給函數(shù) 415
7.9.1 常量引用形參 418
7.9.2 從函數(shù)返回一個對象 419
7.9.3 思考題 422
7.10 對象組合 422
思考題 425
7.11 關于軟件工程:分離類規(guī)范、
實現(xiàn)和客戶端代碼 426
7.11.1 使用多個文件的優(yōu)點 431
7.11.2 在類對象中執(zhí)行輸入
輸出 432
7.11.3 思考題 432
7.12 結構 432
7.12.1 訪問結構成員 433
7.12.2 顯示和比較結構變量 435
7.12.3 初始化結構 436
7.12.4 嵌套結構 437
7.12.5 思考題 440
7.12.6 將結構傳遞給函數(shù) 441
7.12.7 從函數(shù)返回一個結構 443
7.12.8 思考題 444
7.13 枚舉數(shù)據(jù)類型詳解 445
7.13.1 在同一個語句中聲明enum
數(shù)據(jù)類型并定義變量 445
7.13.2 將整數(shù)賦值給enum
變量 445
7.13.3 將枚舉量賦值給int
變量 446
7.13.4 使用數(shù)學運算符改變
enum變量的值 446
7.13.5 使用枚舉量輸出值 446
7.13.6 使用枚舉量控制循環(huán) 447
7.13.7 使用C 11中的強類型
enum 448
7.14 Home Software公司OOP案例
研究 449
7.14.1 私有成員變量 450
7.14.2 公共成員函數(shù) 450
7.14.3 類聲明 450
7.14.4 withdraw會員函數(shù) 451
7.14.5 類接口 452
7.14.6 實現(xiàn)類 452
7.15 面向?qū)ο蠓治雠c設計介紹 456
7.15.1 尋找類 459
7.15.2 確定類的責任 462
7.15.3 這僅僅是個開始 465
7.15.4 對象的可重用性 465
7.15.5 面向?qū)ο笈c基于對象的
編程 465
7.15.6 思考題 465
7.16 屏幕控制 466
7.16.1 屏幕光標定位 466
7.16.2 創(chuàng)建一個屏幕輸入表單 469
7.17 綜合演練:溜溜球動畫 471
7.17.1 復習和練習 473
7.17.2 編程挑戰(zhàn) 479
第8章 數(shù)組 486
8.1 保存多個值的數(shù)組 486
8.2 訪問數(shù)組元素 488
8.3 輸入和顯示數(shù)組內(nèi)容 489
8.3.1 將數(shù)據(jù)從文件讀入數(shù)組 491
8.3.2 將數(shù)組的內(nèi)容寫入文件 493
8.3.3 C 中沒有數(shù)組邊界檢查 493
8.3.4 注意大小差一錯誤 495
8.3.5 思考題 496
8.4 數(shù)組初始化 497
8.4.1 從數(shù)組元素1開始 501
8.4.2 數(shù)組部分初始化 501
8.4.3 隱式數(shù)組大小 503
8.4.4 初始化變量的新方法 503
8.5 基于范圍的for循環(huán) 504
8.6 處理數(shù)組內(nèi)容 507
8.6.1 復制一個數(shù)組到另一個 509
8.6.2 比較兩個數(shù)組 510
8.6.3 對數(shù)字數(shù)組中的值求和 511
8.6.4 查找數(shù)字數(shù)組中數(shù)值的
平均值 511
8.6.5 在數(shù)字數(shù)組中查找最高值
和最低值 512
8.6.6 部分填充數(shù)組 514
8.6.7 為什么要使用數(shù)組 515
8.6.8 處理字符串 517
8.7 使用并行數(shù)組 519
思考題 521
8.8 typedef聲明 523
8.9 數(shù)組作為函數(shù)參數(shù) 523
8.9.1 使用const數(shù)組形參 529
8.9.2 一些有用的數(shù)組函數(shù) 529
8.9.3 思考題 532
8.10 二維數(shù)組 533
8.10.1 將二維數(shù)組傳遞給函數(shù) 537
8.10.2 對二維數(shù)組的所有元素
求和 539
8.10.3 對二維數(shù)組的行求和 539
8.10.4 對二維數(shù)組的列求和 540
8.11 三維或三維以上數(shù)組 541
思考題 543
8.12 矢量 544
8.12.1 定義和初始化矢量 545
8.12.2 存儲和檢索矢量中的值 546
8.12.3 使用C 11中基于范圍
的for循環(huán)和vector 548
8.12.4 使用push_back成員
函數(shù) 549
8.12.5 確定矢量的大小 550
8.12.6 從矢量中刪除元素 552
8.12.7 清理矢量 553
8.12.8 檢測一個空矢量 554
8.12.9 矢量成員函數(shù)匯總 556
8.12.10 思考題 556
8.13 對象數(shù)組* 557
8.13.1 思考題 562
8.13.2 結構數(shù)組 563
8.13.3 思考題 566
8.14 National Commerce Bank案例
研究 567
8.15 綜合演練:石頭、剪刀、布 569
8.15.1 復習和練習 571
8.15.2 編程挑戰(zhàn) 575
第9章 搜索、排序和算法分析 585
9.1 搜索算法簡介 585
9.1.1 線性搜索 585
9.1.2 二分搜索 588
9.2 搜索對象數(shù)組 591
思考題 595
9.3 排序算法簡介 595
9.3.1 冒泡排序 595
9.3.2 選擇排序 599
9.3.3 思考題 604
9.4 對象數(shù)組排序 604
9.5 矢量排序和搜索 607
9.6 算法分析簡介 609
9.6.1 計算問題和基本步驟 610
9.6.2 算法的復雜度 611
9.6.3 算法的最壞情況下的
復雜度 613
9.6.4 平均情況下的復雜度 615
9.6.5 漸近復雜度與大O表示法 615
9.6.6 思考題 617
9.7 案例研究 617
9.8 綜合演練:秘密消息 617
9.8.1 復習和練習 622
9.8.2 編程挑戰(zhàn) 623
第10章 指針 627
10.1 指針和地址運算符 627
10.2 指針變量 629
10.3 數(shù)組與指針之間的關系 632
10.4 指針的算術運算 637
10.5 初始化指針 638