以C++語言描述過程化程序設(shè)計,包括緒論、程序設(shè)計基礎(chǔ)、程序控制結(jié)構(gòu)、數(shù)組、函數(shù)、結(jié)構(gòu)體、指針和鏈表等章節(jié),同時兼顧C(jī)語言,引入大學(xué)生程序設(shè)計競賽的基礎(chǔ)知識,主要包括OJ在線做題結(jié)構(gòu)、空間換時間思想、C++標(biāo)準(zhǔn)模板庫基礎(chǔ)、引用參數(shù)等。以O(shè)J問題為核心與載體,結(jié)合C/C++程序設(shè)計的課程教學(xué)和大學(xué)生程序設(shè)計競賽是本教材的主要特點(diǎn)。本教材適用于作為普通高校本、專科計算機(jī)類及相關(guān)專業(yè)的C語言程序設(shè)計、C++過程化程序設(shè)計等課程的教材,也可以作為大學(xué)生程序設(shè)計競賽及C/C++程序設(shè)計與開發(fā)的入門參考書。
自1996年中國首次舉辦ACM國際大學(xué)生程序設(shè)計競賽(ACM International Collegiate Programming Contest,ACMICPC或ICPC,網(wǎng)址https://icpc.baylor.edu)亞洲區(qū)預(yù)選賽以來,國內(nèi)高校越來越重視大學(xué)生程序設(shè)計競賽。中國大學(xué)生程序設(shè)計競賽(China Collegiate Programming Contest,CCPC,網(wǎng)址https://ccpc.io)旨在“激勵當(dāng)代大學(xué)生運(yùn)用計算機(jī)編程技術(shù)和技能來解決實(shí)際問題,激發(fā)其學(xué)習(xí)算法和程序設(shè)計的興趣,培養(yǎng)其團(tuán)隊(duì)合作意識、創(chuàng)新能力和挑戰(zhàn)精神”。目前,ICPC、CCPC及團(tuán)體程序設(shè)計天梯賽(Group Programming Ladder Tournament,GPLT,網(wǎng)址https://gplt.patest.cn/)等是國內(nèi)大學(xué)生主要參加的大規(guī)模賽事。
對于零基礎(chǔ)學(xué)習(xí)程序設(shè)計課程且希望在程序設(shè)計競賽方面具有較好基礎(chǔ)的學(xué)生而言,程序設(shè)計競賽與課程教學(xué)相結(jié)合的教材比較難尋。而本書主要以C++語言描述過程化程序設(shè)計,同時兼顧C(jī)語言,著重引入大學(xué)生程序設(shè)計競賽的基礎(chǔ)知識,能滿足這類學(xué)生的需求。本書重點(diǎn)討論過程化程序設(shè)計的基礎(chǔ)知識、程序控制結(jié)構(gòu)、數(shù)組、函數(shù)、結(jié)構(gòu)體、指針、鏈表等方面的內(nèi)容,希望能為零基礎(chǔ)學(xué)習(xí)C/C++程序設(shè)計的同學(xué)打下較好的基礎(chǔ)。另外,本書還引入大學(xué)生程序設(shè)計競賽的基礎(chǔ)知識,主要包括在線做題結(jié)構(gòu)、空間換時間思想與方法、C++標(biāo)準(zhǔn)模板庫(Standard Template Library,STL)常用容器、遞推與動態(tài)規(guī)劃、深度優(yōu)先搜索與廣度優(yōu)先搜索、查找與排序、貪心法與回溯法、大整數(shù)運(yùn)算及簡單數(shù)學(xué)問題等,希望對擬參加大學(xué)生程序設(shè)計競賽的同學(xué)有所幫助。
本書立足于在線測評系統(tǒng)(Online Judge,OJ),以O(shè)J上的問題為載體和核心,把對問題的分析和求解作為主線,簡化了語法和理論知識的講解,注重運(yùn)用知識求解具體問題。本書以問題為導(dǎo)向,適合學(xué)生針對OJ問題進(jìn)行探究式學(xué)習(xí),注重培養(yǎng)學(xué)生的計算思維及編程求解具體問題的能力。
書中帶“*”的章節(jié),主要是程序設(shè)計競賽相關(guān)的內(nèi)容,可根據(jù)實(shí)際需要,作為學(xué)生自主學(xué)習(xí)的內(nèi)容,或由教師酌情選講。因本書編程方面的例題與習(xí)題較多,故教師可以酌情選講,學(xué)生也可以酌情選學(xué)。
本書中的編程例題、習(xí)題主要來自O(shè)J。書中大部分例題和編程習(xí)題來自紹興文理學(xué)院OJ(簡稱HLOJ,網(wǎng)址http://acm.usx.edu.cn),這離不開紹興文理學(xué)院程序設(shè)計類課程組教師歷年來的辛勤工作,在此對他們表示由衷的感謝!書中部分編程例題和習(xí)題參考改編自浙江大學(xué)OJ(ZOJ,網(wǎng)址https://zoj.pintia.cn/)、杭州電子科技大學(xué)OJ(HDOJ,網(wǎng)址http://acm.hdu.edu.cn)、浙江工業(yè)大學(xué)OJ(ZJUTOJ,網(wǎng)址http://cpp.zjut.edu.cn)等OJ上的題目,在此對出題者及相關(guān)的老師、同學(xué)表示由衷的感謝!為便于讀者在OJ上練習(xí),每章的OJ題解及OJ編程題都標(biāo)注了一個出處(標(biāo)題、描述等方面可能有所改編)。
在編寫本書的過程中,作者參閱了國內(nèi)外一些C/C++程序設(shè)計語言、數(shù)據(jù)結(jié)構(gòu)與算法方面的著作,從中吸收了新的思想、新的內(nèi)容,書中部分內(nèi)容和習(xí)題參考了這些著作及其網(wǎng)絡(luò)資源,在這里對所參考著作的作者及相關(guān)人員表示衷心感謝!
本書受浙江省首批高等學(xué)校省級精品在線開放課程“高級語言”、浙江省一流課程“高級語言”、教育部產(chǎn)學(xué)合作協(xié)同育人項(xiàng)目(項(xiàng)目編號: 201902047018)支持,在此表示衷心感謝!
在編寫本書的過程中,編者力圖在問題驅(qū)動、競賽引導(dǎo)、能力導(dǎo)向及強(qiáng)化實(shí)踐等方面有所突破、有所創(chuàng)新,然而受限于能力和水平,書中難免存在疏漏和不足之處,懇請閱讀本書的讀者批評指正。
編者
2020年8月
黃龍軍,博士,長期從事《高級語言》和《數(shù)據(jù)結(jié)構(gòu)》等課程的教學(xué)工作,發(fā)表一作研究論文十余篇;主持浙江省精品在線開放課程《高級語言》;主持省市級項(xiàng)目多項(xiàng);參與國j級、省市級項(xiàng)目多項(xiàng);曾獲校示范課教師、校教學(xué)優(yōu)秀獎等教學(xué)榮譽(yù);曾指導(dǎo)學(xué)生獲ACM國際大學(xué)生程序設(shè)計競賽亞洲區(qū)域賽銀獎、中國大學(xué)生程序設(shè)計競賽(女生專場)季軍、藍(lán)橋杯軟件大賽一等獎等獎項(xiàng)。
第1章緒論
1.1大學(xué)生程序設(shè)計競賽簡介
1.2程序設(shè)計及其語言簡介
1.2.1程序與程序設(shè)計
1.2.2程序設(shè)計語言
1.3簡單的C/C++程序
1.4DevC++ 開發(fā)環(huán)境簡介
1.5在線做題基本程序結(jié)構(gòu)
1.5.1處理T次
1.5.2處理到文件尾
1.5.3處理到特值結(jié)束
1.6OJ題目求解
習(xí)題
第2章程序設(shè)計基礎(chǔ)知識
2.1C/C++標(biāo)識符
2.2C/C++數(shù)據(jù)類型
2.2.1基本數(shù)據(jù)類型
2.2.2其他數(shù)據(jù)類型
2.3進(jìn)制基礎(chǔ)
2.3.1二進(jìn)制
2.3.2八進(jìn)制與十六進(jìn)制
2.3.3進(jìn)制轉(zhuǎn)換
2.4常量與變量
2.4.1常量
2.4.2變量
2.5運(yùn)算符
2.5.1算術(shù)運(yùn)算符
2.5.2賦值運(yùn)算符
2.5.3自增、自減運(yùn)算符
2.5.4關(guān)系運(yùn)算符與邏輯運(yùn)算符
2.5.5條件運(yùn)算符
2.5.6逗號運(yùn)算符
2.5.7位運(yùn)算
2.5.8類型轉(zhuǎn)換
2.5.9運(yùn)算符的優(yōu)先級與結(jié)合性
2.6C語言輸入/輸出
2.6.1字符/字符串?dāng)?shù)據(jù)輸入/輸出
2.6.2格式輸入與輸出
2.7C++語言輸入/輸出
2.8STL之string
2.8.1string基礎(chǔ)
2.8.2使用string
2.9OJ題目求解
習(xí)題
第3章程序控制結(jié)構(gòu)
3.1流程圖及程序控制結(jié)構(gòu)簡介
3.1.1流程圖
3.1.2程序控制結(jié)構(gòu)簡介
3.2選擇結(jié)構(gòu)
3.2.1if語句及其使用
3.2.2switch語句及其使用
3.3循環(huán)結(jié)構(gòu)
3.3.1引例與三種循環(huán)語句
3.3.2for語句及其使用
3.3.3while語句及其使用
3.3.4do…while語句及其使用
3.3.5continue、break語句及其使用
3.4OJ題目求解
習(xí)題
第4章數(shù)組
4.1引例
4.2一維數(shù)組
4.2.1一維數(shù)組基礎(chǔ)
4.2.2一維數(shù)組的運(yùn)用
4.3二維數(shù)組
4.3.1二維數(shù)組基礎(chǔ)
4.3.2二維數(shù)組的運(yùn)用
4.4*STL之vector
4.4.1STL之一維vector
4.4.2STL之二維vector
4.5字符串與字符數(shù)組
4.5.1字符串常量
4.5.2字符數(shù)組
4.6OJ題目求解
習(xí)題
第5章函數(shù)
5.1引例與概述
5.1.1引例
5.1.2概述
5.2函數(shù)基本用法
5.2.1函數(shù)的定義
5.2.2函數(shù)的聲明
5.2.3函數(shù)的調(diào)用
5.3函數(shù)舉例
5.4數(shù)組作函數(shù)參數(shù)
5.4.1數(shù)組元素作實(shí)參
5.4.2數(shù)組名作函數(shù)參數(shù)
5.5引用
5.6遞歸函數(shù)
5.6.1遞歸基礎(chǔ)
5.6.2典型遞歸問題
5.7變量的作用域與生命期
5.7.1變量的作用域
5.7.2變量的生命期
5.8編譯預(yù)處理
5.8.1宏定義
5.8.2文件包含
5.8.3條件編譯
5.9程序調(diào)試
5.9.1調(diào)試簡介
5.9.2DevC++調(diào)試過程
5.10OJ題目求解
習(xí)題
第6章結(jié)構(gòu)體
6.1引例
6.2結(jié)構(gòu)體基礎(chǔ)
6.2.1結(jié)構(gòu)體類型聲明
6.2.2結(jié)構(gòu)體變量的定義及初始化
6.2.3結(jié)構(gòu)體變量的使用
6.3結(jié)構(gòu)體數(shù)組
6.3.1結(jié)構(gòu)體數(shù)組的定義與初始化
6.3.2結(jié)構(gòu)體數(shù)組應(yīng)用舉例
6.4OJ題目求解
習(xí)題
第7章指針
7.1指針的基本概念
7.1.1變量的地址
7.1.2指針變量
7.1.3指針運(yùn)算
7.2指針與數(shù)組
7.2.1指針與一維數(shù)組
7.2.2指針與二維數(shù)組
7.2.3指針數(shù)組
7.2.4堆內(nèi)存分配
7.3指針與函數(shù)
7.3.1指針參數(shù)
7.3.2指針函數(shù)
7.3.3函數(shù)指針
7.4結(jié)構(gòu)體指針
7.5OJ題目求解
習(xí)題
第8章鏈表
8.1鏈表概述
8.2創(chuàng)建單鏈表
8.2.1順序鏈表
8.2.2逆序鏈表
8.3單鏈表基本操作
8.3.1基本操作的實(shí)現(xiàn)
8.3.2基本操作的應(yīng)用
8.4*STL之list
8.4.1list基礎(chǔ)
8.4.2list的應(yīng)用
8.5OJ題目求解
習(xí)題
第9章*程序設(shè)計競賽基礎(chǔ)
9.1遞推與動態(tài)規(guī)劃
9.2簡單數(shù)學(xué)問題
9.3大整數(shù)運(yùn)算
9.4搜索入門
9.5常用算法
習(xí)題
參考文獻(xiàn)