一本難度適當(dāng)、易學(xué)易教的教材是開展小學(xué)信息學(xué)教學(xué)的重要一環(huán)。本書選取 80多個(gè)貼近小學(xué)生學(xué)習(xí)生活的例子,結(jié)合小學(xué)生的認(rèn)知規(guī)律,激發(fā)孩子興趣,以程序?yàn)橹行,適當(dāng)?shù)厝趸Z法。本書利用流程圖厘清思路,并提供多種算法實(shí)現(xiàn)舉一反三,讓小學(xué)生在學(xué)習(xí) C+ +語言編程的過程中,學(xué)會運(yùn)用計(jì)算思維解決問題。本書循序漸進(jìn)、層層鋪墊地依次呈現(xiàn)各個(gè)知識點(diǎn),深入淺出,讓學(xué)生在探索中體會到編程的樂趣和魅力。 本書適合小學(xué)四年級及以上學(xué)生閱讀使用,可作為全國青少年信息學(xué)奧林匹克普及組競賽教材,也可作為信息教師學(xué)習(xí) C+ +語言的入門教材。
《小學(xué)生C++趣味編程》以單元和課的形式編排、符合小學(xué)生認(rèn)知特點(diǎn)的編程入門書,知識點(diǎn)依次呈現(xiàn),深入淺出,循序漸進(jìn)。課課有習(xí)題,課課有課件,易學(xué)易會。以知識點(diǎn)為中心,《小學(xué)生C++趣味編程》適當(dāng)?shù)厝趸Z法,注重算法。利用流程圖厘清思路,激發(fā)學(xué)習(xí)興趣,培養(yǎng)計(jì)算思維。
前言
比爾·蓋茨說:“學(xué)習(xí)編程可以鍛煉你的思維,幫助你更好地思考,創(chuàng)建一種我認(rèn)為在各領(lǐng)域都非常好用的思維方式。”麻省理工學(xué)院的切爾·雷斯尼克說:“當(dāng)你學(xué)會編程,你會開始思考世界上的一切過程!
未來的世界一定是智能化、自動化的世界,與大數(shù)據(jù)、人工智能等技術(shù)相關(guān),而這一切的基礎(chǔ)是程序。學(xué)會編程,有利于在信息化的今天更高效地利用計(jì)算機(jī);學(xué)會編程,能更好地讀懂世界、適應(yīng)世界、創(chuàng)造未來世界。
小學(xué)生學(xué)習(xí)編程并不是為了將來成為程序員,而是在學(xué)習(xí)中開發(fā)智力、培養(yǎng)創(chuàng)造力,學(xué)會運(yùn)用計(jì)算思維解決問題。學(xué)會編程就擁有了一筆巨大的“財(cái)富”。
正因?yàn)榫幊倘绱酥匾,?984年起,中國計(jì)算機(jī)學(xué)會每年都舉行“青少年信息學(xué)奧林匹克競賽(NOI)”,希望通過比賽促進(jìn)學(xué)校、社會開展程序教學(xué)。然而,現(xiàn)有的青少年信息學(xué)培訓(xùn)教材大部分是仿照大學(xué)教材來編寫,相關(guān)知識常常集中、系統(tǒng)地出現(xiàn),像用戶說明書一樣面面俱到,所舉的例子經(jīng)常涉及初中、高中的知識,這樣的教材非常適合有一定基礎(chǔ)的中學(xué)生,但對初學(xué)的小學(xué)生來說,較難理解,學(xué)習(xí)也就變得枯燥無味、索然無趣。于是就萌發(fā)了編寫本書的念頭。一本符合小學(xué)生心理、適合小學(xué)生學(xué)習(xí)的書,既能方便一線教師輕松地開設(shè)拓展課程,開展社團(tuán)、競賽等活動,又能讓廣大小學(xué)生輕松、有趣地學(xué)習(xí)。
在編寫本書時(shí),筆者進(jìn)行了如下幾點(diǎn)思考。
(1)方向比努力更重要。以程序?yàn)橹行,循序漸進(jìn),層層鋪墊,采用課
和單元的形式編排課程,符合兒童的認(rèn)知規(guī)律,為學(xué)生的學(xué)習(xí)、教師的教學(xué)指引正確的方向。
。2)
興趣比獎(jiǎng)次更重要。本書選取的例子貼近生活,符合兒童的身心特點(diǎn),易引起小學(xué)生的共鳴,激發(fā)他們的學(xué)習(xí)興趣,讓學(xué)生感覺到學(xué)習(xí)C++是一件很有趣的事情。
。3)
信心比知識更重要。本書選取最常用的語句、算法,舍棄超越小學(xué)生能力范圍的內(nèi)容,不盲目拔高,重在讓普通的學(xué)生在有限的時(shí)間內(nèi)輕松地看懂、學(xué)會,體驗(yàn)到成功的喜悅。
(4)
算法比語言更重要。算法決定程序,是程序設(shè)計(jì)的核心,語言只是載體。只有理解算法,才能掌握解決問題的方法,才能建立計(jì)算思維,為今后的學(xué)習(xí)打下堅(jiān)實(shí)的基礎(chǔ)。本書注重算法,利用流程圖讓學(xué)生輕松理解解題思路,舉一反三,課后的習(xí)題利于學(xué)生鞏固升華,也便于教師教學(xué)。
感謝浙江省功勛教師、省特級教師董閨聰老師,從1996年就開始幫助我、支持我開展程序教學(xué);感謝省特級教師俞正強(qiáng)老師,是他的“種子教師”培養(yǎng)方案,促使我開始編寫本書;感謝省特級教師王偉文老師,正是他的幫助和大力支持,本書才能正式出版。
感謝浙江師范大學(xué)陳炳木和熊繼平、金華職業(yè)技術(shù)學(xué)院劉日仙、金華市教研室吳躍勝、婺城區(qū)教研室錢柳松、金華九中鄭理新和方金浩、金華五中陳洪祺、金華一中胡建峰等老師,為本書提出了許多真誠而有益的建議;感謝我的學(xué)生給我創(chuàng)作的靈感;感謝我的女兒潘雨萱小朋友,讓我進(jìn)一步反思教學(xué)中存在的問題,她還為本書配上有趣的插圖。本書也獻(xiàn)給我可愛的女兒。
本書以適合小學(xué)生學(xué)習(xí)為出發(fā)點(diǎn),結(jié)合本人20余年的教學(xué)經(jīng)驗(yàn),歷時(shí)4年多編寫完成。編寫本書的過程,是一次自我學(xué)習(xí)、自我成長和自我反思的過程。但是因時(shí)間和水平有限,書中難免存在不妥或錯(cuò)誤之處,歡迎批評指正,可發(fā)送電子郵件,更希望讀者對本書提出建設(shè)性意見,以便修訂再版時(shí)改進(jìn)。
潘洪波
2017年6月
下 冊
第 40課 兒歌《打老虎》—while語句 166
第 41課 蝸牛與葡萄樹—死循環(huán) 169
第 42課 最小公倍數(shù)—枚舉算法 172
第 43課 最大公約數(shù)—輾轉(zhuǎn)相除 175
第 44課 角谷猜想—while語句的應(yīng)用 178
第 45課 蝴蝶效應(yīng)—雙精度實(shí)數(shù) double及科學(xué)計(jì)數(shù)法 181
第 46課 精益求精—分?jǐn)?shù)化為小數(shù) 185
第 47課 稱心如意的輸入—do-while語句 189
第 48課 加加樂—各數(shù)位之和 192
第 49課 大大大—純小數(shù)變整數(shù) 195
第 50課 書香閣的座位數(shù)—數(shù)學(xué)計(jì)算 198
第 51課 拍手游戲—模擬法 201
第 52課 報(bào)數(shù)游戲—模擬法 204
第 53課 化功大法—純小數(shù)轉(zhuǎn)化為最簡分?jǐn)?shù) 208
拓展閱讀:計(jì)算機(jī)系統(tǒng) 211
第 5單元 多重循環(huán) 213
第 54課 有規(guī)律的圖形—循環(huán)的嵌套 214
第 55課 圖形的竅門—雙重循環(huán)的應(yīng)用 219
第 56課 九九乘法表—雙重循環(huán)的應(yīng)用 223
第 57課 雞兔同籠—雙重循環(huán)的應(yīng)用 226
第 58課 百錢買百雞—三重循環(huán)與程序的優(yōu)化 229
第 59課 比特童幣—四重循環(huán) 233
第 60課 比特超市—超市收費(fèi)程序 237
拓展閱讀:因特網(wǎng) 241
第 6單元 數(shù)組 243
第 61課查分程序—數(shù)組 244
第 62課 捉迷藏—數(shù)組越界 248
第 63課老鷹捉小雞—循環(huán)移位 252
第 64課跳繩比賽—排序 256
第 65課采訪報(bào)道—字符數(shù)組的輸入與輸出 261
第 66課愷撒加密術(shù)—字符串的輸入與輸出 265
第 67課快速求素?cái)?shù)—篩選法 269
第 68課誰大誰小—邏輯判斷與推理 273
第 69課胡蘿卜與骨頭—模擬法 276
第 70課讀心術(shù)—二進(jìn)制數(shù)的應(yīng)用 280
拓展閱讀:數(shù)據(jù)結(jié)構(gòu) 286
第 7單元 函數(shù) 287
第 71課一見如故—函數(shù) 288
第 72課函數(shù)與最大值—局部變量與全局變量 293
第 73課丑數(shù)—函數(shù)的應(yīng)用 297
第 74課哥德巴赫猜想—函數(shù)的應(yīng)用 300
第 75課第 n個(gè)大的數(shù)—數(shù)組名作為實(shí)參 304
第 76課猜猜樂—二分法查找 308
第 77課交作業(yè)啦—遞歸算法 312
第 78課通力合作的 100個(gè)數(shù)—遞歸算法及子函數(shù)的聲明 316
第 79課誰是老大—遞歸求最大值 319
拓展閱讀:世界上第一個(gè)微處理器 322
第 8單元 指針、類 323
第 80課今雨新知—地址與指針 324
第 81課民主選舉—指針與數(shù)組 327
第 82課編程是一門藝術(shù)—類與對象 331
拓展閱讀:求伯君 335
參考答案(下冊) 337
參考文獻(xiàn) 340
附錄A 字符集 341
附錄B 獎(jiǎng)勵(lì)積分卡 —比特童幣 342
第3單元
格萊爾是勤奮的孩子,她每天都會練半小時(shí)的鋼琴,也就是說,1月 1日練半小時(shí)的鋼琴,1月 2日練半小時(shí)的鋼琴,1月 3日練半小時(shí)的鋼琴,……,12月 31日練半小時(shí)的鋼琴。
每天都重復(fù)做一件事需要毅力,格萊爾真是一個(gè)了不起的孩子!
尼克和格萊爾玩“老狼老狼幾點(diǎn)鐘”的游戲。老狼老狼幾點(diǎn)鐘? 1點(diǎn)鐘。老狼老狼幾點(diǎn)鐘? 2點(diǎn)鐘。老狼老狼幾點(diǎn)鐘? 3點(diǎn)鐘。老狼老狼幾點(diǎn)鐘? 4點(diǎn)鐘。 ……老狼老狼幾點(diǎn)鐘? 11點(diǎn)鐘。老狼老狼幾點(diǎn)鐘? 12點(diǎn)鐘。
狼來了,快跑!
試編一程序,輸出上面的文字。
#include
using namespace std;
int main()
{ cout << "老狼老狼幾點(diǎn)鐘 ? 1點(diǎn)鐘。" << endl; cout << "老狼老狼幾點(diǎn)鐘 ? 2點(diǎn)鐘。" << endl; cout << "老狼老狼幾點(diǎn)鐘 ? 3點(diǎn)鐘。" << endl; cout << "老狼老狼幾點(diǎn)鐘 ? 4點(diǎn)鐘。" << endl; cout << "老狼老狼幾點(diǎn)鐘 ? 5點(diǎn)鐘。" << endl; cout << "老狼老狼幾點(diǎn)鐘 ? 6點(diǎn)鐘。" << endl; cout << "老狼老狼幾點(diǎn)鐘 ? 7點(diǎn)鐘。" << endl; cout << "老狼老狼幾點(diǎn)鐘 ? 8點(diǎn)鐘。" << endl;
cout << "老狼老狼幾點(diǎn)鐘 ? 9點(diǎn)鐘。" << endl;
cout << "老狼老狼幾點(diǎn)鐘 ? 10點(diǎn)鐘。" << endl;
cout << "老狼老狼幾點(diǎn)鐘 ? 11點(diǎn)鐘。" << endl;
cout << "老狼老狼幾點(diǎn)鐘 ? 12點(diǎn)鐘。" << endl;
cout << "狼來了 , 快跑! " << endl;
return 0;
}
其中 cout<<"老狼老狼幾點(diǎn)鐘 ? "重復(fù)出現(xiàn)了 12次,輸入時(shí)運(yùn)用復(fù)制、粘貼可以很快地完成,但是解決有些問題時(shí),需要重復(fù)幾百次、幾千次或幾萬次,是不是只能這樣做呢?
這時(shí)我們就需要使用 for循環(huán)語句,for循環(huán)語句最常用的格式為:
for(循環(huán)變量賦初值 ; 循環(huán)條件 ; 循環(huán)變量增值)
語句 ;
其中“語句 ;”就是循環(huán)體,可以是一個(gè)簡單的語句,也可以是一個(gè)用 “{ }”括起來的復(fù)合語句。它的執(zhí)行過程如圖 27.1所示。
……