今天,我們通過一個游戲來學習選擇結構,游戲的地址如下:
https://blockly-games.appspot.com/bird?lang=en
本游戲分為10關:主要游戲規則如下:
①主界面是游戲的運行界面,我們需要通過控制代碼來讓鳥叼完蟲子后回到鳥窩,並保證不撞到牆。
②代碼主要由選擇結構和邏輯判斷組成。
③點擊下方的Run Program按鈕后程序就會執行右側的代碼。回到鳥窩后,游戲結束,順利通關。
你可以先嘗試着看看鳥應該怎樣去運動,並如何調用代碼塊。稍后我們將會詳細介紹關於選擇結構的各種語法。
1.
![]() |
2.
![]() |
3.
![]() |
4.
![]() |
5.
![]() |
6.
![]() |
7.
![]() |
8.
![]() |
9.
![]() |
10.
![]() |
4.1 關系運算符和關系表達式
關系運算是邏輯運算中比較簡單的一種,所謂的關系運算實際上就是比較運算,將兩個值進行比較,從而判斷比較的結果是否滿足符合的條件,比如關系表達式a>5,如果a為6,那么表達式成立,結果就是真,反之,如果a的值為-1,那么表達式不成立,結果就是假。
4.1.1關系運算符及其優先順序
我們有如下6種關系運算符:>,<,≥,≤,==,!=
優先級次序如下:
(1)前四種的優先級順序高於后兩種,前四種優先級相同,后兩種優先級相同。
(2)關系運算符的優先級低於算術運算符。
(3)關系運算符的優先級高於賦值運算符。
舉幾個例子:
(2)a > b == c (a > b) == c
4.1.2關系表達式
關系表達式的結果有兩個,如下圖所示,真和假(非真)。
我們需要注意“=”和“==”的區別:
“=”表示賦值語句,比如a = 5,是把5賦值給變量a
“==”是邏輯判斷,比如a == 5,是表示變量a的值是否和5相等,如果相等就返回真,反之返回假,我們的blockly如下圖所示,邏輯判斷“==”寫成了“=”,是為了方便大家去理解,但實際上你要知道這兩者是有區別的,細心的讀者打開blockly轉換到代碼就會發現代碼中顯示的都是“==”。

4.2 邏輯運算符和邏輯表達式
4.2.1邏輯運算符及其優先級
邏輯運算符包括與、或、非,在我們的blockly中,如下圖所示去表示分別為和、或、非。

邏輯和,a 和 b,當且僅當a,都為真時,結果為真。
邏輯或,a 或 b,只要a,b中有一個為真,結果就為真。
邏輯非,非 a,如果a為真,則結果為假,如果a為假,那么結果為真。
我們用圖表的形式來表示如下:
a | b | a and b | a or b | not a |
真 | 真 | 真 | 真 | 假 |
真 | 假 | 假 | 真 | 假 |
假 | 真 | 假 | 真 | 真 |
假 | 假 | 假 | 假 | 真 |
(1)非邏輯,即非在三種運算符中優先級最高。
(2)邏輯“和”和“或”優先級相等,低於非邏輯
4.2.2邏輯表達式
邏輯表達式的值應該是真或假,下面我們一起通過一個例子來了解下邏輯表達式在選擇結構中的作用:
我們知道在平年中2月份是28天,閏年中2月份是29天,那么怎樣去區分平年和閏年呢?我們可以通過如下的流程圖來進行判斷:

閏年的條件是符合下面二者之一:
①能被4整除,但不能被100整除
②能被4整除,又能被400整除
在blockly中有兩種除法,一種是普通的除法,一種是取余除法,如下圖所示:
普通除法直接進行計算,而取余除法將是將未整除的數保留下來,只取整數部分,並沒有小數部分。

我們用符號/來表示除法,用%來表示取余,&&表示“和”,||表示“或”,!表示“非”。
那么閏年就可以這樣來表示:
(year % 4 == 0 && year % 100 !=0)|| year % 400 == 0
那么非閏年就直接在前面加一個!符號就好了
!((year % 4 == 0 && year % 100 !=0)|| year % 400 == 0)
轉化為代碼就是這樣:

4.3 條件語句-if
4.3.1選擇結構之if語句
Blockly中的if語句表示選擇條件,如果滿足條件就執行“......”語句,在if的左側有一個設置按鈕,點開后可以添加else if和else語句,表示多重判斷,你可以將左側的模塊兒拖到if下面就形成了其它三種語句。

比如這個例子: 班里面要做一個成績統計,成績在90分以上就輸出A,在80-90分之間就輸出B,80分以下輸出C:

我們進行到這里這個程序你大致就應該明白了上面的代碼究竟寫的是什么內容,第一句話就是從鍵盤獲取一個分數賦值給score這個變量,如果90 < score < 100那么就輸出A,在80 < score <90之間輸出b,其余的輸出c。 <center="" style="color: #333333;">

我們把剛才閏年的那個例子用編程來實現:

運行結果如下:


是不是挺簡單的呢?下面我們將前面學習的東西鞏固下,並將訓練的難度進行升級:
①創建兩個變量,並比較這兩個數的大小。
②創建三個變量,分別通過鍵盤復制,並將這三個數由小到大輸出。
解析:
①我們比較兩個數的大小時,有三種情況,大於小於和等於,因此就要用到if條件語句進行兩次判斷,剩下的一種情況直接用else即可, “to result append text”這個語句是字符串追加的意思,就是我們不僅僅只輸出一個數字,而是輸出整個結果,比如2>1,2=2,2<3這樣的結果。

輸出結果如下所示:



②三個數比較大小時,情況就比較復雜了,還要從小到大進行輸出,這就不僅僅需要進行比較了,而且還需要進行排序,這就需要了解在程序中怎樣去交換兩個變量,我們來舉一個現實中的例子,現在我們有兩杯水,我們怎樣去交換這兩杯水呢?

答案是顯然的,我們需要借助第三個空杯,我們把他們編號A,B,C。
那么交換A,B兩杯水,需要以下步驟:
(1)把A中的水倒入C
(2)把B中的水倒入A
(3)把C中的水倒入B
我們的程序也是這樣,交換兩個變量也需要借助第三個變量,剩下的就簡單了,只要兩兩比較就可以了,因為要從小到大輸出,所以只要前者大於后者將兩個數交換就可以了。


4.3.2選擇結構的嵌套-if嵌套
if嵌套語句實際上就是在if語句里面還有if語句,實現了嵌套,我們剛才講的平年閏年的問題其實也可以用嵌套的方法來解決:
首先判斷year能否被4整除,如果能被4整除,再判斷能否被100整除,這時可能還不是閏年,還要再進行判斷,如果能被400整除那就是閏年,不能就是平年。

4.4選擇結構在生活中的應用
其實我們在平時上網的時候網頁中存在着很多的選擇結構,比如說登陸注冊界面,我們以qq的登陸界面為例子,如下圖所示:

①qq中的昵稱是可以隨意的,你可以和別人的昵稱是相同的,所以在昵稱這欄我們在后台只需要判斷是否存在非法字符就可以了,如果存在非法字符就在后面顯示一個小“×”,如果昵稱合法,就顯示一個對號“√”。

②qq中密碼的判斷較為復雜,它分為三個等級,每輸入一個字符后程序都會對其進行判斷,如下圖所示,每次判斷后合格的項就會打勾,而且兩次密碼必須是一致的,判斷是在第二次輸入密碼確定的。

③生日、所在地這些都是需要進行選擇的,我們需要在后台將所有的信息輸入到選擇文本中去,這樣用戶只要直接進行選擇就可以了。
④當所有的信息全部填寫完成,還要進行一次大的判斷,就是所有條件全部滿足時,即所有條件全都為真時,就會顯示注冊成功,否則就會彈出必須還要填寫什么必要信息。
理解嵌套循環了么,現在我們再來回顧開篇的例子,看看你能否做出答案。參考答案如下:
1.
![]() |
2.
![]() |
3.
![]() |
4.
![]() |
5.
![]() |
6.
![]() |
7.
![]() |
8.
![]() |
9.
![]() |
10.
![]() |
課后練習
1.寫出下面各邏輯表達式的值。設a=3,b=4,c=5。
(1)a+b>c && b==c
(2)a || b+c && b-c
(3)!(a>b) && !c||1
(4)!(x=a) && (y==b) && 0
(5)!(a+b)+c-1 && b+c/2
2.給一個不多於五位的正整數,要求:
(1)求出它是幾位數;
(2)分別閥引出每一位數字;
(3)按照逆序打印出各位數字,例如原數為321,應輸出123。
知識梳理
