循環語句
循環語句
在不少實際問題中有許多具有規律性的重複操作,因此在程序中就需要重複執行某些語句。一組被重複執行的語句稱之為循環體,能否繼續重複,決定循環的終止條件。循環結構是在一定條件下反覆執行某段程序的流程結構,被反覆執行的程序被稱為循環體。循環語句是由循環體及循環的終止條件兩部分組成的。
其中最簡單的循環語句自然來源於vb語句。(即visual basic)
在C語言中,有三種類型的循環語句:for語句、while語句和do While語句。分別介紹如下:
for
• for為當型循環語句,它很好地體現了正確表達循環結構應注意的三個問題:
⑴控制變數的初始化。
⑵循環的條件。
⑶循環控制變數的更新。
• for表達式
表達式1:一般為賦值表達式,給控制變數賦初值。
表達式2:關係表達式或邏輯表達式,循環控制條件。
表達式3:一般為賦值表達式,給控制變數增量或減量。
語句:循環體,當有多條語句時,必須使用複合語句。
• for語句格式為:
for(表達式1;表達式2;表達式3)語句:
• for語句執行過程如下:
循環語句
②判別表達式2是否滿足給定條件,若其值非0,滿足循環條件,則執行循環體內語句,然後執行表達式3,進入第二次循環,再判別表達式2……;否則判斷表達式2的值為0,不滿足條件,就終止for循環,執行循環體后語句。
for語句語法流程如下圖所示:
• 例題:
編譯並執行后,屏幕顯示:
nu=20100
在程序中,for語句小括弧內的三個表達式分別為:n=1;n<=200;n++。表達式1,n=1是給n賦初值,表達式2是關係表達式,n小於等於200時,表達式都為真,則執行循環體內的語句nu+=n;(即nu=nu+n;),然後執行表達式3(n++),進入下一輪循環;若n大於200時,表達式2為假,則終止循環,執行printf()語句,在屏幕上列印出:nu=20100。
• 幾種特殊for語句的用法:
for括弧內3個表達式都可以省略,其中省略中間的表達表示無條件循環。
while
►while結構循環為當型循環(when type loop),一般用於不知道循環次數的情況。維持循環的是一個條件表達式,條件成立執行循環體,條件不成立退出循環。
• while語句格式為:
循環語句
► 循環體
►每次執行循環體前都要對條件表達式進行判斷。
這裡的表達式是循環能否繼續下去的條件,而語句是循環體。只要表達式為真,則執行循環體內語句。否則終止循環,執行循環體外語句。
• 例題:f7_2.c
編譯並執行結果,屏幕顯示:
請輸入兩個非負整數:
若從鍵盤輸入:150 35並回車,屏幕顯示:
最大公約數是:5
程序中,while循環體內有三條語句,應用大括弧括起來,表示一個語句塊。當表達式v!=0為真時,程序循環執行循環體內三條語句,直到v!=0為假時,終止循環,執行printf()語句,在屏幕上顯示最大公約數。
do while
►do…while語句結構為直到型循環(until type loop),也用於不知道循環次數的情況。do…while和while的區別在於do…while結構是執行完一遍循環體再判斷條件。
• do while語句格式為:
循環語句
► 循環體
►while(條件表達式);
►每執行完一次循環體,do…while結構都要判斷一下條件表達式。
程序進入do while循環后,先執行循環體內語句,然後判斷表達式的真假,若為真則進行下一次循環,否則為假則終止循環。該循環語句的特點是,表達式為假時也執行一次循環體內語句。
• do while語句語法流程如下圖所示:
總的說來,for和while循環是在頂上測試循環終止條件,而do while循環是在之後,在底部進行測試所以循環體至少要執行一次。
利用do while循環的特點,可寫出菜單程序。
• 例題:
while與do while的區別
►假設條件表達式一開始就是不成立的。
►while結構的循環體一遍也不會運行。
►do…while結構的循環體運行了一遍。
本程序執行的過程是,通過do while循環體內的第一條語句ch=getchar ()接收用戶的選擇,第二條語句switch判斷用戶輸入是否是‘1’,‘2’,‘3’,若不是則顯示"選擇錯!"。程序利用do while語句的特點,首先執行循環體內語句一次,然後用表達式ch!=‘1’&&ch!=‘2’&& ch!=‘3’來循環判斷用戶的鍵盤輸入,只要不是‘1’、‘2’、‘3’,程序總是在這裡循環。
這個程序實例只是為了說明do while語句用法,實際應用中的菜單程序,要在每條case語句冒號後面寫出要調用的相應函數。
循環語句
循環語句就是根據循環條件反覆執行相同的語句,直到循環條件不成立。
在VisualBasic\ VBScript \ VBA 中可使用下列循環語句:
Do...Loop:當(或直到)條件為 True 時循環。
While...Wend:當條件為 True 時循環。
..Next:指定循環次數,使用計數器重複運行語句。
1.
Do...Loop:當(或直到)條件為 True 時循環。
2.
While...Wend:當條件為 True 時循環。
3.
..Next:指定循環次數,使用計數器重複運行語句。
For Each...Next:對於集合中的每項或數組中的每個元素,重複執行一組語句。
Do
可以使用 Do...Loop 語句多次(次數不定)運行語句塊。當條件為 True 時或條件變為 True 之前,重複執行語句塊。
當條件為 True 時重複執行語句
While 關鍵字用於檢查 Do...Loop 語句中的條件。有兩種方式檢查條件:在進入循環之前檢查條件(如下面的 ChkFirstWhile 示例);或者在循環至少運行完一次之後檢查條件(如下面的 ChkLastWhile 示例)。在 ChkFirstWhile 過程中,如果 myNum 的初始值被設置為 9 而不是 20,則永遠不會執行循環體中的語句。在 ChkLastWhile 過程中,循環體中的語句只會執行一次,因為條件在檢查時已經為 False。
Sub ChkFirstWhile()
Dim counter,myNum
counter = 0
myNum = 20
Do While myNum > 10
myNum = myNum - 1
counter = counter + 1
Loop
MsgBox 循環重複了 & counter & 次。
End Sub
Sub ChkLastWhile()
Dim counter,myNum
counter = 0
myNum = 9
Do
myNum = myNum - 1
counter = counter + 1
Loop While myNum > 10
MsgBox 循環重複了 & counter & 次。
End Sub
重複執行語句直到條件變為 True
Until 關鍵字用於檢查 Do...Loop 語句中的條件。有兩種方式檢查條件:在進入循環之前檢查條件(如下面的 ChkFirstUntil 示例);或者在循環至少運行完一次之後檢查條件(如下面的 ChkLastUntil 示例)。只要條件為 False,就會進行循環。
Sub ChkFirstUntil()
Dim counter,myNum
counter = 0
myNum = 20
Do Until myNum = 10
myNum = myNum - 1
counter = counter + 1
Loop
MsgBox 循環重複了 & counter & 次。
End Sub
Sub ChkLastUntil()
Dim counter,myNum
counter = 0
myNum = 1
Do
myNum = myNum + 1
counter = counter + 1
Loop Until myNum = 10
MsgBox 循環重複了 & counter & 次。
End Sub
退出循環
Exit Do 語句用於退出 Do...Loop 循環。因為通常只是在某些特殊情況下要退出循環(例如要避免死循環),所以可在 If...Then...Else 語句的 True 語句塊中使用 Exit Do 語句。如果條件為 False,循環將照常運行。
在下面的示例中,myNum 的初始值將導致死循環。If...Then...Else 語句檢查此條件,防止出現死循環。
Sub ExitExample()
Dim counter,myNum
counter = 0
myNum = 9
Do Until myNum = 10
myNum = myNum - 1
counter = counter + 1
If myNum < 10 Then Exit Do
Loop
MsgBox 循環重複了 & counter & 次。
End Sub
While..Wend
Wend 語句是為那些熟悉其用法的用戶提供的。但是由於 While...Wend 缺少靈活性,所以建議最好使用 Do...Loop 語句。
1.
Wend 語句是為那些熟悉其用法的用戶提供的。但是由於 While...Wend 缺少靈活性,所以建議最好使用 Do...Loop 語句。
Next
Next 語句用於將語句塊運行指定的次數。在循環中使用計數器變數,該變數的值隨每一次循環增加或減少。
1.
Next 語句用於將語句塊運行指定的次數。在循環中使用計數器變數,該變數的值隨每一次循環增加或減少。
例如,下面的示例將過程 MyProc 重複執行 50 次。For 語句指定計數器變數x 及其起始值與終止值。Next 語句使計數器變數每次加 1。
Sub DoMyProc50Times()
For...Next循環語句
MyProc
Next
End Sub
關鍵字Step 用於指定計數器變數每次增加或減少的值。在下面的示例中,計數器變數j 每次加 2。循環結束后,total 的值為 2、4、6、8 和 10 的總和。
Sub TwosTotal()
Dim j,total
For j = 2 To 10 Step 2
total = total + j
Next
MsgBox 總和為 & total &;。
End Sub
要使計數器變數遞減,可將 Step 設為負值。此時計數器變數的終止值必須小於起始值。在下面的示例中,計數器變數myNum 每次減 2。循環結束后,total 的值為 16、14、12、10、8、6、4 和 2 的總和。
Sub NewTotal()
Dim myNum,total
For myNum = 16 To 2 Step -2
total = total + myNum
Next
MsgBox 總和為 & total &;。
End Sub
Exit For 語句用於在計數器達到其終止值之前退出 For...Next 語句。因為通常只是在某些特殊情況下(例如在發生錯誤時)要退出循環,所以可以在 If...Then...Else 語句的 True 語句塊中使用 Exit For 語句。如果條件為 False,循環將照常運行。
使用 For Each...Next
For Each...Next 循環與 For...Next 循環類似。For Each...Next 不是將語句運行指定的次數,而是對於數組中的每個元素或對象集合中的每一項重複一組語句。這在不知道集合中元素的數目時非常有用。
在以下示例中,Dictionary 對象的內容用於將文本分別放置在多個文本框中:
易語言循環語句分三種計次循環、判斷循環和循環判斷
計次循環
循環體內的命令重複執行指定的次數。提供的整數參數值決定將重複執行的次數。
計次循環首 (循環次數, 已循環次數變數)
計次循環尾 ()
判斷循環
根據提供的邏輯參數的值,來決定是否進入循環。如果提供的邏輯參數值為真,程序順序執行下一條命令進入循環,否則跳轉到本命令所對應的“判斷循環尾”命令的下一條命令處以跳出循環。
判斷循環首(條件)
判斷循環尾 ()
循環判斷
循環判斷尾為循環的條件所在,根據提供的邏輯參數的值,來決定是否返回到循環首部繼續進行循環。如果提供的邏輯參數值為真,程序返回到對應的“循環判斷首”命令處繼續進行循環,否則順序執行下一條命令退出本程序循環。
循環判斷首 ()
循環判斷尾 (條件)