課程名稱:程式設計 授課老師:________ 第 四 章 選擇結構 課程名稱:程式設計 授課老師:________ 2017/3/9
本章學習目標 1.讓讀者瞭解循序結構與選擇結構之不同。 2.讓讀者瞭解選擇結構之種類、語法及適用時機。 2017/3/9
本章內容 4-1.單一選擇結構(IF-Then) 4-2.雙重選擇結構 4-3.多重選擇結構 4-4.巢狀選擇結構 4-5.其他選擇函數 4-6.習題 2017/3/9
選擇結構分類之架構圖 2017/3/9
4-1 單一選擇結構(IF-Then) IF-Then的中文意思就是「如果…就…」。在單一選擇結構中只會執行條件成立時的敘述。一般而言,我們又可以依照敘述的行數區分為兩種: (一)單行敘述 (二)多行敘述 2017/3/9
(一)單行敘述 指當條件式成立之後,所要執行的敘述式只有一行稱之。 【語法1】 If 條件式 Then 敘述1 【語法2】 End If 其中 <條件式> 是一關係運算式 或 邏輯運算式 【注意】單行敘述可省略End If。 【說明】如果「條件式」成立(True),就執行 Then後面的「敘述1」。 如果「條件式」不成立(False),就跳過不執行。 【使用時機】當條件式成立之後,所要執行的敘述式只有一行。 2017/3/9
【流程圖】 流程圖 概念流程圖 2017/3/9
【舉例】只對成績「及格」的學生有興趣。程式碼如下: 第一種寫法 第二種寫法 01 02 03 Dim Score As Integer Score = Val(TextBox1.Text) If Score >= 60 Then MsgBox("通過了") 04 05 If Score >= 60 Then MsgBox("通過了") End If 2017/3/9
(二)多行敘述 指當條件式成立之後,所要執行的敘述式超過一行以上則稱之。 【語法】 If 條件式 Then 敘述1 敘述2 ---- 敘述n End IF 【注意】多行敘述不可以省略End If。 【說明】如果「條件式」成立,就執行 Then後面的「多行敘述」。 【使用時機】當條件式成立之後,所要執行的敘述式是多行。 2017/3/9
【流程圖】 流程圖 概念流程圖 2017/3/9
【舉例】只對成績「不及格」的學生有興趣並且給予鼓勵。程式碼如下: 只有一種寫法 01 02 03 04 05 If Score<60 Then Msgbox(“您必須補考!”) Msgbox(“請再多加油哦!”) Msgbox(“希望補考能夠順利通過!”) End If 2017/3/9
4-2 雙重選擇結構 此種結構是最常被使用的方式,因為大部份的選擇結構的情況可能兩種。例如:判斷及格與不及格、判斷奇數與偶數、判斷男生與女生…等情況,都可以利用此種結構來完成。 2017/3/9
其中<條件式> 是一關係運算式 或 邏輯運算式 【說明】如果「條件式」成立(真),就執行 Then後面的「敘述1」, 【語法】 If 條件式 Then 敘述1 Else 敘述2 End If 其中<條件式> 是一關係運算式 或 邏輯運算式 【說明】如果「條件式」成立(真),就執行 Then後面的「敘述1」, 否則就執行「敘述2」。 【使用時機】當條件只有二種情況。 2017/3/9
【流程圖】 流程圖 概念流程圖 2017/3/9
【實例】依照平均成績來判斷是「及格」與「不及格」兩種情況。 01 02 03 04 05 If Average_Score>=60 Then MsgBox ("及格") Else MsgBox ("不及格") End If 2017/3/9
【牛刀小試1】參考第三章的循序結構的例子。請再增加一個功, 即利用「平均成績」來判斷「是否及格」。 程式檔案名稱 ch4.sln 一、表單設計 三、執行結果 2017/3/9
Private Sub Button1_Click(……) Handles Button1.Click 二、程式設計 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 Private Sub Button1_Click(……) Handles Button1.Click Dim A, B As Integer Dim Total As Integer Dim Average As Single A = Val(TextBox1.Text) '將Text1文字方塊的內容轉成數字指定給A變數 B = Val(TextBox2.Text) '將Text2文字方塊的內容轉成數字指定給B變數 Total = A + B '將A與B的值相加後,再指定給Total變數 TextBox3.Text = Total '最後將Total變數的內容,再指定給Text3文字方塊 Average = Total / 2 TextBox4.Text = Average If Average >= 60 Then TextBox5.Text = "及格" Else TextBox5.Text = "不及格" End If End Sub 2017/3/9
【牛刀小試2】利用InputBox輸入身高,如果身高為大於180公分, 則顯示「哇!好高丫」,否則顯示「這才比較正常」。 2017/3/9
Private Sub Button1_Click(……) Handles Button1.Click Dim x As Integer 程式檔案名稱 ch4-2B.sln 01 02 03 04 05 06 07 08 09 Private Sub Button1_Click(……) Handles Button1.Click Dim x As Integer x = Val(InputBox("請輸入身高")) If x > 180 Then MsgBox("哇!好高丫") Else MsgBox("這才比較正常") End If End Sub 2017/3/9
【牛刀小試3】 如果A為偶數,則顯示「A為偶數」, 否則顯示「A為奇數」。 2017/3/9
Private Sub Button1_Click(……) Handles Button1.Click Dim A As Integer 程式檔案名稱 ch4.sln 01 02 03 04 05 06 07 08 09 Private Sub Button1_Click(……) Handles Button1.Click Dim A As Integer A = Val(Textbox1.text) If A Mod 2 = 0 Then MsgBox("偶數") Else MsgBox("奇數") End If End Sub 2017/3/9
【牛刀小試4】請將下列求絕對值的流程圖,撰寫成程式碼。 2017/3/9
Private Sub Button1_Click(……) Handles Button1.Click Dim A As Integer 程式檔案名稱 ch4-2D.sln 01 02 03 04 05 06 07 08 09 10 Private Sub Button1_Click(……) Handles Button1.Click Dim A As Integer A = Val(TextBox1.Text) If A >= 0 Then MsgBox("A=" & A) Else A = (-1) * A End If End Sub 2017/3/9
4-3 多重選擇結構 1. 逐一比對結構If/Then/ElseIf 2. 逐一比對結構Select Case 在日常生活中,我們所面臨的決策可能不只一種情況,也有可能兩種情況,甚至兩種以上的不同情況。在前面已經介紹過兩種情況的結構,但是,如果我們所面對的情況有兩種以上時,則必須要使用多重選擇結構。常見的有兩種結構: 1. 逐一比對結構If/Then/ElseIf 2. 逐一比對結構Select Case 2017/3/9
4-3.1 逐一比對結構If/Then/ElseIf 此種結構是雙重結構的改良版,它可以使用於多種選擇情況。 【語法】 If 條件式1 Then 敘述區塊1 ElseIf 條件式2 Then 敘述區塊2 ‧‧‧‧‧‧ ElseIf 條件式n Then 敘述區塊n Else 敘述區塊n+1 End IF 【說明】 如果「條件式1」不成立,就繼續往下判斷「條件式2」,依樣畫葫蘆的判斷下去,直到所有的條件式判斷完為止,否則就執行「敘述區塊n+1」。 【使用時機】當條件式有兩種以上時。 2017/3/9
【流程圖】 流程圖 概念流程圖 2017/3/9
【實例】計算兩科成績的平均,並且依平均成績來分等第。 條件: (1)60分以下為:E等 (2)60~69分為:D等 (3)70~79分為:C等 (4) 80~89分為:B等 (5) 90(含)分以上為:A等 2017/3/9
2017/3/9
4-3.2 逐一比對結構Select Case If/Then/ElseIf與Select Case結構具有相同的功能,但如果條件很多時,使用If/Then/ElseIf結構就很容易混亂了。因此,當程式中的條件式(Condition)超過兩個以上時,最好使用Select Case結構,它可以使程式較為精簡且可讀性較高。 2017/3/9
當(資料與運算式)的值,符合條件式1時,則執行敘述1,符合條件式2時,則執行敘述2,如果所有的條件式都不能符合時,則執行敘述N+1。 【語法】 Select Case 資料或運算式 Case 條件式1 敘述1 Case 條件式2 敘述2 ………………. Case 條件式N 敘述N Case Else 敘述N+1 End Select 【說明1】 當(資料與運算式)的值,符合條件式1時,則執行敘述1,符合條件式2時,則執行敘述2,如果所有的條件式都不能符合時,則執行敘述N+1。 在使用上Select---Case必需要與End Select 成對 2017/3/9 30
在「資料或運算式」中,我們可以放置數字和字串兩種類型的資料,而「條件式」則有下列三種表示方式,如表4-1所示: 【說明2】 在「資料或運算式」中,我們可以放置數字和字串兩種類型的資料,而「條件式」則有下列三種表示方式,如表4-1所示: 表4-1 Select Case結構的三種表示方式 條件型式 條件值 範例 單一或數個不連續的常數 運算式 1, 3, A 固定範圍的常數 運算式 TO 運算式 1 TO 10 IS關係運算子常數 IS 關係運算式 IS <60 2017/3/9
(1)單一或數個不連續的常數:只要其中一個常數符合,就算條件成立。 例如: Case 1 Case 1,4,7,9 Case "A" 說明如下: (1)單一或數個不連續的常數:只要其中一個常數符合,就算條件成立。 例如: Case 1 Case 1,4,7,9 Case "A" (2)固定範圍的常數:只要在範圍內,就算成立。 例如: Case 1 TO 10 Case "A" TO "E" (3)IS關係運算子常數:只要測試運算式在指定範圍內,就算成立。 例如: Case IS <10 Case IS >="P" 2017/3/9
【流程圖】 流程圖 概念流程圖 2017/3/9
【實例】將上一題的實例改為利用Select Case結構方式 計算兩科成績的平均,並且依平均成績來分等第條件: 60分以下為:E等 60~69分為:D等 70~79分為:C等 80~89分為:B等 90(含)分以上為:A等 2017/3/9
說明:你是否發現使用Select Case結構較為容易理解, 並且可以增加程式的可讀性。 2017/3/9
請利用If/Then/Elseif與Select Case結構來比較不同的撰寫方式 【牛刀小試1】製作一個電影分級制的程式 條件: 0~5歲為:普通級 6~11歲為:保護級 12~17歲為:輔導級 18歲以上為:限制級 請利用If/Then/Elseif與Select Case結構來比較不同的撰寫方式 2017/3/9
2017/3/9
2017/3/9
4-4 巢狀選擇結構 指在IF外層結構中,又有一個或多個IF的內層結構,則形成了巢狀的判斷式結構稱之。 當外層的條件式1成立時,才能執行內層的條件式2,也因為由外層至內層的多種判斷結構,形成一種巢狀的現象,故稱為巢狀結構。 2017/3/9
【流程圖】 2017/3/9
【實例】利用巢狀IF來判斷成績是否為及格 01 02 03 04 05 06 07 08 09 If average>=80 Then If vb=100 Then Result="你學業成績不錯,VB程式設計更是高手!!!" Else Result="你學業成績不錯" End If Result="你學業成績還需加油!!!" 2017/3/9
【牛刀小試1】 利用巢狀IF來完成下面的條件: 0~59分為:不及格 60~89分為:及格 90(含)以上為:優等生 2017/3/9
【牛刀小試2】將上一題改用Select Case 來完成。 2017/3/9
4-5 其他選擇函數 Visual Basic2010除了提供以上所介紹的選擇結構之外,還提供具有選擇性質的函數: 雙向選擇函數:IIf函數 多向選擇函數:Choose函數、Switch函數 2017/3/9
4-5.1 IIf條件函數 VB的IIf條件函數主要是使用在指定敘述,以條件來指定變數值。 【語法】 【說明】上述指定敘述的“=”號右邊是條件函數,如同一個If/Else 條件,如果條件成立,其傳回值是變數1,就是將變數值指定 成變數1,否則傳回變數2,此時變數值指定成變數2 【舉例】 hour = IIf(hour >= 12, hour-12, hour) 2017/3/9
2017/3/9
4-5.2 多向選擇Choose函數的使用 Choose函數我們可以把它當作「選擇」之概念,它可以依第1個參數的整數值來傳回對應值。 【語法】 Choose(Index,Data1,Data2,Data3,…,DataN) 【說明】 (1)Index可以是常數或變數。 (2)Index的範圍是1<= Index < =N之間。 (3)若Index超出範圍時,則Choose函數將會傳回Null(空的)。 (4)若Index是小數時,則四捨五入變成整數。 (5)Data1,Data2,Data3,…,DataN不一定皆是相同的資料型態。 2017/3/9
上述程式碼依照變數Day_index的整數值,值1傳回第2個參數,即星期日,值2傳回第3個參數,依此類推。 【舉例】 output = Choose(Day_index, "星期日", "星期一", "星期二", "星期三", _ "星期四", "星期五", "星期六") 上述程式碼依照變數Day_index的整數值,值1傳回第2個參數,即星期日,值2傳回第3個參數,依此類推。 2017/3/9
2017/3/9
2017/3/9
4-5.3 多向選擇Switch函數的使用 Switch函數我們可以把它當作「開關」的概念,當使用者按下某一按鈕時,就會執行某一程序。 【語法】 Microsoft.VisualBasic.Switch(Expre1,Data1,Expre2,Data2,…,ExpreN,DataN) 【說明】 (1)當Expre1運算式成立時,則傳回Data1;否則再判斷Expre2,以此類推。 (2)若沒有一個運算式成立時,則傳回Null給Switch。 2017/3/9
2017/3/9
2017/3/9