990 likes | 1.2k Views
第五章 選擇結構. 本章投影片僅供本書上課 教師 使用 , 非經同意請勿拷貝或轉載. 5-1 關係運算式與邏輯運算式. 關係運算式 和 邏輯運算式 是構成條件基本要件。運算式經過運算產生 True( 真 ) 或 False( 假 ) 供我們決定程式執行的流向。 一、關係運算式 關係運算式功能 用來比較數值、字串等資料的大小關係。. 關係運算子種類與關係運算式用法:. 【 例 1】 7 > 4 結果 True 【 例 2】 "a" > "b" 結果為 False
E N D
第五章 選擇結構 本章投影片僅供本書上課教師使用,非經同意請勿拷貝或轉載
5-1 關係運算式與邏輯運算式 關係運算式和邏輯運算式是構成條件基本要件。運算式經過運算產生True(真)或 False(假) 供我們決定程式執行的流向。 一、關係運算式 • 關係運算式功能 用來比較數值、字串等資料的大小關係。
【例1】 7 > 4 結果 True 【例2】 "a" > "b" 結果為 False ‘ a 的ASCII碼為97 , b 的ASCII碼為98 【例3】#3/17/2006# >= #1/1/2006#結果為True。 【例4】身高(tall)不超過186 的條件式:tall <= 186
二、邏輯運算式 邏輯運算子可將多個關係運算式結合成較複雜的邏輯運算式。 A和B運算元可以是關係運算式、布林變數和布林常值。
A和B運算元可以是關係運算式、布林變數和布林常值。A和B運算元可以是關係運算式、布林變數和布林常值。 【例1】小明總成績 (score)為92,操行等第(grade) 為甲。請檢查下列指定條件式各種邏輯運算的 結果。 (score >=90) And (grade="甲") 【例2】 請寫出成績 60 ≦score < 80之間的條件式 結果為真 (score>=60) And (score<80)
5-2 演算法(algorithm)介紹 • 為解決某一特定問題規劃出來 一系列有順序且明確的步驟。 • 好的演算法滿足下列五條件: 1. 有限性 2. 明確性 3. 輸入資料 4. 輸出資料 5. 有效性
演算法方式 : 1. 虛擬碼(Pseudo Code): 即一般口語語文描述處理問題的步驟 2. 流程圖 (Flow Chart)
一、虛擬碼(Pseudo Code) • 使用文字敘述來說明處理問題的步驟。 • 類似程式語言。 • 此種表示方式較易於改寫成任何程式語言。 • 複雜的演算法大都採用此種方式來描述。
二、流程圖 (Flow Chart) • 流程圖就是利用簡明的圖形符號,來表示程式處理問題的步驟和方法。 • 它藉著各種不同的圖形和箭頭來表達解決問題的順序。 • 每一種圖形代表一種作業功能。
使用虛擬碼和流程圖描述輸入成績求總和的步驟使用虛擬碼和流程圖描述輸入成績求總和的步驟 1. 使用虛擬碼表示 Step1 令總和(sum) = 0 Step2 輸入成績(score) Step3 若 score >= 0,則繼續下一步驟; 否則跳 到 Step 6 Step4 令 sum = sum + score Step5 跳回 Step 2繼續執行 Step6 印出 sum Step7 結束程式執行
5-3 結構化程式設計 • 結構化程式設計是發展軟體所採用的一項基本程式設計技術。 • 包括 1. 使用循序、選擇和重覆結構。 2. 由上而下設計。 3. 模組獨立。
二、選擇結構程式在執行時,依據條件式的結果來改變程式 執行的流向。一般分三種 : • 1. 單一選擇結構
三. 重複結構 • 程式中某一敘述區段需要反覆地執行,一直到符合或是不符合某一條件時,才離開重覆執行的敘述區段。 • 條件式由關係、邏輯及算術運算式組成 • 稱為迴圈 (Loop)。 • 重覆結構可分為下列兩種: 1. 前測式重覆結構 2. 後測式重覆結構
後測式迴圈 敘述區段A至少會執行一次
一. 單向選擇的 If … Then敘述 If <條件> Then 敘述區段 End If If (a < 0) Then a = -a' 敘述一行 省略End If If (score < 60) Then‘ 分數低於60的處理 sum += score ' 累加入總分 count+=1 ' 不及格人數加1count要先清為0 End If
二、雙向選擇的 If … Then … Else 敘述 If <條件式> Then 敘述區段A Else 敘述區段B End If
【例】使用雙向選擇結構來判斷 若sex = "男",顯示 "先生,您好! " 若sex= "女",顯示 "小姐, 您好!" Dim sex As String = "女" If sex = "男" Then Label1.Text = "先生, 您好 !" Else Label1.Text = "小姐, 您好 !" End If
三、IIf 函式 若我們需要將選擇敘述執行的結果直接以數值或字串傳回時,可以透過IIf函式一行敘述來取代的 If … Then … Else 敘述
【例】 若成績(score) 60 輸出對話方塊顯示“及格”, 否則顯示"不及格"。 1. 使用 If … Then … Else 敘述 If score > =60 Then MsgBox("及格") Else MsgBox("不及格") End If
2. 使用 IIf 函式 MsgBox ( IIf (score >=60, "及格", "不及格") ) 【例】使用巢狀的IIf函式。若金額 amount 1000 打九折 amount 5000 打八折將應付金額顯示在 Label1 標籤控制項 Label1.Text = amount * ( IIf ( amount >= 5000, 0.8, IIf(amount >= 1000, 0.9,1 )))
範例 試使用一個If敘述和兩個IIF函式來做分數(score)和等第(grade)換算作業。 條件: 0 score <60 grade = "D" 60 score <70 grade = "C" 70 score <80 grade = "B" 80 score grade = "A"
Label1 Label2
【問題分析】 • 本例可使用多種解法,如巢狀If敘述、Select Case敘述等方法 ; 惟本例限定使用一個If敘述和兩個IIF函式,而If敘述只有兩種選擇,所以應該將四種等第由中間70分開始判斷,如下 : 若70分以上透過IIF(score>80, "A", "B") ,按成績範 圍分出"A"和"B"等第。 若70分以下透過IIF(score>60, "C", "D") ,按成績範 圍分出"C"和"D"等第。 • 按確定鈕(btnOk),根據成績設定等第,將程式碼寫在btnOk_Click事件處理程序內。 • 按結束鈕(btnEnd),結束程式執行,在btnEnd_Click事件處理程序內插入End敘述。
【上機】 1. 建立表單: 專案名稱命名為 "grade"。 在表單內建立輸出入介面(如P.30所示) 2. 設立各物件屬性:
' FileName :grade.sln 01 Private Sub btnOk_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles btnOk.Click 02 Dim score As Integer 03 score = Val(txtScore.Text) 04 If (score >= 70) Then‘ 成績>=70執行第5行,否則執行第7行 05 lblShow.Text = "等第 : " & IIf(score >= 80, "A", "B") 06 Else‘5行: 使用IIF,成績>=80為A否則為B 07 lblShow.Text = "等第 : " & IIf(score >= 60, "C", "D") 08 End If‘7行: 使用IIF,成績>=60為C否則為D 09 End Sub 10 ' ------------------------------------------------------------------------------------- 11 Private Sub btnEnd_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles btnEnd.Click 12 End 13 End Sub
5-5 巢狀選擇 如果再條件選擇敘述區段裡面又有條件選擇敘述,就形成了所謂巢狀選擇 ; 通常當選擇的條件有兩種以上時,就可以利用巢狀選擇去解決。
試做分數(score)和等第(grade)換算作業。 0 score <60 grade = "D" 60 score <70 grade = "C" 70 score <80 grade = "B" 80 score grade = "A" Label1 Label2
' FileName :NestIf.sln 01 Private Sub btnOK_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles btnOK.Click 02 Dim score As Integer 03 score = Val(txtScore.Text) 04 If (score < 0 Or score > 100) Then 05 MsgBox("分數超出範圍 限 0~100 ") 06 txtScore.Text = "" 06 Else 07 If (score >= 70) Then 08 If (score >= 80) Then 09 lblShow.Text = " 等第: A " 10 Else 11 lblShow.Text = " 等第: B " 12 End If
13 Else 14 If (score >= 60) Then 15 lblShow.Text = " 等第: C " 16 Else 17 lblShow.Text = " 等第: D " 18 End If 19 End If 20 End If 21 End Sub 22 ‘ ---------------------------------------------------------------------------------- 23 Private Sub btnEnd_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles btnEnd.Click 24 End 25 End Sub
5-6 多向選擇 當選擇條件超過兩種以上時: 可用上節介紹的巢狀選擇敘述,如太多層巢狀 If敘述將增加程式複雜度。 改用多向選擇,可讀性高且具結構化。 多向選擇敘述將依程式條件式的測試結果,分 成各個執行路徑,不同結果執行不同的敘述區 段。
本節介紹三種多向選擇: 1. Select Case敘述 2. Choose函式 3. Switch函式
一、Select Case敘述 根據運算式(數值或字串運算式)的結果,由多個條件中選擇符合條件測試值的敘述區段去執行 ; 執行完畢繼續執行接在End Select後面的敘述語法
一些Case運算式(數值或字串運算式)子句常用測試值寫法一些Case運算式(數值或字串運算式)子句常用測試值寫法 【例1】Case "Y" :測試值是否為大寫Y字元。 【例2】Case"abc" ,"ABC":測試值是否和左列的兩個字串之一相符。 【例3】Case -5,0,100 :測試值是否等於數值–5、0或100。 【例4】Case 60 To 100:測試值是否介於60~100間。 【例5】Case Is < 60:測試值是否小於60。
使用 InputBox函式顯示輸入對話方塊 標題 提示訊息 按鈕1 按鈕2 預設值
' FileName :Tax.sln 01 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 02 Dim income, discount, tax As Integer'所得淨額,所得稅 03 Dim tax_rate As Single '稅率 04 Dim msg As String 05 income = Val(InputBox("請輸入今年的綜合所得淨額:", " _綜合所得稅")) '用InputBox函式輸入綜合所得淨額 06 msg = "綜合所得稅" & vbNewLine 07 Select Case income 08 Case Is <= 370000 09 tax_rate = 0.06 10 discount = 0 11 Case 370001 To 990000 12 tax_rate = 0.13 13 discount = 25900 14 Case 990001 To 1980000 15 tax_rate = 0.21 16 discount = 105100
17 Case 1980001 To 3720000 18 tax_rate = 0.3 19 discount = 283300 20 Case Is >= 3720001 21 tax_rate = 0.4 22 discount = 655300 23 End Select 24 tax = income * tax_rate‘ 稅金=綜合所得淨額 * 稅率 25 msg &= "綜合所得淨額: " & Format(income, " #,###") & "元"_& vbNewLine 26 msg &= "稅 率:" & Format(tax_rate, "0%") & vbNewLine 27 msg &= "------------------------------------------" & vbNewLine 28 msg &= "稅 金:" & Format(tax, "#,##0") & "元" & vbNewLine 29 msg &= "累 進 差 額:" & Format(discount, "#,##0") & "元" & _ vbNewLine 30 msg &= "------------------------------------------" & vbNewLine 31 msg &= "今年應納稅額:" & Format(tax - discount, "#,##0") & "元" 32 MsgBox(msg)‘MsgBox敘述 ; 31行:全年應納稅額=稅金 – 累進差額 33 End 34 End Sub
二、Choose函式 Choose函式會根據第一個引述的值,傳回相對的對應值 【例1】 res = Choose(i,"一","二","三","四");如果i=2時,res = "二" 。 【例2】 res = Choose(i,"1","one","一","壹"): 如果 i=3 時,res = "一"; 如果 i=5 時,res 為Null。
三、Switch函式 根據運算式的值,傳回相對的對應值 【例1】 msg = Microsoft.VisualBasic.Switch(sex = "男", "先生", _ sex = "女", "小姐")若sex= "女" 時,則msg= "小姐" 。 【例2】 degree=Microsoft.VisualBasic.Switch (score>=90 And score<=100,_ "優", score>=80 And score<=89, "甲",score>=70 And score<=79, _ "乙", score>=60 And score<=69, "丙",score>=0 Andscore<=59, _ "丁")若score=81時,則degree= "甲" 。 若score=120,則degree=Null。
5-7 選項按鈕 RadioButton 程式中若需要有多個選項可供選擇但只能單選時使用(i.e. 僅能多選一)。同群組的「選項按鈕」彼此間具有互斥現象,亦即如果選取了同群組中的一個選項按鈕時,則該按鈕的Checked屬性馬上變為True。而該群組中的其他選項按鈕的Checked屬性馬上變為False,呈未選取狀態。