《C++程序設計實用教程》利用C++語言介紹程序設計的基本知識,著重介紹C++語言的基本概念、算法與程序設計基礎、順序結構、選擇結構、循環結構、數組、函數、指針、結構體和共用體和文件等內容。程序設計采用Visual C++作為編譯環境,強調案例式教學,著重于基礎知識的講解,特別是編程思維的引導和練習,有利于讀者掌握程序設計的基本方法和編程技巧。本書中的所有程序都按照結構化程序設計方法采用縮進格式編寫,并且每章配有各種類型的習題(答案見附錄D)和配套的實驗內容,以便于讀者鞏固所學的知識。
《C++程序設計實用教程》力求概念敘述準確、嚴謹,語言通俗、易懂。本書適合作為高等院校理工科計算機專業和相關專業的程序設計課程的教材,也可供廣大科技工作者和研究人員參考。
隨著我國高等教育規模的擴大以及產業結構調整的進一步完善,社會對高層次應用型人才的需求將更加迫切。各地高校緊密結合地方經濟建設發展需要,科學運用市場調節機制,合理調整和配置教育資源,在改革和改造傳統學科專業的基礎上,加強工程型和應用型學科專業建設,積極設置主要面向地方支柱產業、高新技術產業、服務業的工程型和應用型學科專業,積極為地方經濟建設輸送各類應用型人才。各高校加大了使用信息科學等現代科學技術提升、改造傳統學科專業的力度,從而實現傳統學科專業向工程型和應用型學科專業的發展與轉變。在發揮傳統學科專業師資力量強、辦學經驗豐富、教學資源充裕等優勢的同時,不斷更新教學內容、改革課程體系,使工程型和應用型學科專業教育與經濟建設相適應。計算機課程教學在從傳統學科向工程型和應用型學科轉變中起著至關重要的作用,工程型和應用型學科專業中的計算機課程設置、內容體系和教學手段及方法等也具有不同于傳統學科的鮮明特點。
為了配合高校工程型和應用型學科專業的建設和發展,急需出版一批內容新、體系新、方法新、手段新的高水平計算機課程教材。目前,工程型和應用型學科專業計算機課程教材的建設工作仍滯后于教學改革的實踐,如現有的計算機教材中有不少內容陳舊(依然用傳統專業計算機教材代替工程型和應用型學科專業教材),重理論、輕實踐,不能滿足新的教學計劃、課程設置的需要; 一些課程的教材可供選擇的品種太少; 一些基礎課的教材雖然品種較多,但低水平重復嚴重; 有些教材內容龐雜,書越編越厚; 專業課教材、教學輔助教材及教學參考書短缺,等等,都不利于學生能力的提高和素質的培養。為此,在教育部相關教學指導委員會專家的指導和建議下,清華大學出版社組織出版本系列教材,以滿足工程型和應用型學科專業計算機課程教學的需要。本系列教材在規劃過程中體現了如下一些基本原則和特點。
(1) 面向工程型與應用型學科專業,強調計算機在各專業中的應用。教材內容堅持基本理論適度,反映基本理論和原理的綜合應用,強調實踐和應用環節。
(2) 反映教學需要,促進教學發展。教材規劃以新的工程型和應用型專業目錄為依據。教材要適應多樣化的教學需要,正確把握教學內容和課程體系的改革方向,在選擇教材內容和編寫體系時注意體現素質教育、創新能力與實踐能力的培養,為學生知識、能力、素質協調發展創造條件。
(3) 實施精品戰略,突出重點,保證質量。規劃教材建設仍然把重點放在公共基礎課和專業基礎課的教材建設上; 特別注意選擇并安排一部分原來基礎比較好的優秀教材或講義修訂再版,逐步形成精品教材; 提倡并鼓勵編寫體現工程型和應用型專業教學內容和課程體系改革成果的教材。
(4) 主張一綱多本,合理配套。基礎課和專業基礎課教材要配套,同一門課程可以有多本具有不同內容特點的教材。處理好教材統一性與多樣化,基本教材與輔助教材,教學參考書,文字教材與軟件教材的關系,實現教材系列資源配套。
(5) 依靠專家,擇優選用。在制訂教材規劃時要依靠各課程專家在調查研究本課程教材建設現狀的基礎上提出規劃選題。在落實主編人選時,要引入競爭機制,通過申報、評審確定主編。書稿完成后要認真實行審稿程序,確保出書質量。
繁榮教材出版事業,提高教材質量的關鍵是教師。建立一支高水平的以老帶新的教材編寫隊伍才能保證教材的編寫質量和建設力度,希望有志于教材建設的教師能夠加入到我們的編寫隊伍中來。
21世紀高等學校計算機教育實用規劃教材編委會
聯系人: 魏江江 weijj@tup.tsinghua.edu.cn
前言
C++語言是目前被廣泛采用的程序設計語言,它語法簡潔、運行高效。C++語言既可以用來進行面向過程的程序設計,又可以用來進行面向對象的程序設計。本書利用C++語言講解面向過程的程序設計,內容包括基本數據類型、基本控制結構、函數、數組、結構體、指針和鏈表等。本書適合學習程序設計語言的初學者,能夠讓讀者順利地從面向過程程序設計過渡到面向對象程序設計。本書適合大學本科理工類各專業學生學習C++程序設計語言,同時也適合自學C++語言的讀者使用。
本書的編者長期從事C/C++語言程序設計課程的教學工作,本書是在他們多年的教學講稿的基礎上整理而成。本書通過大量的經典例題系統地介紹了C++語言的語法結構和結構化編程的方法。全書共分11章,第1章C++程序設計概述,主要介紹程序設計語言的發展歷史、 算法概述、算法的定義和特征、算法的表示、上機指導; 第2章C++的基礎知識,主要介紹數據類型、常量、變量、C++的運算符、表達式和C++的基本輸入/輸出; 第3章順序結構程序設計,主要介紹C++語句概述、賦值語句、順序結構程序設計舉例; 第4章選擇結構程序設計,主要介紹關系運算符和邏輯運算符、if語句、if語句的嵌套、switch語句和條件運算符; 第5章循環結構程序設計,主要介紹基本的循環語句、循環語句的嵌套、break語句和continue語句; 第6章數組,主要介紹數組的含義、一維數組的定義與引用、二維數組的定義與引用、字符數組與字符串; 第7章函數,主要介紹函數的定義與調用、函數的嵌套調用和遞歸調用、函數的重載、數組與函數、變量的存儲類型與作用域; 第8章編譯預處理,主要介紹宏的定義、文件包含預處理和條件編譯; 第9章結構體和共用體,主要介紹結構體類型、共用體類型、枚舉類型和typedef聲明類型; 第10章指針,主要介紹指針的概念、指針變量、指針與數組、指針與字符串、指針與函數、存儲空間的動態分配和釋放、引用、指針與結構體、鏈表; 第11章文件,主要介紹文件的概念、文件流、文件的打開與關閉、文件的讀/寫、輸入和輸出出錯處理。本書每一章中都配有相應的上機操作內容。
本書文字精練、例題豐富,易于學生理解。本書中配有各種類型的練習(參考答案見附錄D),以便于學生學習和鞏固所學知識。此外,本書將教學內容和實驗結合到一起,使得本書具有實用性。本書的目標是力求初學者能夠順利地邁進程序設計的大門,成為一個程序設計愛好者。
本書所有的程序實例都在Visual C++6.0中調試過,讀者也可自由選用其他符合ANSI標準的C++系統編程環境作為學習工具。
本書由金世雙、曾衛明擔任主編,徐明、張琳、徐琪擔任副主編。全書由金世雙組織、確定框架結構,并統編,本書中的所有章節內容都是大家在教研活動中討論定稿的。本書在編寫過程中得到了兄弟高校從事高級語言程序設計的老師的關心和幫助,也得到了清華大學出版社和同行專家、學者和我們的學生的大力支持和幫助,在此一并表示衷心的感謝。此外,本書的編寫參考了大量的書籍和報刊,并從互聯網上參考了部分有價值的材料,在此向有關的作者、編者、譯者和網站表示衷心的感謝。
本書配有電子教案,并提供程序源代碼,以方便讀者自學,請大家到清華大學出版社網站(http://www.tup.tsinghua.edu.cn)下載。
由于編者水平有限,書中難免有不妥之處,敬請讀者和專家批評、指正。
金世雙
2014年8月
第1章C++程序設計概述
1.1程序設計語言的發展歷史
1.2算法概述
1.2.1算法的定義和特征
1.2.2算法的表示
1.3上機指導
1.3.1上機的準備工作
1.3.2Visual C++6.0的使用方法
習題1
實驗1Visual C++6.0開發環境和程序的基本結構實驗
第2章C++的基礎知識
2.1C++基礎知識概述
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.5C++的運算符
2.6算術表達式
2.6.1運算符的優先級和結合性
2.6.2數據類型的轉換
2.6.3自增和自減運算表達式
2.7賦值表達式
2.7.1賦值過程中的類型轉換
2.7.2復合賦值運算符
2.8逗號表達式
2.9位運算表達式
2.10C++的基本輸入/輸出
2.10.1輸入流/輸出流的基本操作
2.10.2輸入流/輸出流的控制符
習題2
實驗2數據類型、運算符和表達式實驗
第3章順序結構程序設計
3.1C++語句概述
3.2賦值語句
3.3順序結構程序設計舉例
3.4順序結構的應用
習題3
實驗3順序結構程序設計實驗
第4章選擇結構程序設計
4.1選擇結構程序設計概述
4.2關系運算符和邏輯運算符
4.2.1關系運算符
4.2.2邏輯運算符
4.3if語句
4.3.1簡單if語句
4.3.2if…else語句
4.3.3if語句的嵌套
4.4switch語句
4.5條件運算符
4.6選擇結構的應用
習題4
實驗4選擇結構程序設計實驗
第5章循環結構程序設計
5.1循環結構程序設計概述
5.2基本的循環語句
5.2.1for循環語句
5.2.2while循環語句
5.2.3do…while循環語句
5.3循環語句的嵌套
5.4break語句和continue語句
5.5循環語句程序舉例
5.6循環語句在圖形上的應用
習題5
實驗5循環結構程序設計實驗
第6章數組
6.1數組概述
6.1.1一維數組的定義與引用
6.1.2二維數組的定義與引用
6.2字符數組與字符串
6.2.1字符數組的定義與引用
6.2.2字符串
6.2.3字符數組處理函數
6.3數組在矩陣中的應用
習題6
實驗6數組實驗
第7章函數
7.1函數的定義與調用
7.1.1函數的定義
7.1.2函數的調用
7.2函數的嵌套調用和遞歸調用
7.2.1函數的嵌套調用
7.2.2函數的遞歸調用
7.3函數的重載
7.4數組與函數
7.4.1數組元素作為函數參數
7.4.2數組名作為函數參數
7.5變量的存儲類型與作用域
7.5.1變量的存儲類型
7.5.2變量的作用域
習題7
實驗7函數實驗
第8章編譯預處理
8.1編譯預處理概述
8.2宏的定義
8.2.1不帶參數的宏定義
8.2.2帶參數的宏定義
8.3文件包含預處理
8.4條件編譯
習題8
實驗8編譯預處理實驗
第9章結構體和共用體
9.1結構體類型
9.1.1結構體類型的定義與初始化
9.1.2結構體變量的引用
9.1.3結構體數組
9.1.4結構體變量與函數
9.2共用體類型
9.2.1共用體類型的定義
9.2.2共用體變量的引用
9.3枚舉類型和typedef聲明類型
習題9
實驗9結構體和共用體實驗
第10章指針
10.1指針的概念
10.2指針變量
10.2.1指針變量的定義
10.2.2指針變量的引用
10.2.3指針變量作為函數參數
10.3指針與數組
10.3.1指針與一維數組
10.3.2一維數組名作為函數參數
10.3.3指針與二維數組
10.3.4指針數組
10.4指針與字符串
10.4.1字符指針
10.4.2字符指針作為函數參數
10.4.3字符指針數組和指向指針的指針
10.5指針與函數
10.5.1函數指針
10.5.2指針函數
10.6存儲空間的動態分配和釋放
10.6.1new和delete運算符
10.6.2void *指針
10.7引用
10.7.1引用類型概述
10.7.2引用變量作為函數參數
10.7.3返回引用的函數
10.8指針與結構體
10.8.1結構體指針
10.8.2結構體指針作為函數參數
10.9鏈表
10.9.1鏈表的概念
10.9.2鏈表的基本操作
10.9.3鏈表的應用
習題10
實驗10指針實驗
第11章文件
11.1文件的概念
11.2文件流
11.3文件的打開與關閉
11.3.1定義文件流對象
11.3.2打開磁盤文件
11.3.3關閉磁盤文件
11.4文件的讀/寫
11.4.1順序處理文件操作
11.4.2隨機處理文件操作
11.5輸入和輸出出錯處理
11.6文件的應用
習題11
實驗11文件實驗
附錄A基本ASCII碼字符表
附錄B擴展ASCII碼字符表
附錄C運算符與結合性
附錄D習題答案