第 6 章 迴圈結構

29
6 6 第第第第 第第第第 6-1 6-1 第第第第 第第第第 6-2 6-2 第第第第 第第第第 6-3 6-3 第第第第 第第第第 6-4 While/End While 6-4 While/End While 第第 第第 6-5 6-5 第第第第第第第 第第第第第第第 6-6 6-6 第第第第 第第第第

Upload: anais

Post on 09-Jan-2016

80 views

Category:

Documents


3 download

DESCRIPTION

第 6 章 迴圈結構. 6-1 計數迴圈 6-2 條件迴圈 6-3 巢狀迴圈 6-4 While/End While 迴圈 6-5 跳出與繼續迴圈 6-6 錯誤處理. 6-1 計數迴圈. 6-1-1 For To/Next 迴圈 6-1-2 For Step/Next 迴圈. 6-1-1 For To/Next 迴圈 - 語法. For To/Next 迴圈可以執行固定次數的迴圈,預設每次增加 1 ,如果到達結束條件,就結束迴圈執行。其語法如下所示: For 變數 = 起始值 To 終止值 程式區塊 Next 變數 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 第 6 章  迴圈結構

第第 66 章 章 迴圈結構迴圈結構 6-1 6-1 計數迴圈計數迴圈 6-2 6-2 條件迴圈條件迴圈 6-3 6-3 巢狀迴圈巢狀迴圈 6-4 While/End While6-4 While/End While 迴圈迴圈 6-5 6-5 跳出與繼續迴圈跳出與繼續迴圈 6-6 6-6 錯誤處理錯誤處理

Page 2: 第 6 章  迴圈結構

6-1 6-1 計數迴圈計數迴圈 6-1-1 For To/Next6-1-1 For To/Next 迴圈迴圈 6-1-2 For Step/Next6-1-2 For Step/Next 迴圈迴圈

Page 3: 第 6 章  迴圈結構

6-1-1 For To/Next6-1-1 For To/Next 迴圈迴圈 -- 語法語法 For To/NextFor To/Next 迴圈可以執行固定次數的迴圈,預迴圈可以執行固定次數的迴圈,預

設每次增加設每次增加 11 ,如果到達結束條件,就結束迴圈,如果到達結束條件,就結束迴圈執行。其語法如下所示:執行。其語法如下所示:

For For 變數 變數 = = 起始值 起始值 To To 終止值終止值 程式區塊程式區塊Next Next 變數變數 上述迴圈的「變數」是計數器變數,其範圍是從上述迴圈的「變數」是計數器變數,其範圍是從

「起始值」到「終止值」,每次增加「起始值」到「終止值」,每次增加 11 ,執行迴,執行迴圈的次數是:「終止值」圈的次數是:「終止值」 -- 「起始值」「起始值」 +1+1 次,次,其中其中 NextNext 關鍵字後的「變數」可以省略。關鍵字後的「變數」可以省略。

Page 4: 第 6 章  迴圈結構

6-1-1 For To/Next6-1-1 For To/Next 迴圈迴圈 -- 語法語法 例如:計算例如:計算 66 加到加到 1515 總和的迴圈,如下所總和的迴圈,如下所

示:示:Dim intI, intTotal As IntegerDim intI, intTotal As IntegerFor intI = 6 To 15For intI = 6 To 15 intTotal = intTotal + intIintTotal = intTotal + intINext intINext intI 上述程式碼是從上述程式碼是從 66 加到加到 1515 以計算總和,變以計算總和,變

數數 intIintI 值依序為值依序為 66 、、 77 、、 88 、、 99 、、 .... 和和1515 ,總共執行,總共執行 15-6+115-6+1 共共 1010 次迴圈。次迴圈。

Page 5: 第 6 章  迴圈結構

6-1-1 For To/Next6-1-1 For To/Next 迴圈迴圈 -- 流程圖流程圖

Page 6: 第 6 章  迴圈結構

6-1-2 For Step/Next6-1-2 For Step/Next 迴圈迴圈 For/NextFor/Next 迴圈的增量如果不是迴圈的增量如果不是 11 ,我們可以使用,我們可以使用

StepStep 關鍵字指定每次增加或減少的量。如果使用關鍵字指定每次增加或減少的量。如果使用負數值,表示每次是將計數器變數減掉負數值,表示每次是將計數器變數減掉 StepStep 值,值,此時此時 For Step/NextFor Step/Next 迴圈,如下所示:迴圈,如下所示:

For intI = 100 To 1 Step -1For intI = 100 To 1 Step -1 intTotal = intTotal + intIintTotal = intTotal + intINext intINext intI 上述程式碼倒過來從上述程式碼倒過來從 100100 加到加到 11 ,變數,變數 intIintI 值依值依

序序 100100 、、 9999 、、 9898 、、 9797 、、……、、 33 、、 22 、、 11 共共執行執行 100100 次迴圈,其流程圖和上一節圖例相似,次迴圈,其流程圖和上一節圖例相似,只是每次增加量改為只是每次增加量改為 -1-1 。。

Page 7: 第 6 章  迴圈結構

6-2 6-2 條件迴圈條件迴圈 6-2-1 Do While/Loop6-2-1 Do While/Loop 迴圈迴圈 6-2-2 Do Until/Loop6-2-2 Do Until/Loop 迴圈迴圈 6-2-3 Do/Loop While6-2-3 Do/Loop While 迴圈迴圈 6-2-4 Do/Loop Until6-2-4 Do/Loop Until 迴圈迴圈

Page 8: 第 6 章  迴圈結構

6-2-1 Do While/Loop6-2-1 Do While/Loop 迴圈迴圈 -- 說明說明 Do/LoopDo/Loop 迴圈可以使用迴圈可以使用 WhileWhile 條件在迴圈開頭檢條件在迴圈開頭檢

查,開頭檢查的目的是檢查是否允許進入迴圈,查,開頭檢查的目的是檢查是否允許進入迴圈,當當 WhileWhile 的測試條件成立才能進入迴圈。例如:的測試條件成立才能進入迴圈。例如:計算計算 11 萬元萬元 55 年複利年複利 18%18% 的本利和,如下所示:的本利和,如下所示:

intI = 1 intI = 1 dblTotal = 10000dblTotal = 10000dblRate = 0.18dblRate = 0.18Do While intI <= 5Do While intI <= 5 dblTotal += dblTotal * dblRatedblTotal += dblTotal * dblRate intI = intI + 1intI = intI + 1LoopLoop

Page 9: 第 6 章  迴圈結構

6-2-1 Do While/Loop6-2-1 Do While/Loop 迴圈迴圈 -- 流程圖流程圖

Page 10: 第 6 章  迴圈結構

6-2-2 Do Until/Loop6-2-2 Do Until/Loop 迴圈迴圈 -- 說明說明 Do/LoopDo/Loop 迴圈如果使用迴圈如果使用 UntilUntil 條件在迴圈開始檢條件在迴圈開始檢

查,迴圈是執行到條件成立為止,如果條件不成查,迴圈是執行到條件成立為止,如果條件不成立就進入迴圈。例如:計算立就進入迴圈。例如:計算 11 萬元萬元 55 年複利年複利 18%18%的本利和,如下所示:的本利和,如下所示:

intI = 1 intI = 1 dblTotal = 10000dblTotal = 10000dblRate = 0.18dblRate = 0.18Do Until intI > 5Do Until intI > 5 dblTotal += dblTotal * dblRatedblTotal += dblTotal * dblRate intI = intI + 1intI = intI + 1LoopLoop

Page 11: 第 6 章  迴圈結構

6-2-2 Do Until/Loop6-2-2 Do Until/Loop 迴圈迴圈 -- 流程流程圖圖

Page 12: 第 6 章  迴圈結構

6-2-3 Do/Loop While6-2-3 Do/Loop While 迴圈迴圈 -- 說明說明 Do/LoopDo/Loop 迴圈可以使用迴圈可以使用 WhileWhile 條件在迴圈結尾檢條件在迴圈結尾檢

查,此時查,此時 Do/LoopDo/Loop 迴圈至少會執行一次。例如:迴圈至少會執行一次。例如:計算計算 11 萬元萬元 55 年複利年複利 18%18% 的本利和,如下所示:的本利和,如下所示:

intI = 1 intI = 1

dblTotal = 10000dblTotal = 10000

dblRate = 0.18dblRate = 0.18

DoDo

dblTotal += dblTotal * dblRatedblTotal += dblTotal * dblRate

intI = intI + 1intI = intI + 1

Loop While intI <= 5Loop While intI <= 5

Page 13: 第 6 章  迴圈結構

6-2-3 Do/Loop While6-2-3 Do/Loop While 迴圈迴圈 -- 流程圖流程圖

Page 14: 第 6 章  迴圈結構

6-2-4 Do/Loop Until6-2-4 Do/Loop Until 迴圈迴圈 -- 說明說明 Do/LoopDo/Loop 迴圈如果使用迴圈如果使用 UntilUntil 條件在迴圈結尾檢條件在迴圈結尾檢

查,迴圈也一樣至少執行一次。例如:計算查,迴圈也一樣至少執行一次。例如:計算 11 萬萬元元 55 年複利年複利 18%18% 的本利和,如下所示:的本利和,如下所示:

intI = 1 intI = 1

dblTotal = 10000dblTotal = 10000

dblRate = 0.18dblRate = 0.18

DoDo

dblTotal += dblTotal * dblRatedblTotal += dblTotal * dblRate

intI = intI + 1intI = intI + 1

Loop Until intI > 5Loop Until intI > 5

Page 15: 第 6 章  迴圈結構

6-2-4 Do/Loop Until6-2-4 Do/Loop Until 迴圈迴圈 -- 流程流程圖圖

Page 16: 第 6 章  迴圈結構

6-3 6-3 巢狀迴圈巢狀迴圈 6-3-1 For/Next6-3-1 For/Next 巢狀迴圈巢狀迴圈 6-3-2 6-3-2 混合的巢狀迴圈混合的巢狀迴圈

Page 17: 第 6 章  迴圈結構

6-3-1 For/Next6-3-1 For/Next 巢狀迴圈巢狀迴圈 -- 說明說明 For/NextFor/Next 巢狀迴圈是在巢狀迴圈是在 For/NextFor/Next 迴圈中,擁有迴圈中,擁有

其他其他 For/NextFor/Next 迴圈(因為不用自行處理計數器迴圈(因為不用自行處理計數器變數),例如:二層巢狀迴圈,如下所示:變數),例如:二層巢狀迴圈,如下所示:

' ' 第一層第一層For intI = 1 To 9For intI = 1 To 9 ' ' 第二層第二層 For intJ = 1 To 9For intJ = 1 To 9 ……… ……… Next intJNext intJ ……… ………Next intINext intI

Page 18: 第 6 章  迴圈結構

6-3-1 For/Next6-3-1 For/Next 巢狀迴圈巢狀迴圈 -- 執行次數執行次數 巢狀迴圈共有兩層,在第巢狀迴圈共有兩層,在第 11 層的層的 For/NextFor/Next

迴圈執行迴圈執行 99 次,第二層次,第二層 For/NextFor/Next 迴圈如果迴圈如果都執行都執行 99 次,兩層迴圈總共可執行次,兩層迴圈總共可執行 8181 次,次,如下表所示:如下表所示:

第一層的 intI值 第二層的 intJ值 離開迴圈的 intI值1 1 2 3 4 5 6 7 8 9 12 1 2 3 4 5 6 7 8 9 23 1 2 3 4 5 6 7 8 9 3

………9 1 2 3 4 5 6 7 8 9 9

Page 19: 第 6 章  迴圈結構

6-3-2 6-3-2 混合的巢狀迴圈混合的巢狀迴圈 Visual BasicVisual Basic 巢狀迴圈可以混合巢狀迴圈可以混合 For/NextFor/Next 和和

Do/LoopDo/Loop 迴圈結構,例如:在迴圈結構,例如:在 For/NextFor/Next 迴圈內迴圈內擁有擁有 Do/Loop UntilDo/Loop Until 迴圈,如下所示:迴圈,如下所示:

‘ ‘ 第一層第一層For intI = 1 To 9For intI = 1 To 9 ' ' 第二層第二層 intJ = 1intJ = 1 DoDo …………… …………… intJ += 1intJ += 1 Loop Until intJ > 9Loop Until intJ > 9Next intINext intI

Page 20: 第 6 章  迴圈結構

6-4 While/End While6-4 While/End While 迴圈迴圈 -- 說明說明 While/End WhileWhile/End While 迴圈源於舊版迴圈源於舊版 VB6VB6 的的

While/WendWhile/Wend 迴圈,它是一種在迴圈開頭檢查的迴圈,它是一種在迴圈開頭檢查的迴圈,例如:從迴圈,例如:從 11 加到加到 1010 的程式碼,如下所示:的程式碼,如下所示:

Dim total As Integer = 0Dim total As Integer = 0

Dim counter As Integer = 1Dim counter As Integer = 1

While counter <= 10While counter <= 10

total += countertotal += counter

counter += 1counter += 1

End WhileEnd While

Page 21: 第 6 章  迴圈結構

6-4 While/End While6-4 While/End While 迴圈迴圈 -- 階層函階層函數數

在本節的範例程式是說明迴圈在數學運算的運用,在本節的範例程式是說明迴圈在數學運算的運用,可以計算階層函數的值,階層函數可以計算階層函數的值,階層函數 N!N! ,例如:準,例如:準備計算備計算 4!4! 的值,從上述定義的值,從上述定義 N>0N>0 ,可以使用,可以使用 N!N!定義的第二條計算階層函數定義的第二條計算階層函數 4!4! 的值,如下所示:的值,如下所示:

4!=4*3*2*1=244!=4*3*2*1=24

Page 22: 第 6 章  迴圈結構

6-4 While/End While6-4 While/End While 迴圈迴圈 -- 階層函階層函數的迴圈數的迴圈

換句話說,我們可以使用迴圈來計算階層換句話說,我們可以使用迴圈來計算階層函數的值,以函數的值,以 While/End WhileWhile/End While 迴圈為例,迴圈為例,如下所示:如下所示:

Dim total As Integer = 1Dim total As Integer = 1Dim counter As Integer = 4Dim counter As Integer = 4While counter >= 1While counter >= 1 total *= countertotal *= counter counter = counter - 1counter = counter - 1End WhileEnd While

Page 23: 第 6 章  迴圈結構

6-5 6-5 跳出與繼續迴圈跳出與繼續迴圈 6-5-1 Exit For6-5-1 Exit For 跳出迴圈跳出迴圈 6-5-2 Exit Do6-5-2 Exit Do 跳出迴圈跳出迴圈 6-5-3 Continue6-5-3 Continue 繼續迴圈繼續迴圈

Page 24: 第 6 章  迴圈結構

6-5-1 Exit For6-5-1 Exit For 跳出迴圈跳出迴圈 For/NextFor/Next 迴圈如果尚來到達結束條件時,就可以迴圈如果尚來到達結束條件時,就可以

使用使用 Exit ForExit For 強迫跳出強迫跳出 For/NextFor/Next 迴圈,馬上結迴圈,馬上結束迴圈的執行,如下所示:束迴圈的執行,如下所示:

For intI = 1 To 100 Step 1For intI = 1 To 100 Step 1

… …

If amount <= 0 ThenIf amount <= 0 Then

Exit ForExit For

End IfEnd If

… …

NextNext

Page 25: 第 6 章  迴圈結構

6-5-2 Exit Do6-5-2 Exit Do 跳出迴圈跳出迴圈 對於對於 Do/LoopDo/Loop 迴圈來說,我們需要自行確認迴圈迴圈來說,我們需要自行確認迴圈

能夠結束。換句話說,如果沒有使用能夠結束。換句話說,如果沒有使用 WhileWhile 或或UntilUntil 在迴圈頭尾測試條件,單純在迴圈頭尾測試條件,單純 Do/LoopDo/Loop 迴圈迴圈是一個無窮迴圈。是一個無窮迴圈。

如果如果 Do/LoopDo/Loop 迴圈沒有不指定終止條件,我們可迴圈沒有不指定終止條件,我們可以使用以使用 Exit DoExit Do 來結束迴圈,如下所示:來結束迴圈,如下所示:

DoDo … ….. If str = "" ThenIf str = "" Then Exit DoExit Do End IfEnd If … …..LoopLoop

Page 26: 第 6 章  迴圈結構

6-5-3 Continue6-5-3 Continue 繼續迴圈繼續迴圈 Visual Basic 2005Visual Basic 2005 新增新增 ContinueContinue 關鍵字,可以讓我們關鍵字,可以讓我們

不用執行完整個迴圈的程式碼,就可以馬上執行下一次迴不用執行完整個迴圈的程式碼,就可以馬上執行下一次迴圈。圈。 Continue ForContinue For 可以馬上執行下一次可以馬上執行下一次 For/NextFor/Next 迴圈;迴圈;Continue DoContinue Do 繼續下一次繼續下一次 Do While/LoopDo While/Loop 迴圈的執行。迴圈的執行。例如:計算指定範圍的奇數和,如下所示:例如:計算指定範圍的奇數和,如下所示:

Do While i < intMaxDo While i < intMax i = i + 1i = i + 1 If i Mod 2 = 0 ThenIf i Mod 2 = 0 Then Continue DoContinue Do End IfEnd If total = total + itotal = total + iLoopLoop

Page 27: 第 6 章  迴圈結構

6-6 6-6 錯誤處理錯誤處理 -- 說明說明 錯誤處理是指在程式執行時,如果發生不錯誤處理是指在程式執行時,如果發生不

正常執行狀態時,我們可以在程式碼處理正常執行狀態時,我們可以在程式碼處理這些錯誤。錯誤處理的目的是為了讓程式這些錯誤。錯誤處理的目的是為了讓程式能夠更「強壯」(能夠更「強壯」( RobustRobust )。)。

當程式遇到不尋常情況,也不會造成程式當程式遇到不尋常情況,也不會造成程式「崩潰」(「崩潰」( CrashingCrashing ),進而導致整個系),進而導致整個系統當機的情況。統當機的情況。

Page 28: 第 6 章  迴圈結構

6-6 6-6 錯誤處理錯誤處理 -- 架構架構 Visual Basic 2005Visual Basic 2005 提供結構化的錯誤處理敘述,提供結構化的錯誤處理敘述,

即即 Try/End TryTry/End Try ,其語法如下所示:,其語法如下所示:Try Try ' ' 測試的錯誤程式碼測試的錯誤程式碼 程式區塊程式區塊Catch e As ExceptionCatch e As Exception ' ' 錯誤處理的程式碼錯誤處理的程式碼 程式區塊程式區塊FinallyFinally 程式區塊程式區塊End TryEnd Try

Page 29: 第 6 章  迴圈結構

6-6 6-6 錯誤處理錯誤處理 -- 架構說明架構說明 TryTry 程式區塊:在程式區塊:在 TryTry 和和 CatchCatch 關鍵字間的程式關鍵字間的程式

區塊是區塊是 Visual BasicVisual Basic 需要執行錯誤處理的程式碼,需要執行錯誤處理的程式碼,也就是預期可能產生錯誤的程式碼。也就是預期可能產生錯誤的程式碼。

CatchCatch 程式區塊:如果程式區塊:如果 TryTry 程式區塊的程式碼發程式區塊的程式碼發生錯誤,在生錯誤,在 CatchCatch 到到 FinallyFinally 關鍵字間的程式區關鍵字間的程式區塊將會傳入參數塊將會傳入參數 ee 的的 ExceptionException 例外物件,可以例外物件,可以在此區塊顯示錯誤資訊,或是建立錯誤處理的補在此區塊顯示錯誤資訊,或是建立錯誤處理的補救程式碼。救程式碼。

FinallyFinally 程式區塊:選擇性的程式區塊,不論錯誤程式區塊:選擇性的程式區塊,不論錯誤是否產生,都會執行此區塊的程式碼,通常是用是否產生,都會執行此區塊的程式碼,通常是用來作為善後用途的程式碼。來作為善後用途的程式碼。