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