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