本書是教育部高等教育司大學計算機課程改革項目“理工類高校計算思維與大學計算機課程研究與教材建設”的成果之一。本書兼顧程序設計語言和算法的學習,在介紹C++語言的程序設計方法的基礎上,采用C++程序設計語言描述算法。
全書共12章,分為上下篇。上篇講述高級語言程序設計基礎;下篇在介紹算法設計及算法的性能度量后,介紹C++語言描述的典型數(shù)據(jù)結(jié)構(gòu)和經(jīng)典算法的設計與分析技術(shù)。
本書內(nèi)容由淺入深、循序漸進、案例豐富、通俗易懂、實用性強,可作為高等學校理工類計算機及相關(guān)專業(yè)學生的教材,也可供從事程序設計的工程人員參考。
1. 教育部計算思維項目成果。 2.國家級優(yōu)秀教學團隊教學成果。 3. 兼顧程序設計語言和算法的學習。
高飛,女,北京理工大學信息與電子學院,教授,2000年6月至今在北京理工大學信息與電子學院任教師。北京電子學會嵌入式單片機分會委員;航天五院西安分院空間信號處理實驗室學術(shù)委員會委員;2006――2010年教育部高等學校計算機基礎課程指導委員會理工類計算機基礎課程教學指導分委員會委員;教育部高等學校教學指導委員會委員會專家工作組專家;全國高等院校計算機基礎教育研究會理工專業(yè)教學研究會委員。
上篇 高級語言程序設計基礎
第1章 C++語言概述
1.1 C++語言簡介
1.2 C++語言的基本組成
1.2.1 基本字符集
1.2.2 詞法記號
1.2.3 語句
1.2.4 標準函數(shù)庫
1.3 數(shù)據(jù)類型
1.3.1 常量
1.3.2 變量
1.4 C++的運算規(guī)則與表達式
1.4.1 C++語言的運算規(guī)則
1.4.2 算術(shù)運算符與算術(shù)表達式
1.4.3 自增、自減運算 上篇 高級語言程序設計基礎
第1章 C++語言概述
1.1 C++語言簡介
1.2 C++語言的基本組成
1.2.1 基本字符集
1.2.2 詞法記號
1.2.3 語句
1.2.4 標準函數(shù)庫
1.3 數(shù)據(jù)類型
1.3.1 常量
1.3.2 變量
1.4 C++的運算規(guī)則與表達式
1.4.1 C++語言的運算規(guī)則
1.4.2 算術(shù)運算符與算術(shù)表達式
1.4.3 自增、自減運算
1.4.4 賦值運算符和賦值表達式
1.4.5 組合賦值運算符與組合賦值表達式
1.4.6 關(guān)系運算符與關(guān)系表達式
1.4.7 邏輯運算符與邏輯表達式
1.4.8 條件運算符與條件表達式
1.5 C++程序的基本結(jié)構(gòu)、編寫與實現(xiàn)
1.5.1 C++程序的基本結(jié)構(gòu)
1.5.2 C++程序的編寫與實現(xiàn)
小結(jié)
習題1
第2章 函數(shù)
2.1 函數(shù)的聲明和調(diào)用
2.1.1 函數(shù)的聲明
2.1.2 函數(shù)的調(diào)用
2.2 函數(shù)間的參數(shù)傳遞
2.2.1 值傳遞
2.2.2 函數(shù)參數(shù)為指針類型
2.3 帶默認參數(shù)的函數(shù)
2.4 變量的存儲屬性
2.4.1 動態(tài)存儲方式與靜態(tài)存儲方式
2.4.2 局部變量的存儲屬性
2.4.3 全局變量的存儲屬性
小結(jié)
習題2
第3章 數(shù)組、指針和結(jié)構(gòu)
3.1 數(shù)組
3.1.1 一維數(shù)組
3.1.2 多維數(shù)組
3.1.3 字符數(shù)組和字符串
3.2 指針
3.2.1 指針的概念
3.2.2 指針變量定義
3.2.3 指針運算
3.3 指針與數(shù)組
3.3.1 指向數(shù)組的指針
3.3.2 指向字符串的指針
3.3.3 指針數(shù)組和指向指針的指針
3.4 指針與函數(shù)
3.4.1 指向函數(shù)的指針
3.4.2 返回指針值的函數(shù)
3.5 結(jié)構(gòu)類型
3.5.1 結(jié)構(gòu)類型的概念與定義
3.5.2 結(jié)構(gòu)變量的說明
3.5.3 引用結(jié)構(gòu)中的成員
3.5.4 結(jié)構(gòu)的初始化
3.6 結(jié)構(gòu)數(shù)組
3.7 結(jié)構(gòu)指針
3.8 在函數(shù)之間傳遞結(jié)構(gòu)
小結(jié)
習題3
第4章 C++類及其對象的封裝性
4.1 從結(jié)構(gòu)到類
4.1.1 復習結(jié)構(gòu)
4.1.2 從結(jié)構(gòu)提高到類
4.1.3 對象的創(chuàng)建和使用
4.2 類的成員函數(shù)
4.2.1 成員函數(shù)的定義方式
4.2.2 成員函數(shù)的訪問屬性
4.2.3 成員函數(shù)的執(zhí)行效率
4.2.4 成員函數(shù)的存儲方式
4.3 構(gòu)造函數(shù)
4.3.1 對象初始化的要求
4.3.2 構(gòu)造函數(shù)的形式
4.3.3 拷貝構(gòu)造函數(shù)
4.4 析構(gòu)函數(shù)
4.4.1 析構(gòu)函數(shù)的形式
4.4.2 調(diào)用順序
4.5 動態(tài)存儲
4.5.1 內(nèi)存分配與釋放
4.5.2 避免內(nèi)存泄漏
小結(jié)
習題4
第5章 引用、友元和重載
5.1 引用
5.1.1 引用的概念與理解
5.1.2 在函數(shù)通信中大顯身手
5.2 友元
5.2.1 友元的定義
5.2.2 友元函數(shù)
5.2.3 友元成員
5.2.4 友元類
5.3 重載
5.3.1 函數(shù)重載
5.3.2 運算符重載
小結(jié)
習題5
第6章 繼承
6.1 合成與繼承
6.2 單繼承
6.2.1 派生類的聲明和構(gòu)成
6.2.2 派生類成員的訪問
6.2.3 派生類的構(gòu)造函數(shù)和析構(gòu)函數(shù)
6.3 多繼承
6.3.1 聲明多繼承的方法
6.3.2 多繼承派生類的構(gòu)造函數(shù)
6.3.3 多繼承引起的二義性問題
6.3.4 虛基類
小結(jié)
習題6
第7章 多態(tài)
7.1 繼承呼喚多態(tài)
7.2 虛函數(shù)
7.2.1 虛函數(shù)的定義與調(diào)用
7.2.2 虛函數(shù)的特例
7.2.3 避免虛函數(shù)的誤用
7.3 純虛函數(shù)與抽象類
7.3.1 純虛函數(shù)
7.3.2 抽象類
小結(jié)
習題7
第8章 模板
8.1 模板的概念
8.2 函數(shù)模板
8.2.1 函數(shù)模板和模板函數(shù)
8.2.2 函數(shù)模板的使用
8.2.3 重載模板函數(shù)
8.3 類模板
8.3.1 模板和模板類
8.3.2 類模板的派生
小結(jié)
習題8
下篇 算法分析與設計
第9章 算法導引
9.1 算法基礎
9.1.1 算法
9.1.2 作為技術(shù)的算法
9.2 算法的設計和性能度量
9.2.1 函數(shù)的增長
9.2.2 標準記號與常用函數(shù)
小結(jié)
習題9
第10章 基本數(shù)據(jù)結(jié)構(gòu)
10.1 線性表
10.1.1 線性表的邏輯結(jié)構(gòu)
10.1.2 線性表的順序表示和實現(xiàn)
10.1.3 線性表的鏈式表示和實現(xiàn)
10.2 棧和隊列
10.2.1 棧
10.2.2 隊列
10.3 哈希表
10.3.1 哈希表簡介
10.3.2 哈希函數(shù)的構(gòu)造方法
10.3.3 處理沖突的方法
10.3.4 哈希表的查找及其分析
10.4 樹
10.4.1 樹、二叉樹和森林的基本概念
10.4.2 二叉樹的遍歷和樹的遍歷
10.4.3 二叉樹的計數(shù)
小結(jié)
習題10
第11章 經(jīng)典設計和分析技術(shù)
11.1 遞歸與分治法
11.1.1 二分檢索問題
11.1.2 遞歸的概念
11.1.3 分治法的基本思想
11.1.4 分治法的應用
11.2 貪心算法
11.2.1 活動選擇問題
11.2.2 貪心算法的基本思想
11.2.3 貪心算法的應用
11.3 動態(tài)規(guī)劃
11.3.1 鋼條切割問題
11.3.2 動態(tài)規(guī)劃的基本思想
11.3.3 動態(tài)規(guī)劃的應用
11.4 經(jīng)典算法蘊涵的計算思維在其他學科的泛化
習題11
第12章 圖的算法
12.1 圖的基本算法
12.1.1 圖的表示
12.1.2 廣度優(yōu)先搜索
12.1.3 深度優(yōu)先搜索
12.1.4 拓撲排序
12.2 最小生成樹
12.2.1 最小生成樹的形成
12.2.2 Kruskal算法和Prim算法
12.3 單源最短路徑
12.3.1 有向無環(huán)圖的單源最短路徑
12.3.2 Dijkstra算法
12.4 圖算法蘊涵的計算思維在其他學科的泛化
習題12
參考文獻
前言
本書是教育部高等教育司大學計算機課程改革項目“理工類高校計算思維與大學計算機課程研究與教材建設”的成果之一。本書編寫團隊是“計算思維導論”項目的參研者,也是國家級優(yōu)秀教學團隊和北京市優(yōu)秀教學團隊“計算機公共課教學團隊”的主要成員。
在參加由哈爾濱工業(yè)大學戰(zhàn)德臣教授主持的大學計算機課程改革項目“理工類高校計算思維與大學計算機課程研究與教材建設”的研究中,本書編寫團隊逐步對計算思維的精髓和本質(zhì)加深了理解。我們認為,計算機解題的核心是算法設計,算法設計是在良好數(shù)學素養(yǎng)的基礎上,對實際問題進行抽象和形式化,從而使用計算機來解決實際問題,而這恰恰正是培養(yǎng)計算思維的過程。
在計算學科領域,問題求解的核心是算法和系統(tǒng)。算法類問題強調(diào)的是數(shù)學建模及算法設計和分析。而程序設計語言則是實現(xiàn)算法的載體,語言只有滿足算法實現(xiàn)的需求,才能被認識和掌握,算法只有通過程序語言才能實現(xiàn)。因此,本書兼顧了程序設計語言和算法的學習。
本書在介紹C++語言的程序設計方法的基礎上,采用C++語言描述算法。C++語言是一種既支持面向過程程序設計,又支持面向?qū)ο蟪绦蛟O計的混合型語言,它獨特的面向?qū)ο筇卣鳎梢詾槊嫦驅(qū)ο蠹夹g(shù)提供全面支持,是描述算法的一種較為理想的語言。采用面向?qū)ο蟪绦蛟O計語言描述算法,不僅有利于學習算法設計和面向?qū)ο蠹夹g(shù),也為上機實踐提高高級語言程序設計水平提供了方便。
全書共12章,分為上下篇。
上篇為高級語言程序設計基礎,包括第1~8章。第1~3章,介紹C++簡單程序設計,沒有學習過“C語言程序設計”的讀者可通過選學這部分內(nèi)容,掌握C++程序設計基礎。第4~8章系統(tǒng)介紹C++語言的封裝性、繼承性、多態(tài)性,以及模板的概念和使用。
下篇為算法分析與實現(xiàn),包括第9~12章。第9章是算法導論,主要介紹算法的基本概念、算法設計以及算法的性能度量所需要的數(shù)學基礎。第10章主要介紹C++語言描述的典型數(shù)據(jù)結(jié)構(gòu),包括線性表、棧和隊列、樹以及哈希表等基本概念和應用。第11章介紹經(jīng)典算法的設計和分析技術(shù),主要包括遞歸與分治法、貪心算法和動態(tài)規(guī)劃等的基本思想及應用。第12章介紹圖算法,主要包括基本的圖算法、最小生成樹和單源最短路徑等。
本書由高飛設計總體架構(gòu)。第1、2、3章由薛艷明編寫,第4、5、6、7、8章由白霞編寫,第9、10章由高飛編寫,第11、12章由聶青編寫。全書由高飛、薛艷明統(tǒng)稿、定稿。
感謝哈爾濱工業(yè)大學戰(zhàn)德臣教授在計算思維研究中的貢獻,正是他所領導的研究團隊的研究成果給予了我們非同凡響的啟發(fā)和影響,這些智慧的結(jié)晶對本書的編寫具有重要意義的指導作用。感謝“理工類高校計算思維與大學計算機課程研究與教材建設”項目組所有參與學校的老師們對于本書的建議和幫助。感謝北京理工大學“計算機公共課教學團隊”中從事教學工作多年的各位同仁提出的寶貴建議。感謝電子工業(yè)出版社對本書的編寫給予熱情支持。
由于計算機算法和程序設計技術(shù)發(fā)展迅速,作者水平有限,書中的疏漏與不足在所難免,敬請廣大讀者和同仁不吝賜教,撥冗指正。
歡迎讀者對本書提出意見和建議。
……