7 流程控制

7-1 For Next迴圈

7-1-1 流程圖

所謂迴圈是指讓同一段程式,在某個條件下,不停(重覆)的執行。

而For Next是「計次執行」的迴圈

試想,若不經由迴圈幫助,那要計算10!要花你多少時間呢?

語法

For  計數變數=起始值 To 終止值(Step 間隔值)


程式敘述

Next (計數變數)

結束

.若間隔值為0會有什麼結果?

製作程式(ex7_001.exe):

Public Class Form1

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.Text = "ex7_001"
Button1.Text = "顯示計數變數值"
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim i As Integer
For i = 1 To 10 Step 2
MsgBox("現在的計數變數為:" & i, MsgBoxStyle.Information + MsgBoxStyle.OkOnly, "計數變數值")
Next i

MsgBox("現在的計數變數為:" & i, MsgBoxStyle.Exclamation + MsgBoxStyle.OkOnly, "計數變數值(已跳出迴圈)")
End Sub
End Class

步驟 i值
1 1 第一次迴圈開始
2 3 第一次迴圈結束
3 3 第二次迴圈開始
4 5 第二次迴圈結束
5 5 第三次迴圈開始
6 7 第三次迴圈結束
7 7 第四次迴圈開始
8 9 第四次迴圈結束
9 9 第五次迴圈開始
10 11 第五次迴圈結束
11 11 此時計數變數i已不符合<=10,故跳出迴圈
    ,程式由Next之下一行繼續(也就是另一個MsgBox)

7-1-2 「逐步執行」與「快速監看式」

以上兩功能可方便設計者除錯(Debug)

逐步執行

在程式碼行前,以滑鼠左鍵設定中斷點inter

「偵錯」->「逐步執行」(或按F11)。

step

 

快速監看式(需先使用逐步執行方有此選項)

「偵錯」->「快速監看式」。monitor

此時選出要監看的運算式(變數),如此例中的sum->「新增監看式」可讓設計者看到變數的變化。monitor_var

若該值變成紅字,表示「剛剛」發生變化var_table

亦可使用即時運算視窗,來觀察變數(將滑鼠移至變數旁,亦會顯示目前的變數值)。

 

例:等差級數(請對應下方之程式碼)

S為1,2,3,……10之級數和

S=1+2+3+……+10,其中首項為1、公差為1末項為10

步驟 i值 sum值
1 1 0  
2 1 0 第一次迴圈開始
3 1 0+1=1  
4 2 1 第一次迴圈結束
5 2 1 第二次迴圈開始
6 2 1+2=3  
7 3 3 第二次迴圈結束
8 3 3 第三次迴圈開始
9 3 3+3=6  
10 4 6 第三次迴圈結束
     
  11 55 第10次迴圈結束
  11 55 計數變數 i>終止值 ,故停止迴圈
  11 55  

製作程式(ex7_0.exe):

Public Class Form1

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.Text = "ex7_0"
Button1.Text = "計算等差級數"
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim i, sum As Integer
sum = 0

For i = 1 To 10 Step 1
sum = sum + i
Next i
Label1.Text = sum
End Sub
End Class

 

試計算1~1000 之3的倍數和

製作程式(ex7_1.exe):計算等差級數、顯示等差數列的程式(如時間不足,給同學看執行結果即可)

Public Class Form1

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.Text = "ex7_1"
Button1.Text = "計算等差級數"
Button2.Text = "顯示等差數列"
Label1.Text = "首項"
Label2.Text = "項數"
Label3.Text = "公差"
Label4.Text = "計算結果為:"
TextBox1.Text = 1
TextBox2.Text = 3
TextBox3.Text = 2
'''''TextBox1~3(首項、項數、公差)之預設值

End Sub


Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim first, terms, dif, sum, last As Integer

Dim i As Integer
sum = 0
first = TextBox1.Text
'''''首項
terms = TextBox2.Text
'''''項數
dif = TextBox3.Text
'''''公差
last = first + (terms - 1) * dif
'''''末項

For i = first To last Step dif
sum = sum + i

Next i
Label5.Text = sum
End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim first, terms, dif, sum, last As Integer

Dim i As Integer

first = TextBox1.Text
'''''首項
terms = TextBox2.Text
'''''項數
dif = TextBox3.Text
'''''公差
last = first + (terms - 1) * dif
'''''末項


label6.text = ""
For i = first To last Step dif
Label6.Text = Label6.Text & i & ","
'''''將原來的i值印出後,再印出下個i值
Next i
End Sub
End Class

利用If Then Else將例題中 "顯示等差數列"最後的","不顯示

For i = first To last Step dif
If i < last Then
Label6.Text = Label6.Text & i & ","
Else
Label6.Text = Label6.Text & i

End If

Next i

 

7-2 While迴圈

While 是依條件執行的迴圈

7-3 Do Loop迴圈

和While相似 ,是依條件執行的迴圈,但更有彈性。

7-4 條件判斷敘述

7-4-1單行式 If Then (101年度後跳教此節,直接7-4-2區塊式 If Then Else)

 

語法 If  條件式 Then 程式敘述

to5-4 比較運算子

Public Class Form1

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim a As String

a = InputBox("您是否要退出此程式? 按 Y 退出 按 N 繼續", "確認視窗")

If a = "Y" Then MsgBox("謝謝您的使用!", , "確認視窗")
If a = "N" Then MsgBox("請繼續使用!", , "確認視窗")
If a <> "Y" And a <> "N" Then MsgBox("請重新輸入!", , "確認視窗") '此行在沒有教「5-4 比較運算子」「5-5 邏輯運算子」前,先不管

MsgBox("程式結束", , "程式結束視窗") '不管輸入為何都會執行至此行
End Sub
End Class

 


7-4-2區塊式 If Then Else

 

語法

If  條件式 Then
  程式敘述(若If成立,則執行此區塊)

Else
  程式敘述(若If不成立,則執行此區塊)

End If 結束

 

 

Public Class Form1

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim a As Integer '''請注意變數資料型別,若a得到的不是數值而是字串,會有何問題?如何修正?

a = InputBox("要使用VB嗎? 按(1)表示要,其他數字表示不要", "選擇視窗") '''改變變數資料型別

If a = 1 Then
MsgBox ("歡迎使用VB", MsgBoxStyle.Information + MsgBoxStyle.OkOnly, "使用VB") '''若a=1為真(a等於1)則執行此區塊

Else
MsgBox ("不使用VB", MsgBoxStyle.Information + MsgBoxStyle.OkOnly, "不使用VB") '''若a=1為假(a不等於1)則執行此區塊

End If
MsgBox ("程式結束", MsgBoxStyle.Information + MsgBoxStyle.OkOnly, "程式結束") '''以上的if then else 執行結束後,由此繼續執行

End Sub
End Class

 

巢狀式If Then Else

Public Class Form1

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim a As Integer '''請注意變數資料型別

a = InputBox("要使用VB嗎? 按(1)表示要,其他數字表示不要", "選擇視窗") '''改變變數資料型別

If a = 1 Then
MsgBox("歡迎使用VB", MsgBoxStyle.Information + MsgBoxStyle.OkOnly, "使用VB") '''若a=1為真(a等於1)則執行此區塊

'''''''''''''''''''''''''''''''''''''''以下是第二層If then Else程式'''''''''''''''''''''''''''''''''''''''''''''''''''''

Dim b As Integer

b = InputBox("要使用外網嗎? 按(2)表示要,其他數字表示不要", "第二層If then Else程式開始")
If b = 2 Then
MsgBox("歡迎使用外網", MsgBoxStyle.Information + MsgBoxStyle.OkOnly, "使用外網") '''若b=1為真(b等於1)則執行此區塊

Else
MsgBox("不使用外網", MsgBoxStyle.Information + MsgBoxStyle.OkOnly, "不使用外網") '''若b=1為假(b不等於1)則執行此區塊

End If
MsgBox("很抱歉,不管你選什麼,你都不能使用外網...QQ", MsgBoxStyle.Information + MsgBoxStyle.OkOnly, "第二層If then Else程式結束") '''以上的if then else 執行結束後,由此繼續執行

'''''''''''''''''''''''''''''''''''''''以上是第二層If then Else程式'''''''''''''''''''''''''''''''''''''''''''''''''''''
Else
MsgBox("不使用VB", MsgBoxStyle.Information + MsgBoxStyle.OkOnly, "不使用VB") '''若a=1為假(a不等於1)則執行此區塊

End If
MsgBox("程式結束", MsgBoxStyle.Information + MsgBoxStyle.OkOnly, "程式結束") '''以上的if then else 執行結束後,由此繼續執行

End Sub
End Class

 


7-4-3 多條件判斷(Select Case)

語法

Select Case 變數

Case 數值1
  程式敘述(若變數符合數值1,則執行此區塊)

Case 數值2
  程式敘述(若變數符合數值2,則執行此區塊)

Case 數值N
  程式敘述

Case Else
  程式敘述(若變數皆不為以上各數值,則執行此區塊)

End Select 結束

ex_p4_28select_case