以C++語(yǔ)言描述過(guò)程化程序設(shè)計(jì),包括緒論、程序設(shè)計(jì)基礎(chǔ)、程序控制結(jié)構(gòu)、數(shù)組、函數(shù)、結(jié)構(gòu)體、指針和鏈表等章節(jié),同時(shí)兼顧C(jī)語(yǔ)言,引入大學(xué)生程序設(shè)計(jì)競(jìng)賽的基礎(chǔ)知識(shí),主要包括OJ在線做題結(jié)構(gòu)、空間換時(shí)間思想、C++標(biāo)準(zhǔn)模板庫(kù)基礎(chǔ)、引用參數(shù)等。以O(shè)J問(wèn)題為核心與載體,結(jié)合C/C++程序設(shè)計(jì)的課程教學(xué)和大學(xué)生程序設(shè)計(jì)競(jìng)賽是本教材的主要特點(diǎn)。本教材適用于作為普通高校本、?朴(jì)算機(jī)類及相關(guān)專業(yè)的C語(yǔ)言程序設(shè)計(jì)、C++過(guò)程化程序設(shè)計(jì)等課程的教材,也可以作為大學(xué)生程序設(shè)計(jì)競(jìng)賽及C/C++程序設(shè)計(jì)與開(kāi)發(fā)的入門(mén)參考書(shū)。
自1996年中國(guó)首次舉辦ACM國(guó)際大學(xué)生程序設(shè)計(jì)競(jìng)賽(ACM International Collegiate Programming Contest,ACMICPC或ICPC,網(wǎng)址https://icpc.baylor.edu)亞洲區(qū)預(yù)選賽以來(lái),國(guó)內(nèi)高校越來(lái)越重視大學(xué)生程序設(shè)計(jì)競(jìng)賽。中國(guó)大學(xué)生程序設(shè)計(jì)競(jìng)賽(China Collegiate Programming Contest,CCPC,網(wǎng)址https://ccpc.io)旨在“激勵(lì)當(dāng)代大學(xué)生運(yùn)用計(jì)算機(jī)編程技術(shù)和技能來(lái)解決實(shí)際問(wèn)題,激發(fā)其學(xué)習(xí)算法和程序設(shè)計(jì)的興趣,培養(yǎng)其團(tuán)隊(duì)合作意識(shí)、創(chuàng)新能力和挑戰(zhàn)精神”。目前,ICPC、CCPC及團(tuán)體程序設(shè)計(jì)天梯賽(Group Programming Ladder Tournament,GPLT,網(wǎng)址https://gplt.patest.cn/)等是國(guó)內(nèi)大學(xué)生主要參加的大規(guī)模賽事。
對(duì)于零基礎(chǔ)學(xué)習(xí)程序設(shè)計(jì)課程且希望在程序設(shè)計(jì)競(jìng)賽方面具有較好基礎(chǔ)的學(xué)生而言,程序設(shè)計(jì)競(jìng)賽與課程教學(xué)相結(jié)合的教材比較難尋。而本書(shū)主要以C++語(yǔ)言描述過(guò)程化程序設(shè)計(jì),同時(shí)兼顧C(jī)語(yǔ)言,著重引入大學(xué)生程序設(shè)計(jì)競(jìng)賽的基礎(chǔ)知識(shí),能滿足這類學(xué)生的需求。本書(shū)重點(diǎn)討論過(guò)程化程序設(shè)計(jì)的基礎(chǔ)知識(shí)、程序控制結(jié)構(gòu)、數(shù)組、函數(shù)、結(jié)構(gòu)體、指針、鏈表等方面的內(nèi)容,希望能為零基礎(chǔ)學(xué)習(xí)C/C++程序設(shè)計(jì)的同學(xué)打下較好的基礎(chǔ)。另外,本書(shū)還引入大學(xué)生程序設(shè)計(jì)競(jìng)賽的基礎(chǔ)知識(shí),主要包括在線做題結(jié)構(gòu)、空間換時(shí)間思想與方法、C++標(biāo)準(zhǔn)模板庫(kù)(Standard Template Library,STL)常用容器、遞推與動(dòng)態(tài)規(guī)劃、深度優(yōu)先搜索與廣度優(yōu)先搜索、查找與排序、貪心法與回溯法、大整數(shù)運(yùn)算及簡(jiǎn)單數(shù)學(xué)問(wèn)題等,希望對(duì)擬參加大學(xué)生程序設(shè)計(jì)競(jìng)賽的同學(xué)有所幫助。
本書(shū)立足于在線測(cè)評(píng)系統(tǒng)(Online Judge,OJ),以O(shè)J上的問(wèn)題為載體和核心,把對(duì)問(wèn)題的分析和求解作為主線,簡(jiǎn)化了語(yǔ)法和理論知識(shí)的講解,注重運(yùn)用知識(shí)求解具體問(wèn)題。本書(shū)以問(wèn)題為導(dǎo)向,適合學(xué)生針對(duì)OJ問(wèn)題進(jìn)行探究式學(xué)習(xí),注重培養(yǎng)學(xué)生的計(jì)算思維及編程求解具體問(wèn)題的能力。
書(shū)中帶“*”的章節(jié),主要是程序設(shè)計(jì)競(jìng)賽相關(guān)的內(nèi)容,可根據(jù)實(shí)際需要,作為學(xué)生自主學(xué)習(xí)的內(nèi)容,或由教師酌情選講。因本書(shū)編程方面的例題與習(xí)題較多,故教師可以酌情選講,學(xué)生也可以酌情選學(xué)。
本書(shū)中的編程例題、習(xí)題主要來(lái)自O(shè)J。書(shū)中大部分例題和編程習(xí)題來(lái)自紹興文理學(xué)院OJ(簡(jiǎn)稱HLOJ,網(wǎng)址http://acm.usx.edu.cn),這離不開(kāi)紹興文理學(xué)院程序設(shè)計(jì)類課程組教師歷年來(lái)的辛勤工作,在此對(duì)他們表示由衷的感謝!書(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上的題目,在此對(duì)出題者及相關(guān)的老師、同學(xué)表示由衷的感謝!為便于讀者在OJ上練習(xí),每章的OJ題解及OJ編程題都標(biāo)注了一個(gè)出處(標(biāo)題、描述等方面可能有所改編)。
在編寫(xiě)本書(shū)的過(guò)程中,作者參閱了國(guó)內(nèi)外一些C/C++程序設(shè)計(jì)語(yǔ)言、數(shù)據(jù)結(jié)構(gòu)與算法方面的著作,從中吸收了新的思想、新的內(nèi)容,書(shū)中部分內(nèi)容和習(xí)題參考了這些著作及其網(wǎng)絡(luò)資源,在這里對(duì)所參考著作的作者及相關(guān)人員表示衷心感謝!
本書(shū)受浙江省首批高等學(xué)校省級(jí)精品在線開(kāi)放課程“高級(jí)語(yǔ)言”、浙江省一流課程“高級(jí)語(yǔ)言”、教育部產(chǎn)學(xué)合作協(xié)同育人項(xiàng)目(項(xiàng)目編號(hào): 201902047018)支持,在此表示衷心感謝!
在編寫(xiě)本書(shū)的過(guò)程中,編者力圖在問(wèn)題驅(qū)動(dòng)、競(jìng)賽引導(dǎo)、能力導(dǎo)向及強(qiáng)化實(shí)踐等方面有所突破、有所創(chuàng)新,然而受限于能力和水平,書(shū)中難免存在疏漏和不足之處,懇請(qǐng)閱讀本書(shū)的讀者批評(píng)指正。
編者
2020年8月
黃龍軍,博士,長(zhǎng)期從事《高級(jí)語(yǔ)言》和《數(shù)據(jù)結(jié)構(gòu)》等課程的教學(xué)工作,發(fā)表一作研究論文十余篇;主持浙江省精品在線開(kāi)放課程《高級(jí)語(yǔ)言》;主持省市級(jí)項(xiàng)目多項(xiàng);參與國(guó)j級(jí)、省市級(jí)項(xiàng)目多項(xiàng);曾獲校示范課教師、校教學(xué)優(yōu)秀獎(jiǎng)等教學(xué)榮譽(yù);曾指導(dǎo)學(xué)生獲ACM國(guó)際大學(xué)生程序設(shè)計(jì)競(jìng)賽亞洲區(qū)域賽銀獎(jiǎng)、中國(guó)大學(xué)生程序設(shè)計(jì)競(jìng)賽(女生專場(chǎng))季軍、藍(lán)橋杯軟件大賽一等獎(jiǎng)等獎(jiǎng)項(xiàng)。
第1章緒論
1.1大學(xué)生程序設(shè)計(jì)競(jìng)賽簡(jiǎn)介
1.2程序設(shè)計(jì)及其語(yǔ)言簡(jiǎn)介
1.2.1程序與程序設(shè)計(jì)
1.2.2程序設(shè)計(jì)語(yǔ)言
1.3簡(jiǎn)單的C/C++程序
1.4DevC++ 開(kāi)發(fā)環(huán)境簡(jiǎn)介
1.5在線做題基本程序結(jié)構(gòu)
1.5.1處理T次
1.5.2處理到文件尾
1.5.3處理到特值結(jié)束
1.6OJ題目求解
習(xí)題
第2章程序設(shè)計(jì)基礎(chǔ)知識(shí)
2.1C/C++標(biāo)識(shí)符
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逗號(hào)運(yùn)算符
2.5.7位運(yùn)算
2.5.8類型轉(zhuǎn)換
2.5.9運(yùn)算符的優(yōu)先級(jí)與結(jié)合性
2.6C語(yǔ)言輸入/輸出
2.6.1字符/字符串?dāng)?shù)據(jù)輸入/輸出
2.6.2格式輸入與輸出
2.7C++語(yǔ)言輸入/輸出
2.8STL之string
2.8.1string基礎(chǔ)
2.8.2使用string
2.9OJ題目求解
習(xí)題
第3章程序控制結(jié)構(gòu)
3.1流程圖及程序控制結(jié)構(gòu)簡(jiǎn)介
3.1.1流程圖
3.1.2程序控制結(jié)構(gòu)簡(jiǎn)介
3.2選擇結(jié)構(gòu)
3.2.1if語(yǔ)句及其使用
3.2.2switch語(yǔ)句及其使用
3.3循環(huán)結(jié)構(gòu)
3.3.1引例與三種循環(huán)語(yǔ)句
3.3.2for語(yǔ)句及其使用
3.3.3while語(yǔ)句及其使用
3.3.4do…while語(yǔ)句及其使用
3.3.5continue、break語(yǔ)句及其使用
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典型遞歸問(wèn)題
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)試簡(jiǎn)介
5.9.2DevC++調(diào)試過(guò)程
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è)計(jì)競(jìng)賽基礎(chǔ)
9.1遞推與動(dòng)態(tài)規(guī)劃
9.2簡(jiǎn)單數(shù)學(xué)問(wèn)題
9.3大整數(shù)運(yùn)算
9.4搜索入門(mén)
9.5常用算法
習(xí)題
參考文獻(xiàn)