本叢書是基于《CCF青少年計算機程序設計評級標準》開發(fā)的一個系列培訓教材。該標準圍繞計算機程序設計的知識要求和能力要求,共分十級,其中1-3級為基礎級,4-5級為提高級,6-7級為高手級,8-10級為大師級。本叢書將評級內(nèi)容進行歸納,計劃1-3級出1本、4-5級出1本,6-7級出1本,8-10級出1本,共4本教材。
適讀人群 :小學、初中、高中計算機程序設計愛好者,大學ACM程序設計競賽選手
noip競賽必備書,經(jīng)典
序
由中國計算機學會(CCF)組編的“CCF中學生計算機程序設計教材”面世了。
早在1984年,鄧小平就提出“計算機的普及要從娃娃抓起”。這很有先見之明,但這里的“計算機普及”是泛指,并未明確普及哪些內(nèi)容。在過去的三十多年中,中小學廣泛開展了計算機普及活動,2000年教育部也曾發(fā)文,要在全國中小學開展信息技術教育。但事實上,現(xiàn)有的所謂“普及”大多成了對計算機工具的認識,而不是對中小學生智力的開發(fā)和思維的訓練,因而效果不佳。CCF早在1984年就創(chuàng)辦了“青少年信息學奧林匹克競賽NOI”,這是面向那些學有余力的中學生的一項計算機科學(CS)教育活動,但具備開展這項活動的學校并不很多,每年參加NOI聯(lián)賽的學生不過七八萬,比例很小,因而普及的面并不大。
計算機科學教育的核心是算法設計和編程,這要求學生面對一個給定的現(xiàn)實問題要能夠找到一個正確和高效的辦法(算法)并將其變成計算機能理解的語言(程序設計語言),進而讓計算機計算出人們需要的結果來。像快遞員最佳路徑算法就是一個典型的現(xiàn)實問題。這個過程并不容易,因為將一個問題抽象并構造一個模型,需要一定的數(shù)學基礎,還得理解計算機的特點,“指揮”計算機干活。這還涉及欲求解問題的“可計算性”,因為并不是任何問題都可以由計算機求解的。計算機也并不知道什么是“問題”,是人告訴計算機,如何按照一步一步的程序求解。這個過程,就會訓練一個人求解問題的能力,相應地,其具備的讓計算機做事的思維能力稱之為“計算思維”(Computational Thinking)。我們平常操作計算機(包括手機這些終端設備)僅僅像開關電燈那樣簡單,并不會使我們具備計算思維能力,而只有通過上述步驟才能訓練這樣的能力。隨著計算機和網(wǎng)絡的發(fā)展,未來越來越多的工作將和計算(機)有關(據(jù)美國政府的統(tǒng)計是51%以上)。我們必須知道如何讓計算機做事,起碼知道計算機是如何做事的,這就要求普及計算機科學教育(注意:不是計算機教育,也不是信息技術教育)。
美國政府已經(jīng)把在中小學普及計算機科學當成一種國策(CS for All,每一個人學習計算機科學),并投入40億美元落實這一項目。奧巴馬總統(tǒng)說“在新經(jīng)濟形態(tài)中,計算機科學已不再是可選技能,而是同閱讀、寫作和算術一樣的基礎技能……因此,我制定了一項計劃,以確保所有孩子都有機會學習計算機科學。”美國政府已明確把計算機教育列入(從幼兒園到12年級)教育體系K12中。英國從2014年起,對中小學的計算機課程進行重大改革,5歲的兒童就開始學寫程序。英國教育部啟動了“計算機在學校”(Computing at School,CAS)項目。新西蘭等國也把計算機編程課當作中學的必修課,并為此投入資金培訓教師。未來的競爭不是資源的競爭,而是人才的競爭,如果不具有計算素養(yǎng)和技能,則在未來的社會中處于被動地位。
CCF作為一個負責任的學術社會組織,應該勇于承擔起CS普及的任務,這比NOI更加艱巨,更難。不過有NOI三十多年發(fā)展的基礎,會對未來CS的普及提供有益的經(jīng)驗。
普及計算機科學教育的難點在于師資,而培訓師資需要合適的教材。CCF組織富有程序設計教學經(jīng)驗的中學老師編寫了“CCF中學生計算機程序設計教材”,分為入門篇、基礎篇、提高篇和專業(yè)篇,只要有一定數(shù)學基礎的老師,均可從入門篇修起。學習編程并不像人們想象的那么困難,只要從現(xiàn)實中遇到的(簡單)問題出發(fā),循序漸進,通過和計算機的互動,一旦入門就好辦了,以后就可以逐步深入下去。
感謝朱全民、陳穎、徐先友、江濤、邱桂香、宋新波、汪星明、屈運華、廖曉剛等老師的貢獻,他們花了兩年時間寫成了這套教材。感謝吳文虎教授、王宏博士審閱本書,在此向他們表示感謝。
杜子德
中國計算機學會秘書長
2016 年8 月29 日
查看全部↓
江 濤:全國先進工作者、中學特級教師、全國信息學奧林匹克高級指導教師、佛山市南海區(qū)十佳教師
宋新波:全國青少年信息學奧賽金牌指導教師、廣東省青少年信息學競賽優(yōu)秀輔導員、中山市十大杰出青年,榮獲中山市學科競賽突出貢獻獎
朱全民:全國師德先進個人、雅禮中學特級教師、國際金牌指導教師、NOI十大杰出指導教師
第1章�6�9模塊化編程—函數(shù)
1.1 自定義函數(shù)的引入................................................... 1
1.2 函數(shù)的定義............................................................. 3
1.3 函數(shù)調(diào)用與參數(shù)傳遞................................................ 5
1.4 變量的作用域.......................................................... 9
1.5 函數(shù)的應用........................................................... 11
1.6 遞歸函數(shù).............................................................. 20
第2章�6�9字符串處理—string類型
2.1 string類型的引入................................................... 33
2.2 string類型的基本操作............................................. 36
2.3 string類型中字母與數(shù)字的關系................................ 41
2.4 string類型的應用................................................... 48
本章小結...................................................................... 52
第3章�6�9數(shù)據(jù)類型的組合—結構和聯(lián)合
3.1 結構體(struct)的引入............................................. 61
3.2 結構體(struct)的使用............................................. 66
*3.3 結構體(struct)的擴展............................................. 72
*3.4 聯(lián)合(union)的定義和使用........................................ 76
*3.5 枚舉(enum)的定義和使用........................................ 79
本章小結...................................................................... 81
第4章�6�9功能強大的利器—指針
4.1 指針概念、定義與內(nèi)存分配..................................... 85
4.2 指針的引用與運算.................................................. 87
4.3 指針與數(shù)組........................................................... 90
4.4 指針與字符串........................................................ 95
*4.5 函數(shù)指針和函數(shù)指針數(shù)組........................................ 97
4.6 指針的擴展......................................................... 100
本章小結.................................................................... 104
第5章�6�9數(shù)據(jù)外部存儲—文件
5.1 數(shù)據(jù)存儲的分類................................................... 109
5.2 文件類型變量的定義及引用................................... 110
5.3 文件的重定向...................................................... 116
本章小結.................................................................... 118
第6章�6�9數(shù)據(jù)結構及其運用
6.1 什么是數(shù)據(jù)結構................................................... 125
6.2 線性表的儲存結構及其應用................................... 126
6.3 隊列及其應用...................................................... 138
6.4 棧及其運用......................................................... 145
6.5 二分及其快速排序................................................ 151
第7章�6�9簡單算法
7.1 什么是算法......................................................... 169
7.2 高精度數(shù)值處理................................................... 171
7.3 簡單枚舉算法...................................................... 178
7.4 模擬算法............................................................. 184
7.5 簡單動態(tài)規(guī)劃...................................................... 187
7.6 用遞歸實現(xiàn)回溯算法............................................. 199
第8章�6�9數(shù)學在程序設計中的應用
8.1 常用數(shù)學函數(shù)...................................................... 207
8.2 質(zhì)因數(shù)的分解...................................................... 209
8.3 最大公約數(shù)的歐幾里德算法................................... 212
8.4 加法原理與乘法原理............................................. 216
8.5 排列與組合......................................................... 219
8.6 圓排列、可重集排列............................................. 222
第9章�6�9STL(標準模板庫)簡要說明
9.1 STL中的一些新概念.............................................. 227
9.2 幾個常見的容器介紹............................................. 232
9.3 幾個常見的算法函數(shù)............................................. 240
索引 245
查看全部↓