天天看點

帶你讀《Blockly創意趣味程式設計》之三:Blockly選擇結構03

點選檢視第一章 點選檢視第二章

03

Blockly選擇結構

● 學習目标

了解選擇結構的概念。

了解、運用單分支選擇結構。

了解、運用雙分支選擇結構。

了解、運用多分支選擇結構。

了解選擇結構的嵌套。

● 知識圖譜

帶你讀《Blockly創意趣味程式設計》之三:Blockly選擇結構03

在前面的學習中,我們熟悉了Blockly中各種基本子產品的功能,并嘗試了在順序結構中進行設計。順序結構在程式流程圖中的展現就是用流程線将程式框自上而下地連接配接起來,按順序執行算法步驟。但是,我們會發現當遇到判斷變量是否滿足某一條件才可以執行下面的步驟時,很難隻用順序結構表達出來,這時就需要運用選擇結構來對選擇條件進行判斷。本章首先帶領大家認識選擇結構,然後根據選擇結構的構成分别介紹單分支選擇結構、雙分支選擇結構以及多分支選擇結構,最後介紹選擇結構的嵌套。在學習完本章内容後,通過Blocky Game中的Bird遊戲對選擇結構的使用進行練習。

3.1 基本概念

例如,我們要判斷一個數是否為正數,并輸出文字結果。流程圖如圖3-1所示,通過判斷輸入的數值是否大于0,輸出結果。當x>0時,輸出“正數”;否則輸出結果為“非正數”。這種通過判斷是否滿足選擇條件來決定下一個步驟的過程就是選擇結構。在Blockly中運用if和else語句完成選擇條件,表達if語句的子產品如圖3-2所示。如果滿足條件,則執行某一步驟。在if的左側有一個設定按鈕,單擊後可以添加else if和else語句到右側,進而進行多重判斷。

帶你讀《Blockly創意趣味程式設計》之三:Blockly選擇結構03

選擇結構用于判斷給定的條件,根據判斷的結果判斷某些條件,根據對條件的判斷結果控制程式的流程。

3.2 單分支選擇結構

單分支選擇結構是最簡單的選擇結構,用if語句表示。若滿足條件則執行某一步驟,其流程圖如圖3-3所示。在Blockly中則使用圖3-4所示的子產品來執行。在“如果”後面輸入判斷語句,當邏輯判斷結果為真時,則執行放在“執行”部分的語句塊。

帶你讀《Blockly創意趣味程式設計》之三:Blockly選擇結構03

【例3-1】 運用Blockly判斷加法運算結果是否正确,若正确則提示“正确”,不正确則無回報。

【解答】 這一過程隻需要運用單分支選擇結構就可以完成,即隻需要運用if語句,在Blockly中,運用“如果—執行”子產品即可。假設要判斷1+1的運算結果,當在“=”後輸入的是2時,可以彈出顯示“正确”的提示框;當把“=”後的值改為0後,運作程式則無反應,如圖3-5所示。

帶你讀《Blockly創意趣味程式設計》之三:Blockly選擇結構03

3.3 雙分支選擇結構

雙分支結構一般用if else語句表示,當滿足某一條件時,執行A步驟;否則執行B步驟。其流程圖如圖3-6所示。在Blockly中需要在“如果—執行”子產品的基礎上添加“否則”部分,最終顯示如圖3-7所示。和單分支選擇結構一樣,在“如果”後面輸入判斷語句,當邏輯判斷結果為真時,執行放在“執行”部分後面的語句塊;當邏輯判斷結果為假時,執行放在“否則”部分後面的語句塊。

帶你讀《Blockly創意趣味程式設計》之三:Blockly選擇結構03

【例3-2】 運用Blockly判斷加法運算結果是否正确,若正确則提示“正确”,不正确則提示“錯誤”,使用雙分支選擇結構。

【解答】 我們隻需要在單分支選擇結構示例的基礎上,為邏輯判斷錯誤的情況添加“否則”子產品,後面加上輸出“錯誤”即可。同樣以判斷1+1的運算結果為例,當我們輸入的是2時,可以彈出顯示“正确”的提示框;當把“=”後的值改為0後,則彈出顯示“錯誤”的提示框,如圖3-8所示。

帶你讀《Blockly創意趣味程式設計》之三:Blockly選擇結構03

練一練

輸入一個變量,判斷該變量是否可以被3整除,并輸出結果“可被3整除”或“不可被3整除”。

3.4 多分支選擇結構

多分支選擇結構由if和else if語句構成,其中可以有多個else if結構,其流程圖如圖3-9所示。在Blockly中使用多分支選擇結構時,需要在單分支選擇結構中添加“?否則如果?”子產品,該子產品可以不限數量。在“?否則如果?”子產品後面可以添加“?否則?”子產品,也可以不添加,最終形式如圖3-10所示,這些都是多分支選擇結構。

帶你讀《Blockly創意趣味程式設計》之三:Blockly選擇結構03

小提示

多分支選擇結構中可以有多個選擇判斷部分,但是除第一個選擇判斷部分外,其他部分都是在上一個判斷的False分支上。

【例3-3】 班裡面需要做一個成績統計,成績在90分以上輸出A,在80~90分之間輸出B,80分以下輸出C。

【解答】 這裡需要将分數做3個分段,一個分段是大于90分的,輸出A;剩餘的分數中,大于80分的輸出B;否則輸出C。根據判斷條件,最終在Blockly中制作出語句子產品,如圖3-11所示。

帶你讀《Blockly創意趣味程式設計》之三:Blockly選擇結構03

統計班級的分數段,一共有“90~100”“80~90”“70~80”“60~70”和“60以下”5個分數段。要求輸入成績,顯示出屬于哪個分數段。

3.5 選擇結構的嵌套

選擇結構的嵌套實際上就是在選擇結構中再放置一個或多個選擇結構,實作選擇結構的嵌套。在Blockly中實作選擇結構的嵌套,需要将多個“如果—執行”子產品套用。可以将嵌套的“如果—執行”子產品放置在“執行”子產品的後面,如圖3-12a所示;也可以放置在“否則”子產品的後面,如圖3-12b所示。但是将一個新的“如果—執行”子產品放置在“否則”子產品後面時,這種形式等同于在“如果—執行”子產品的基礎上添加“否則如果”部分。比如圖3-12b中搭建的子產品的意義與圖3-12c中的子產品相同,也就是當選擇結構嵌套部分放在“否則”子產品中時,可以簡化為多分支結構。

帶你讀《Blockly創意趣味程式設計》之三:Blockly選擇結構03

選擇結構的嵌套沒有固定的模式,也沒有規定嵌套部分需要放置在哪一部分,隻要選擇結構内有一個或多個選擇結構,就是實作了選擇結構的嵌套。

【例3-4】 我們知道在平年中2月有28天,閏年中2月有29天,那麼怎樣利用Blockly編寫一個判斷年份是否為閏年的程式呢?

【解答】 要判斷某個年份是否為閏年,首先需要判斷該年份是否可以被4整除,如果不可以被4整除,那麼這個年份肯定不是閏年。在可以被4整除後,還需要進一步判斷這個年份的後兩位是否為0,即是否可以被100整除。如果不可以被100整除,則這個年份一定為閏年;如果可以被100整除,還需要判斷這一年份是否可以被400整除。如果可以被400整除,那麼這個年份是閏年;如果不可以被400整除,則是平年。整個判斷過程如圖3-13所示,在Blockly中實作這一判斷過程,需要将3個選擇結構進行嵌套來完成。最終選擇結構的嵌套部分在Blockly中的實作形式如圖3-14所示。

帶你讀《Blockly創意趣味程式設計》之三:Blockly選擇結構03
帶你讀《Blockly創意趣味程式設計》之三:Blockly選擇結構03

建立3個變量,在Blockly中使用選擇結構的嵌套形式,比較3個變量的大小,并将這3個數由大到小排列。

3.6 小試牛刀—遊戲:鳥

學習完如何在Blockly中使用選擇結構後,我們通過一個遊戲來熟練掌握這種程式結構,遊戲的位址如下:

http://cooc-china.github.io/pages/blockly-games/zh-hans/bird.html?lang=zh-hans

遊戲規則:

① 我們需要通過控制代碼來讓鳥捉完蟲子後回到鳥巢,并保證不會撞到牆。

② 代碼主要由選擇結構和邏輯判斷組成。

③ 單擊“運作程式”按鈕後程式就會執行右側的代碼。回到鳥巢後,遊戲結束,順利通關。

通關詳解:

第1關:讓鳥沿着45°方向向前飛行,捉完蟲子後回到鳥巢,如圖3-15所示。

帶你讀《Blockly創意趣味程式設計》之三:Blockly選擇結構03

第2關:讓鳥在捉到蟲子前沿0°向前飛行,捉到蟲子後沿90°飛行,回到鳥巢,如圖3-16所示。

第3關:讓鳥在捉到蟲子之前沿右下方飛行,捉到蟲子之後再沿右上方飛行,如圖3-17所示。

帶你讀《Blockly創意趣味程式設計》之三:Blockly選擇結構03
帶你讀《Blockly創意趣味程式設計》之三:Blockly選擇結構03

第4關:讓鳥在飛行橫坐标小于80時,向右飛行;橫坐标不小于80時,向下飛行到達鳥巢,如圖3-18所示。

第5關:讓鳥在飛行縱坐标大20時,向下飛行;縱坐标不大于20時,向左飛行到達鳥巢,如圖3-19所示。

第6關:當鳥捉到蟲子前沿右斜下方飛行,捉到蟲子後判斷鳥所處位置的縱坐标是否小于80,當小于80時,向上方飛行;當不小于80時,向左方飛行,如圖3-20所示。

帶你讀《Blockly創意趣味程式設計》之三:Blockly選擇結構03
帶你讀《Blockly創意趣味程式設計》之三:Blockly選擇結構03

第7關:先讓鳥沿左下方飛行,越過下面的阻攔物至縱坐标40處,然後令其在橫坐标不超過80時,沿右斜下方飛行,捉到蟲子;随後在縱坐标不超過20時,沿左方飛行回到鳥巢,如圖3-21所示。

帶你讀《Blockly創意趣味程式設計》之三:Blockly選擇結構03
帶你讀《Blockly創意趣味程式設計》之三:Blockly選擇結構03

第8關:當同時滿足鳥沒有捉到蟲子和飛行橫坐标小于50時,沿右上方飛行;然後設定沒有捉到蟲子和飛行橫坐标大于49時,沿右下方飛行,令鳥捉到蟲子。捉到蟲子後判斷鳥所處位置的縱坐标是否小于50,當小于50時,令鳥沿着左上方飛行至界面中點;随後改為沿右上方飛行,回到鳥巢,如圖3-22所示。

帶你讀《Blockly創意趣味程式設計》之三:Blockly選擇結構03

第9關:當同時滿足鳥沒有捉到蟲子和飛行橫坐标大于50時,沿正左方飛行;然後設定沒有捉到蟲子和飛行縱坐标大于20時,沿正下方飛行,令鳥捉到蟲子。捉到蟲子後判斷鳥的橫坐标是否大于40,當小于40時,令鳥沿着右斜上方飛行,随後改為沿右斜下方飛行,回到鳥巢,如圖3-23所示。

帶你讀《Blockly創意趣味程式設計》之三:Blockly選擇結構03

第10關:當沒有捉到蟲子時,若鳥的飛行橫坐标小于40,則沿右斜上方飛行;若大于40,沿右斜下方飛行。捉到蟲子後,當鳥的橫坐标大于40時,沿左斜上方飛行,小于40時,沿左斜下方飛行,回到鳥巢,如圖3-24所示。

帶你讀《Blockly創意趣味程式設計》之三:Blockly選擇結構03

3.7 本章練習

1.給出一個不多于5位的正整數,請在Blocky中實作以下要求:

1)求出它是幾位數;

2)分别列印出每一位數字;

3)按照逆序列印出各位數字,例如原數為321,應輸出123。

2.函數y=f(x)表示如下,程式設計實作輸入一個x值,輸出y值。請在Blockly中實作這一函數。

帶你讀《Blockly創意趣味程式設計》之三:Blockly選擇結構03

3.自己上網查資料,搜集有關氣象風級表的資訊,比如0級表示無風,12級表示飓風等,試在Blockly中編寫程式,輸入一個風級,輸出相應的概況,如名稱、速度等。

3.8 課外拓展

開源軟體的由來

開源軟體,全稱為開放源碼軟體(Open Source Software),顧名思義,它是指源碼可以被公衆使用的軟體,而且開源軟體的修改和使用一般不會受到許可證的限制。關于開源軟體的起源,可以追溯到20世紀60年代的UNIX的誕生。

1969年,貝爾實驗室的工程師開始開發UNIX。在此後的10年裡,UNIX在學術及商業機構中得到了廣泛的應用。許多機構在使用UNIX的過程中,對其功能進行了擴充和改進,并衍生出許多新的産品,如BSD(Berkeley Software Distribution)、Linux等。但是好景不長,貝爾實驗室逐漸意識到了UNIX的商業價值,于是不再将UNIX的源代碼免費授權給學術和商業機構了,甚至開始對之前UNIX的衍生版本聲明版權權利,也因為這一舉動,引發了許多版權糾紛。從某種程度上看,UNIX在開源方面起了很小的作用。

1984年,理查德·斯托曼發起了GNU項目,與此同時,自由軟體的概念也已誕生,GNU項目的貢獻者旨在開發一個讓每個人可以自由、免費使用的軟體。後面為了協助GNU計劃的開展,理查德·斯托曼推動并建立了自由軟體基金會。1991年,Linux核心誕生,并且伴随着Linux熱度逐漸升高,它也成了GNU計劃的最終産物。也正是基于這些原因,時至今日,隻要一提到開源,大家首先想到的就是Linux。

其實開源軟體不僅有Linux,還有很多比較知名的,比如內建開發環境Eclipse、Linux下的文本編輯器VIM、Android作業系統、Python程式設計語言,Apache網頁伺服器,Arduino單片機等。其實還有一個在開源發展曆史中具有裡程碑意義的軟體—Github,由于它所提供的軟體源代碼托管服務,使得更多的開發者參與到開源項目中來,任何人都可以将自己的項目托管到Github上,他人能非常友善地查找到感興趣的項目及源代碼,而且可以與項目所有者以協作的方式開發。

“開源軟體”既代表一種哲學思想,也代表一種軟體發展模式。在像Linux這樣的開源項目中,軟體是免費共享的,其“源代碼”(經驗豐富的程式員能夠閱讀并了解的編碼指令)是公開釋出的,以便其他程式員學習、分享和修改,衆人拾柴火焰高,開源會越來越流行,越來越強大。

繼續閱讀