資訊內(nèi)容
一道程序猿筆試面試必會題怎樣用scratch做出來?
很多家長覺得scratch太簡單了,只需要拖拽封裝好的積木塊就可以了。而我們scratch老師則會回應(yīng),scratch是低門檻高上限的,是沒有天花板的……為什么這么說,我們今天就看一看用scratch怎么來做一道程序猿筆試面試必須要會的一道題——排序!
題目的任務(wù)敘述很簡單:對一個已知數(shù)組,按照從小到大(或大到小)排序
?用scratch我們可以很快讓計算機給出任意數(shù)組,比如,可以有10個任意數(shù)字
?這樣我們就有了10個任意數(shù)
接下來,就是排序了。程序猿考試考的是算法,什么冒泡排序、選擇排序、插入排序等等。一個優(yōu)秀的算法能使程序的性質(zhì)帶來質(zhì)的飛躍,在scratch里面同樣可以用這些算法來解決問題(謝聲濤《scratch趣味編程進階——妙趣橫生的數(shù)學(xué)和算法》書中第12章“撲克學(xué)算法”就將這些算法描述得非常透徹)。
在這里我們就用“選擇排序”的思路帶著大家用scratch實現(xiàn)從小到大排序
思路是這樣的:
第一輪:我們用第一個數(shù)字跟剩余的9個數(shù)比較大小,如果第一個數(shù)字比其他數(shù)字大,就交換這兩個數(shù)字的位置(因為我們的排序是從小到大,就讓小的數(shù)字在前面)。
具體:
1、第一個數(shù)字和第二個數(shù)字比較后,第一個數(shù)字89比第二個數(shù)字62大,就讓兩個數(shù)字換順序;2、再讓新的第一位置數(shù)字62和第三個數(shù)字45比較,比較之后45排到第一位置;3、新的第一位置數(shù)字45再跟第四個數(shù)字比較……以此類推,最終排在第一位置的數(shù)字是整個數(shù)組【L】中最小的數(shù)字。
程序腳本體現(xiàn)如下
我們新設(shè)一個變量【i】代表除了第1項以外的其他項,先將i設(shè)為2,通過讓i每次增加1,實現(xiàn)第一個數(shù)字(L的第一項)與其他各個數(shù)字比較。
在替換之前,需要設(shè)一個變量【temp】,作為數(shù)字交換過程中一個承接數(shù)字的臨時空間(我們通常稱為“罐子”,交換數(shù)據(jù)的原理可以用兩個杯子中的水交換來理解)。?第二輪:用與第一輪同樣的方法,讓第二個數(shù)字40跟剩余的8個數(shù)比較大小(第一個數(shù)字一旦排好了就不需要再動),也就是讓數(shù)組【L】的第2項,分別與從第3項、第4項、第5項……第10項逐一比較。
?得到如下順序的數(shù)組:
第三輪:用同樣的方法,讓第三個數(shù)字53跟剩余的7個數(shù)比較大小
第四輪:用同樣的方法,讓第四個數(shù)字跟剩余的6個數(shù)比較大小
……
最終得出排序結(jié)果
看到這里,您對這個排序程序的算法步驟應(yīng)該是很明白了,但如果按照這樣下來這個腳本也太長了(即把以上所有腳本都要拼接起來),用scratch做反而很麻煩。那么有什么辦法可以簡化呢?
我們看到,在每一輪的第一個數(shù)字與其他幾個數(shù)字比較,可以用重復(fù)執(zhí)行數(shù)字順序i+1就可以完成。而第二輪、第三輪……第十輪都是重復(fù)與第一輪一樣的方法,是不是也可以嵌套一個重復(fù)執(zhí)行的順序呢?
答案當(dāng)然是可以的!
?為了使我們兩個數(shù)的比較更加清楚,我們可以設(shè)兩個變量作為數(shù)組【L】的項目順序,一個設(shè)為【n】,一個設(shè)為【i】,以?n?來控制輪數(shù),以?i?來實現(xiàn)每一輪里已確定一個比較數(shù)后另一個比較數(shù)的變更。腳本程序可以縮減如下:
當(dāng)n=2時,i=n+1=3,i重復(fù)增加1,直到執(zhí)行到10當(dāng)n=3時,i=n+1=4,i重復(fù)增加1,直到執(zhí)行到10……直到n執(zhí)行到10(全部比較完畢)
這個用scratch排列數(shù)字的程序就基本完成了!
當(dāng)然還可以用“制作新的積木”的方式將交換順序的腳本封裝,這就大大簡化了接著用冒泡排序、插入排序、希爾排序等等方式再來玩一遍數(shù)字排序!
制作新積木塊“交換數(shù)字”
所以說,用scratch一樣能玩C、C++、python中的算法!在很多競賽中就體現(xiàn)了排序這種算法的題。
到這里,你可能會松了一口氣,還好,這是競賽。我們成年人做這種題可能都有點繞暈啊!那么告訴你,軟件編程預(yù)備級(scratch等級考試)4級中可能就會有類似難度的題!
知識點講完了,下面就給大家出一道scratch初級組(1-3年級)的一道編程題:
?任務(wù):小明和幾名同學(xué)在周末一起參加了一場蘋果采摘活動,他們每個人摘到的蘋果的數(shù)量已經(jīng)存到了【蘋果數(shù)量】列表里面,請你編寫代碼自動計算出摘的最多的比摘的最少的多摘了幾個,把結(jié)果保存到變量【結(jié)果】中。
舉例:摘的最多的摘了30?個,最少的摘了12?個,【結(jié)果】應(yīng)該為18。
轉(zhuǎn)載自“啟迪少兒”公眾號的原創(chuàng)文章
原文作者:北京通州的迪迪媽
、
聲明:本文章由網(wǎng)友投稿作為教育分享用途,如有侵權(quán)原作者可通過郵件及時和我們聯(lián)系刪除

- 上一篇
Scratch3.0少兒編程案例:地心引力
一、案例簡介 ? ? 我們今天來用scratch 3.0少兒編程案例:地心引力,帶大家認(rèn)識一下萬有引力。小朋友們聽說過牛頓和蘋果的故事嗎?相傳啊,牛頓坐在一棵蘋果樹下思考著行星繞日運動的原因。突然一個蘋果掉落下來,砸到了牛頓的腳邊。就是因為這件事,牛頓發(fā)現(xiàn)了地心
- 下一篇
Scratch編程與物理-用Scratch學(xué)習(xí)“拋物運動”
一、什么是“拋物運動”? 在生活中,拋物運動很常見,我們向空中斜向拋出一個小球,在忽略空氣阻力的情況下,小球在空中劃一個完美的弧線,最后落地,這樣的一個弧線就是拋物線,小球所做的運動就是拋物運動。 下面是用Sc