本書(shū)是為以C++語(yǔ)言作為程序設(shè)計(jì)入門(mén)語(yǔ)言的初學(xué)者而編寫(xiě)的,全書(shū)分為基礎(chǔ)篇、能力篇和實(shí)驗(yàn)篇;A(chǔ)篇共有9章,介紹C++語(yǔ)言的語(yǔ)法、編程規(guī)范與技巧,有典型例題和大量習(xí)題。能力篇介紹6種常用算法的思想與趣味實(shí)例,這些貼近生活的實(shí)例可使學(xué)生觸類旁通,舉一反三。實(shí)驗(yàn)篇介紹了14個(gè)實(shí)驗(yàn),每個(gè)實(shí)驗(yàn)由四部分組成,引導(dǎo)學(xué)生從分析程序、完善程序,到動(dòng)手編程,最后得以進(jìn)階提高。
本書(shū)簡(jiǎn)潔易懂,深入淺出,內(nèi)容取舍合理,重點(diǎn)突出,重視應(yīng)用。針對(duì)初學(xué)者的思維特點(diǎn)和教材難點(diǎn),每章末尾有常見(jiàn)錯(cuò)誤分析板塊,使學(xué)生少犯同樣的錯(cuò)誤。本書(shū)強(qiáng)調(diào)培養(yǎng)算法素養(yǎng)、良好編程風(fēng)格以及面向?qū)ο蟮乃季S模式,例如第10章以“求三角形種類與面積”為例,討論了一個(gè)小型的課程設(shè)計(jì)的開(kāi)發(fā)過(guò)程,可以提高學(xué)生的綜合編程能力。
本書(shū)是大學(xué)C++程序設(shè)計(jì)教材,也可以作為程序設(shè)計(jì)愛(ài)好者自學(xué)以及參加計(jì)算機(jī)等級(jí)考試的參考資料。
C++語(yǔ)言是當(dāng)今應(yīng)用廣泛的一種混合型的高級(jí)程序設(shè)計(jì)語(yǔ)言。它既保持了C語(yǔ)言的高效和精練,支持面向過(guò)程的程序設(shè)計(jì)的特點(diǎn),同時(shí)又是面向?qū)ο笳Z(yǔ)言的杰出代表。
C++語(yǔ)言是眾多高級(jí)語(yǔ)言中比較難學(xué)的一種,一是因?yàn)閮?nèi)容龐大,規(guī)則繁多,使用靈活,既要講面向過(guò)程的程序設(shè)計(jì),又要講面向?qū)ο蟮某绦蛟O(shè)計(jì)。一般講授C++語(yǔ)言有兩種方式,一種是先學(xué)C語(yǔ)言,再學(xué)C++語(yǔ)言;另一種是直接講授C++語(yǔ)言。由于受學(xué)時(shí)限制,很多學(xué)校采用第二種方式。由于C++作為入門(mén)語(yǔ)言,沒(méi)有其他高級(jí)語(yǔ)言基礎(chǔ),所以從初學(xué)者的思維角度,應(yīng)該先快速地引導(dǎo)他們認(rèn)識(shí)面向過(guò)程的程序設(shè)計(jì),熟悉選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)、函數(shù)、數(shù)組、指針等概念,然后轉(zhuǎn)向面向?qū)ο蟮某绦蛟O(shè)計(jì),重點(diǎn)掌握封裝、繼承、多態(tài)的概念。對(duì)于C語(yǔ)言中的一些重要概念,比如二維數(shù)組、指針、結(jié)構(gòu)體、共用體等,在C++中不進(jìn)行深入討論,淡化“指針”,突出“引用”,將“結(jié)構(gòu)體”作為一種特殊的“類”處理。
在學(xué)習(xí)C++語(yǔ)言的過(guò)程中,會(huì)不可避免地遇到如何處理面向過(guò)程的程序設(shè)計(jì)與面向?qū)ο蟮某绦蛟O(shè)計(jì)的關(guān)系。筆者認(rèn)為不應(yīng)將二者對(duì)立起來(lái),前者是掌握C++的基礎(chǔ),后者是思維模式的轉(zhuǎn)變與提高。對(duì)于一些簡(jiǎn)單的問(wèn)題,采用面向過(guò)程的方法自然、實(shí)用,而且面向過(guò)程的方法更容易突出算法思想; 對(duì)于一些較大規(guī)模的問(wèn)題,從模塊化程序設(shè)計(jì)轉(zhuǎn)變到類與對(duì)象是一種自然的過(guò)渡。本書(shū)第10章列舉了一個(gè)“求三角形種類與面積”示例,用不同的方法解決一個(gè)問(wèn)題,可以幫助學(xué)生理清程序設(shè)計(jì)思路,選擇合適的方法逐步求精,進(jìn)而完善程序功能。
本書(shū)的目標(biāo)
通過(guò)本課程的學(xué)習(xí),希望讀者能掌握C++語(yǔ)言的基本規(guī)則和概念,具備編寫(xiě)和調(diào)試一些簡(jiǎn)單程序的能力,在解決實(shí)際問(wèn)題過(guò)程中,能夠有意識(shí)地運(yùn)用基本算法,并建立面向?qū)ο蟮乃季S模式。最后,讀者學(xué)習(xí)本課程也為通過(guò)C++二級(jí)考試打好基礎(chǔ)。
本書(shū)的特色
。1) 詳略得當(dāng),重點(diǎn)突出。本書(shū)以大學(xué)計(jì)算機(jī)基礎(chǔ)教學(xué)的基本要求為依據(jù),兼顧全國(guó)計(jì)算機(jī)等級(jí)考試(C++二級(jí))大綱要求。C++語(yǔ)言的內(nèi)容可以說(shuō)是博大精深,如果把所有內(nèi)容都羅列進(jìn)來(lái),不僅學(xué)時(shí)不夠,而且學(xué)生也難以消化。所以,在內(nèi)容選擇上,一些不常用而且比較難的內(nèi)容,比如異常處理、STL標(biāo)準(zhǔn)模板庫(kù)等,都不在本書(shū)范圍內(nèi)。字符串處理是實(shí)際應(yīng)用中經(jīng)常遇到的問(wèn)題,也是程序設(shè)計(jì)中的一個(gè)難點(diǎn),關(guān)于這個(gè)難點(diǎn),本書(shū)詳細(xì)介紹了兩種方法: 傳統(tǒng)的C語(yǔ)言處理方法和C++的string類的方法,讀者可以體會(huì)各自的特點(diǎn)。
。2) 理論與實(shí)踐并重,強(qiáng)調(diào)算法思想和編程能力的培養(yǎng)。本書(shū)分為基礎(chǔ)篇、能力篇和實(shí)驗(yàn)篇三部分;A(chǔ)篇為第1~9章,主要介紹C++語(yǔ)言的語(yǔ)法、規(guī)則以及基本的編程方法。能力篇為第10章,針對(duì)初學(xué)者普遍存在的“看得懂,不會(huì)編程序”的問(wèn)題,首先介紹一些常用的算法及其應(yīng)用,比如枚舉法、遞推法、迭代法、遞歸法、分治法、貪心法等,這些算法在不少程序設(shè)計(jì)教材中也有涉及,但是都比較分散,本書(shū)集中講解了各種算法,有利于讀者系統(tǒng)地掌握算法的特點(diǎn)和應(yīng)用技巧; 然后講解了開(kāi)發(fā)一個(gè)綜合實(shí)例的過(guò)程,從簡(jiǎn)單設(shè)計(jì)到逐步完善,從面向過(guò)程到面向?qū)ο,引?dǎo)讀者掌握開(kāi)發(fā)一個(gè)有一定規(guī)模的程序的方法。實(shí)驗(yàn)篇包含14個(gè)實(shí)驗(yàn),每個(gè)實(shí)驗(yàn)由分析程序、完善程序、編寫(xiě)程序和進(jìn)階提高四部分組成,遵循循序漸進(jìn)、逐步提高的原則,先從驗(yàn)證性程序起步,然后是閱讀和完善別人的程序,接著是學(xué)會(huì)獨(dú)立編寫(xiě)和調(diào)試程序,最后是綜合提高。
(3) 預(yù)先出錯(cuò)提醒,讓學(xué)生盡量少犯錯(cuò)誤,少走彎路。在第2~8章的每章最后,都有一節(jié)“常見(jiàn)錯(cuò)誤分析”,總結(jié)初學(xué)者在編程中容易出現(xiàn)的錯(cuò)誤以及容易混淆的概念。學(xué)生了解了編程中出錯(cuò)的位置和原因,才能不斷進(jìn)步,編寫(xiě)出正確的、高質(zhì)量的程序。
。4) 遵循C++標(biāo)準(zhǔn)和規(guī)范。鑒于Visual C++ 6.0的廣泛應(yīng)用,并作為指定考試環(huán)境,本書(shū)所有程序都在該環(huán)境下調(diào)試通過(guò)。但是,程序要符合標(biāo)準(zhǔn)C++規(guī)范,對(duì)于Visual C++ 6.0不符合標(biāo)準(zhǔn)的地方以及一些bug給予明確說(shuō)明,以保證程序在其他環(huán)境中也能正常運(yùn)行。
。5) 習(xí)題豐富,類型多樣。填空題包括概念填空題、完善程序題以及閱讀程序、寫(xiě)運(yùn)行結(jié)果等。編程題是初學(xué)者感覺(jué)比較困難的,需要加強(qiáng)訓(xùn)練。讀者在學(xué)習(xí)有關(guān)內(nèi)容和例題的基礎(chǔ)上,可以編寫(xiě)出規(guī)范的、可讀性好的程序,不局限于一個(gè)標(biāo)準(zhǔn)答案,鼓勵(lì)“一題多解”,舉一反三。簡(jiǎn)答題主要涉及一些初學(xué)者模糊不清的概念,通過(guò)這類題目可以使學(xué)生加深對(duì)基本概念的理解。
本書(shū)的內(nèi)容
本書(shū)共分為3個(gè)部分;A(chǔ)篇包括第1~9章的內(nèi)容。第1章是C++語(yǔ)言概述; 第2章是簡(jiǎn)單的程序設(shè)計(jì),包括數(shù)據(jù)類型、變量、表達(dá)式以及選擇結(jié)構(gòu)與循環(huán)結(jié)構(gòu)程序設(shè)計(jì); 第3章介紹用戶自定義的數(shù)據(jù)類型,包括數(shù)組、指針、引用、字符串以及枚舉、結(jié)構(gòu)體與共用體等; 第4章介紹函數(shù)以及程序結(jié)構(gòu)、變量作用域與生存期等概念; 第5章介紹類與對(duì)象; 第6章介紹類的繼承與派生; 第7章介紹類的多態(tài)性; 第8章介紹文件操作以及輸入輸出格式控制; 第9章介紹函數(shù)模板和類模板。能力篇為第10章,首先介紹一些常用的算法,包括枚舉法、遞推法、迭代法、遞歸法、分治法、貪心法及模擬法等(動(dòng)態(tài)規(guī)劃、回溯法等超出本書(shū)范圍,不作介紹); 然后以“求三角形種類與面積”為例,討論了編寫(xiě)一個(gè)有一定規(guī)模的程序的過(guò)程和方法。實(shí)驗(yàn)篇包含14個(gè)實(shí)驗(yàn),每個(gè)實(shí)驗(yàn)由淺入深,包括4個(gè)組成部分,可以根據(jù)學(xué)時(shí)靈活裁剪。附錄A包含一套C++筆試模擬試題和上機(jī)操作題,基本以歷年C++二級(jí)考試真題為藍(lán)本,可以參考檢驗(yàn)讀者掌握C++的程度。
本書(shū)是面向C++語(yǔ)言初學(xué)者的入門(mén)教材,也可作為計(jì)算機(jī)二級(jí)考試的參考書(shū)。
蘇成編寫(xiě)第3~5、7~10章,姜薇編寫(xiě)第1~2章,孫仁科編寫(xiě)第5章; 實(shí)驗(yàn)篇以及第2~10章的習(xí)題由蘇成、陳廷杰編寫(xiě); 全書(shū)由蘇成統(tǒng)稿。
在本書(shū)的編寫(xiě)過(guò)程中得到了計(jì)算機(jī)學(xué)院、教務(wù)處的支持與幫助,C++課程的有關(guān)任課教師提出了許多寶貴意見(jiàn),楊文嘉老師提出了許多好的建議,在此一并致謝。最后,感謝清華大學(xué)出版社員工的辛勤勞動(dòng),并感謝魏江江老師的大力支持。
由于水平所限,書(shū)中難免存在疏漏之處,敬請(qǐng)廣大讀者批評(píng)指正。
基礎(chǔ)篇
第1章c++語(yǔ)言概述
1.1c++語(yǔ)言的產(chǎn)生和發(fā)展
1.2c++語(yǔ)言的特點(diǎn)
1.3c++程序的結(jié)構(gòu)
1.3.1簡(jiǎn)單的c++程序?qū)嵗?br>1.3.2c++程序結(jié)構(gòu)分析
1.4c++程序的開(kāi)發(fā)步驟和集成開(kāi)發(fā)環(huán)境
1.4.1c++程序的開(kāi)發(fā)步驟
1.4.2vc++6.0集成開(kāi)發(fā)環(huán)境
習(xí)題
第2章簡(jiǎn)單的程序設(shè)計(jì)
2.1c++語(yǔ)言的字符集、標(biāo)識(shí)符與關(guān)鍵字
2.1.1字符集
2.1.2標(biāo)識(shí)符
2.1.3關(guān)鍵字
2.2數(shù)據(jù)類型
2.2.1c++語(yǔ)言的數(shù)據(jù)類型簡(jiǎn)介
2.2.2基本數(shù)據(jù)類型
2.2.3用typedef重定義類型
2.3常量與變量
2.3.1常量
2.3.2變量
2.4不同類型數(shù)據(jù)的轉(zhuǎn)換
2.4.1隱式類型轉(zhuǎn)換
2.4.2強(qiáng)制類型轉(zhuǎn)換
2.5運(yùn)算符與表達(dá)式
2.5.1c++運(yùn)算符簡(jiǎn)介
2.5.2算術(shù)運(yùn)算符與算術(shù)表達(dá)式
2.5.3賦值運(yùn)算符與賦值表達(dá)式
2.5.4關(guān)系運(yùn)算符與關(guān)系表達(dá)式
2.5.5邏輯運(yùn)算符與邏輯表達(dá)式
2.5.6逗號(hào)運(yùn)算符與逗號(hào)表達(dá)式
2.5.7位運(yùn)算符
2.6c++語(yǔ)言的基本控制結(jié)構(gòu)及語(yǔ)句
2.6.1c++語(yǔ)句概述
2.6.2順序結(jié)構(gòu)
2.6.3選擇結(jié)構(gòu)
2.6.4循環(huán)結(jié)構(gòu)
2.6.5輔助控制語(yǔ)句
2.7常見(jiàn)錯(cuò)誤分析
習(xí)題
第3章構(gòu)造數(shù)據(jù)類型
3.1數(shù)組
3.1.1一維數(shù)組
3.1.2二維數(shù)組
3.2指針
3.2.1指針的概念
3.2.2指針的基本操作與運(yùn)算
3.2.3指針與數(shù)組的關(guān)系
3.2.4動(dòng)態(tài)內(nèi)存分配
3.2.5用限定符const修飾指針
3.3引用
3.3.1引用的概念
3.3.2引用與指針的區(qū)別
3.4字符串
3.4.1字符數(shù)組
3.4.2字符指針
3.4.3c++風(fēng)格的字符串處理方法——string類
3.5枚舉類型、結(jié)構(gòu)體與共用體
3.5.1枚舉類型
3.5.2結(jié)構(gòu)體
3.5.3共用體
3.6常見(jiàn)錯(cuò)誤分析
習(xí)題
第4章函數(shù)
4.1函數(shù)的定義和調(diào)用
4.1.1函數(shù)的定義
4.1.2函數(shù)的調(diào)用
4.1.3函數(shù)的聲明
4.2函數(shù)的參數(shù)傳遞
4.2.1形參與實(shí)參
4.2.2參數(shù)的傳遞
4.2.3數(shù)組和指針作為函數(shù)參數(shù)
4.3遞歸函數(shù)
4.3.1函數(shù)的嵌套調(diào)用
4.3.2函數(shù)的遞歸調(diào)用
4.4內(nèi)聯(lián)函數(shù)
4.5形參含有默認(rèn)值
4.6函數(shù)重載
4.6.1函數(shù)重載的定義
4.6.2匹配函數(shù)重載的規(guī)則
4.6.3函數(shù)重載的注意事項(xiàng)
4.7系統(tǒng)函數(shù)
4.8變量的作用域與生存期
4.8.1作用域與可見(jiàn)域
4.8.2局部變量和全局變量
4.8.3變量的生存期與存儲(chǔ)類型
4.9常見(jiàn)錯(cuò)誤與典型示例
4.9.1常見(jiàn)錯(cuò)誤分析
4.9.2典型示例
習(xí)題
第5章類與對(duì)象
5.1面向?qū)ο蟪绦蛟O(shè)計(jì)的基本概念
5.1.1抽象
5.1.2封裝
5.1.3繼承
5.1.4多態(tài)
5.2類與對(duì)象
5.2.1類的定義
5.2.2類成員的訪問(wèn)控制
5.2.3類的成員函數(shù)
5.2.4對(duì)象
5.3構(gòu)造函數(shù)與析構(gòu)函數(shù)
5.3.1構(gòu)造函數(shù)
5.3.2帶默認(rèn)參數(shù)的構(gòu)造函數(shù)
5.3.3復(fù)制構(gòu)造函數(shù)
5.3.4析構(gòu)函數(shù)
5.4對(duì)象數(shù)組和對(duì)象指針
5.4.1對(duì)象數(shù)組
5.4.2對(duì)象指針
5.4.3this指針
5.5靜態(tài)成員
5.5.1靜態(tài)數(shù)據(jù)成員
5.5.2靜態(tài)成員函數(shù)
5.6友元
5.6.1友元函數(shù)
5.6.2友元類
5.7常類型
5.7.1常對(duì)象
5.7.2用const修飾的類成員
5.8常見(jiàn)錯(cuò)誤與典型示例
習(xí)題
第6章繼承與派生
6.1繼承與派生的概念
6.2派生類
6.2.1派生類的定義
6.2.2派生類的成員組成
6.2.3繼承方式
6.3派生類的構(gòu)造函數(shù)和析構(gòu)函數(shù)
6.3.1派生類的構(gòu)造函數(shù)
6.3.2派生類的析構(gòu)函數(shù)
6.4多繼承
6.4.1多繼承的定義
6.4.2多繼承引起的二義性問(wèn)題
6.5虛基類
6.5.1虛基類的概念
6.5.2虛基類及其派生類的構(gòu)造函數(shù)
6.6基類與派生類的賦值兼容
6.7常見(jiàn)錯(cuò)誤與典型示例
習(xí)題
第7章多態(tài)性
7.1多態(tài)性概述
7.2運(yùn)算符重載
7.2.1運(yùn)算符重載為成員函數(shù)
7.2.2運(yùn)算符重載為非成員函數(shù)
7.2.3運(yùn)算符重載的規(guī)則和限制
7.2.4運(yùn)算符重載的應(yīng)用
7.3虛函數(shù)
7.4純虛函數(shù)和抽象類
7.5虛析構(gòu)函數(shù)
7.6常見(jiàn)錯(cuò)誤與典型示例
習(xí)題
第8章輸入輸出流
8.1流的概念
8.2輸入輸出重定向
8.2.14個(gè)標(biāo)準(zhǔn)的輸入輸出流對(duì)象
8.2.2輸入重定向
8.2.3輸出重定向
8.3輸入輸出格式控制
8.4文件操作
8.4.1c++文件概述
8.4.2文件的打開(kāi)與關(guān)閉
8.4.3對(duì)文本文件的操作
8.4.4對(duì)二進(jìn)制文件的操作
8.5常見(jiàn)錯(cuò)誤分析
習(xí)題
第9章模板
9.1函數(shù)模板
9.1.1函數(shù)模板的定義
9.1.2函數(shù)模板的使用
9.2類模板
9.1.1類模板的定義
9.1.2類模板的使用
習(xí)題
能力篇
第10章常用算法與綜合實(shí)例
10.1常用的算法
10.1.1枚舉法
10.1.2遞推法
10.1.3遞歸法
10.1.4遞歸與遞推的比較
10.1.5分治法
10.1.6貪心法
10.1.7模擬法
10.2綜合實(shí)例
10.2.1用面向過(guò)程的方法求三角形種類和面積
10.2.2用面向?qū)ο蟮姆椒ㄇ笕切畏N類和面積
習(xí)題1
實(shí)驗(yàn)篇
實(shí)驗(yàn)1熟悉c++開(kāi)發(fā)環(huán)境和編程步驟
實(shí)驗(yàn)2數(shù)據(jù)類型與表達(dá)式
實(shí)驗(yàn)3條件與開(kāi)關(guān)語(yǔ)句
實(shí)驗(yàn)4循環(huán)語(yǔ)句
實(shí)驗(yàn)5數(shù)組
實(shí)驗(yàn)6指針與字符串
實(shí)驗(yàn)7函數(shù)
實(shí)驗(yàn)8作用域、生存期、多文件結(jié)構(gòu)
實(shí)驗(yàn)9類與對(duì)象
實(shí)驗(yàn)10繼承與派生
實(shí)驗(yàn)11運(yùn)算符重載
實(shí)驗(yàn)12多態(tài)性
實(shí)驗(yàn)13輸入輸出流
實(shí)驗(yàn)14模板
附錄ac++模擬試題
附錄bascii碼字符表
附錄c常用的庫(kù)函數(shù)
參考文獻(xiàn)