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