本書以C++語言為環境,重點講授程序設計的思想和方法,包括過程化的程序設計和面向對象的程序設計。本書非常強調程序設計的風格,將各種情況下的程序風格的要求貫穿于本書的各個章節。
本書的內容可以分為兩大部分:第1章到第9章為第一部分,它們主要對一些基本的程序設計思想、概念、技術、良好的程序設計風格以及過程化程序設計進行介紹,包括數據類型、控制結構、數據封裝、過程封裝以及各種常用的算法;第10章到第16章為第二部分,重點介紹面向對象的思想,包括如何設計及實現一個類、如何利用組合和繼承實現代碼的重用、如何利用多態性使程序更加靈活、如何利用抽象類制定一些工具的規范,最后為了更好地與數據結構課程銜接,介紹了容器和迭代器的概念。
本書可作為各高等院校計算機專業的教材,也可供從事計算機軟件開發的科研人員作為參考資料。
1.本書側重講解解決問題的思路,重視程序設計思想
2.本書以模塊化方式撰寫,教師與讀者可根據自身情況進行選擇性授課或學習
3.本書含有編程規范及常見錯誤提醒,加深學生對編程規范性的理解
4.本書配套資源豐富,提供微課、習題解答、教學安排建議等資源
翁惠玉 翁惠玉,上海交通大學教授,榮獲上海市育才獎、上海交通大學三育人先進個人、最受學生歡迎的老師提名獎、7次獲校優秀教師獎、唐立新教學名師獎、上海交通大學首屆“教書育人”獎等。在教學工作中業績突出,作為主要成員負責國家級本科一流課程《數據結構》的課程建設,參與國家級精品課程《數據結構》、上海市精品課程《計算機網絡》、上海市精品課程《程序設計》、國家教委的資源共享課程《數據結構》、以及上海交大致遠榮譽課程《程序設計》和《數據結構》的建設。國家級教學成果獎一等獎1項,二等獎1項,上海市教學成果獎一等獎 2項。
第 1 章 緒論
1.1 程序設計概述
1.2 計算機組成.
1.2.1 計算機硬件.
1.2.2 計算機軟件.
1.3 程序設計語言
1.3.1 機器語言
1.3.2 匯編語言
1.3.3 高級語言
1.3.4 C++語言
1.4 程序設計過程
1.4.1 算法設計
1.4.2 編碼
1.4.3 編譯和鏈接
1.4.4 調試與維護
1.5 小結
1.6 習題
第 2章 程序的基本組成
2.1 程序的基本結構
2.1.1 注釋
2.1.2 預編譯指令
2.1.3 名字空間
2.1.4 主程序
2.2 常量與變量
2.2.1 變量定義
2.2.2 數據類型
2.2.3 常量與符號常量
2.3 數據的輸入/輸出
2.3.1 數據的輸入
2.3.2 數據的輸出
2.3.3 *輸入異常
2.4 算術運算
2.4.1 算術表達式.
2.4.2 各種類型的數值間的混合運算
2.4.3 強制類型轉換.
2.4.4 數學函數庫
2.5 賦值運算
2.5.1 賦值表達式
2.5.2 賦值的嵌套.
2.5.3 復合賦值運算
2.5.4 自增和自減運算符.
2.6 程序規范及常見錯誤
2.7 小結
2.8 習題
第3 章 分支程序設計
3.1 關系表達式
3.2 邏輯表達式
3.3 if 語句
3.3.1 if 語句的格式
3.3.2 if 語句的嵌套
3.3.3 條件表達式
3.4 switch 語句及其應用
3.5 編程規范及常見錯誤.
3.6 小結
3.7 習題
第4 章 循環程序設計
4.1 計數循環
4.1.1 for 語句
4.1.2 for 語句的進一步討論
4.1.3 for 循環的嵌套
4.1.4 范圍for循環
4.2 break 和continue 語句
4.3 基于哨兵的循環
4.3.1 while 語句
4.3.2 do-while 語句
4.4 循環的中途退出
4.5 *輸入異常檢測
4.5 *枚舉法
4.6 *貪婪法
4.7 編程規范和常見錯誤
4.8 小結
4.9 習題
第5 章 過程封裝——函數
5.1 函數定義
5.1.1 函數的基本結構
5.1.2 return 語句
5.1.3 函數示例.
5.1.4 *尾置返回類型
5.2 函數的使用
5.2.1 函數原型的聲明
5.2.2 函數調用.
5.2.3 將函數與主程序放在一起
5.2.4 函數調用過程
5.3 變量的作用域
5.4 變量的存儲類別
5.4.1 自動變量
5.4.2 靜態變量
5.4.3 寄存器變量
5.4.4 外部變量
5.5 帶默認值的函數
5.6 內聯函數
5.7 *常量表達式函數
5.8 重載函數
5.9 函數模板
5.9.1 函數模板的定義
5.9.2 函數模板的實例化
5.9.3 *函數模板的顯式實例化
5.9.4 *函數模板的特化
5.9.5 *函數模板的重載
5.10 遞歸函數
5.10.1 遞歸函數的基本概念
5.10.2 遞歸函數的應用.
5.11 編程規范及常見錯誤
5.24 小結
5.13 習題
第6 章 批量數據處理——數組
6.1 一維數組
6.1.1 一維數組的定義
6.1.2 一維數組元素的引用
6.1.3 一維數組的內存映像
6.1.4 一維數組的應用.
6.1.5 一維數組作為函數參數
6.2 查找
6.2.1 順序查找.
6.2.2 二分查找
6.3 排序
6.3.1 直接選擇排序法
6.3.2 冒泡排序法
6.4 二維數組
6.4.1 二維數組的定義
6.4.2 二維數組元素的引用
6.4.3 二維數組的內存映像
6.4.4 二維數組的應用
6.4.5 二維數組作為函數參數
6.5 字符串
6.5.1 C風格的字符串
6.5.2 *string類
6.6 *基于遞歸的算法
6.6.1 回溯法
6.6.2 分治法
6.6.3 動態規劃.
6.7 編程規范及常見錯誤
6.8 小結
6.9 習題
第7章 間接訪問——指針
7.1 指針的概念
7.1.1 指針與間接訪問
7.1.2 指針變量的定義
7.1.3 指針的基本操作
7.2 指針運算與數組
7.2.1 指針運算
7.2.2 用指針訪問數組
7.3 動態內存分配
7.3.1 動態變量
7.3.2 動態變量的創建
7.3.3 動態變量的消亡
7.3.4 內存泄漏.
7.3.5 動態變量應用
7.4 字符串再討論
7.5 指針與函數
7.5.1 指針作為形式參數
7.5.2 數組作為函數參數再討論
7.5.3 字符串作為函數的參數
7.5.4 返回指針的函數
7.6 引用類型
7.6.1 引用的定義及應用
7.6.2 引用傳遞
7.6.3 返回引用的函數
7.6.4 右值引用
7.7 指針數組與多級指針
7.7.1 指針數組
7.7.2 *main 函數的參數
7.7.3 *多級指針
7.7.4 *動態二維數組
7.8 *函數指針.
7.8.1 指向函數的指針
7.8.2 函數指針作為函數參數
7.8.3 函數指針用于菜單選擇
7.8.4 *Lambda表達式
7.9 編程規范與常見錯誤
7.10 小結
7.11 習題.
第8 章 數據封裝-- 結構體
8.1 結構體
8.1.1 結構體類型的定義
8.1.2 結構體類型的變量的定義
8.1.3 結構體類型的變量的使用
8.1.4 結構體作為函數的參數
8.2 鏈表
8.2.1 鏈表的概念.
8.2.2 單鏈表的存儲
8.2.3 單鏈表的操作
8.3 編程規范及常見錯誤
8.4 小結
8.5 習題
第9 章 模塊化開發
9.1 結構化程序設計
9.2 自頂向下分解實例:猜硬幣游戲.
9.3 模塊劃分實例:石頭、剪刀、布游戲
9.4 設計自己的庫
9.4.1 隨機函數庫的設計與實現
9.4.2 隨機函數庫的應用:龜兔賽跑模擬
9.5 編程規范及常見錯誤
9.6 小結
9.7 習題
第 10 章 創建新的類型
10.1 面向對象程序設計
10.1.1 抽象的過程.
10.1.2 面向對象程序設計的特點
10.1.3 庫和類
10.2 類的定義
10.3 對象的使用
10.3.1 對象的定義.
10.3.2 對象的操作.
10.3.3 this 指針
10.4 對象的構造與析構
10.4.1 對象的構造
10.4.2 對象的析構
10.5 const與類
10.5.1 常量數據成員
10.5.2 常量對象
10.5.3 常量成員函數
10.6 靜態成員
10.6.1 靜態數據成員
10.6.2 靜態成員函數
10.6.3 靜態常量成員
10.7 友元
10.8 編程規范及常見錯誤
10.9 小結
10.10 習題
第 11 章 運算符重載
11.1 運算符重載的意義
11.2 運算符重載的方法
11.3 幾個特殊運算符的重載
11.3.1 賦值運算符的重載.
11.3.2 下標運算符的重載
11.3.3 函數調用運算符重載
11.3.4 ++和--運算符的重載.
11.3.5 輸入/輸出運算符的重載
11.4 自定義類型轉換函數
11.4.1 內置類型到類類型的轉換
11.4.2 類類型到其他類型的轉換
11.5 運算符重載的應用
11.5.1 完整的Rational類的定義和使用
11.5.2 完整的DoubleArray類的定義和使用
11.6 編程規范與常見錯誤
11.7 小結.
11.8 習題
第 12 章 組合與繼承.
12.1 組合
12.2 繼承
12.2.1 派生類的定義
12.2.2 派生類對象的構造與析構
12.2.3 重定義基類的函數
12.2.4 派生類對象的賦值
12.2.5 派生類作為基類
12.2.6 派生類對象隱式轉換為基類對象
12.3 運行時的多態性
12.3.1 多態性
12.3.2 虛函數
12.3.3 運行時的多態性
12.3.4 虛析構函數
12.4 純虛函數和抽象類
12.4.1 純虛函數
12.4.2 抽象類
12.5 編程規范及常見錯誤
12.6 小結
12.7 習題
第 13 章 泛型機制——模板
13.1 類模板的定義
13.2 類模板的實例化
13.3 非類型參數和參數的默認值
12.4 *類模板的特化
13.5 類模板的友元.
13.5.1 普通友元
13.5.2 函數模板或類模板友元
13.6 類模板的其他用法
13.6.1 類模板作為基類
13.6.2 *類模板作為另一個類模板的成員
13.6.3 *遞歸使用類模板
13.7 編程規范及常見錯誤
13.8 小結.
13.9 習題
第 14 章 輸入/輸出與文件
14.1 流與標準庫
14.2 輸入/輸出緩沖
14.3 基于控制臺的輸入/輸出
14.4 基于文件的輸入/輸出
14.4.1 文件的概念
14.4.2 文件和流
14.4.3 ASCII文件的訪問
14.4.4 二進制文件的訪問
14.4.5 文件的隨機訪問
14.4.6 用流式文件處理含有記錄的文件
14.5 *基于字符串的輸入/輸出
14.6 編程規范及常見錯誤
14.7 小結
14.8 習題
第 15 章 異常處理
15.1 傳統的異常處理方法
15.2 異常處理機制
15.2.1 異常拋出.
15.2.2 異常捕獲
15.3 異常規格說明
15.4 編程規范及常見錯誤
15.5 小結
15.6 習題
第 16章 *容器和迭代器
16.1 容器
16.2 迭代器
16.3 容器和迭代器的設計示例
16.3.1 用數組實現的順序容器.
16.3.2 用鏈表實現的順序容器
16.4 小結.
16.5 習題