2.4.4 程序控制結(jié)構(gòu)(2)
3. 循環(huán)結(jié)構(gòu)
循環(huán)結(jié)構(gòu)是指程序中那些指定一次但可以多次執(zhí)行的語句序列。在程序設(shè)計(jì)語言中,有多種不同的循環(huán)結(jié)構(gòu)。一般地,根據(jù)控制循環(huán)的方式可以分為計(jì)數(shù)控制式循環(huán)結(jié)構(gòu)、條件控制式循環(huán)結(jié)構(gòu)、集合控制式循環(huán)結(jié)構(gòu)等。
如果循環(huán)方式是由指定的循環(huán)次數(shù)控制的,這種循環(huán)結(jié)構(gòu)就是計(jì)數(shù)控制式循環(huán)結(jié)構(gòu)。例如,如果某個(gè)循環(huán)指定循環(huán)10次,那么循環(huán)體語句將被重復(fù)執(zhí)行10次。達(dá)到循環(huán)次數(shù)后,循環(huán)結(jié)束。
在計(jì)數(shù)控制式循環(huán)結(jié)構(gòu)中,大多數(shù)語言都支持三表達(dá)式循環(huán)結(jié)構(gòu)是典型的循環(huán)結(jié)構(gòu)。該結(jié)構(gòu)的基本形式如下:
- for (initializer_expression; loop_test_expression; counting_expression)
- /* loop_statements_body */
在上面的結(jié)構(gòu)形式中,第一個(gè)表達(dá)式initializer_expression表示初始值表達(dá)式,該表達(dá)式只是在循環(huán)開始時(shí)計(jì)算一次且僅一次;loop_test_expression表達(dá)式在每次循環(huán)開始時(shí)進(jìn)行計(jì)算,判斷此次循環(huán)是否執(zhí)行;counting_expression表達(dá)式是在每次循環(huán)結(jié)構(gòu)之后進(jìn)行計(jì)算,主要用于修改控制循環(huán)的變量。loop_statements_body表示循環(huán)語句體。表達(dá)式循環(huán)結(jié)構(gòu)的流程圖如圖2-4所示。
圖2-4 三表達(dá)式循環(huán)結(jié)構(gòu)流程圖 |
- for (i = 0; i < 10; i++)
- print i;
除了前面的三表達(dá)式循環(huán)結(jié)構(gòu)之外,計(jì)數(shù)控制式循環(huán)結(jié)構(gòu)還有其他一些形式。下面列出了一些典型的循環(huán)結(jié)構(gòu)形式。在這些循環(huán)結(jié)構(gòu)中,默認(rèn)的循環(huán)變量增量都是1。
- //for-next形式的計(jì)數(shù)控制式循環(huán)
- for i = 1 to N
- loop_statements_body
- next i
- //for-end形式的計(jì)數(shù)控制式循環(huán)
- for i := 1 to N do begin
- loop_statements_body
- end
- //DO-END DO形式的計(jì)數(shù)控制式循環(huán)
- DO i =1, N
- loop_statements_body
- END DO
條件控制式循環(huán)結(jié)構(gòu)是指在滿足循環(huán)條件時(shí)執(zhí)行循環(huán)操作的循環(huán)結(jié)構(gòu)。在這種形式的循環(huán)結(jié)構(gòu)中,有些循環(huán)語句是在循環(huán)開始時(shí)進(jìn)行條件判斷,有些循環(huán)語句則是在循環(huán)結(jié)束時(shí)進(jìn)行條件判斷。有兩種典型的條件控制式循環(huán)結(jié)構(gòu):一種是while循環(huán)結(jié)構(gòu),另一種是do-while循環(huán)結(jié)構(gòu)。
while循環(huán)結(jié)構(gòu)類似于for語句循環(huán)。while循環(huán)由循環(huán)判斷條件和循環(huán)語句體組成。在執(zhí)行時(shí),首先計(jì)算循環(huán)判斷條件,如果該布爾條件的值為true,則執(zhí)行循環(huán)語句體。循環(huán)語句體一直被循環(huán)執(zhí)行,直到循環(huán)判斷條件的值為false為止。這是一種先判斷后執(zhí)行循環(huán)的語句結(jié)構(gòu)。下面是兩個(gè)while循環(huán)語句的示例。第一個(gè)示例是Java、C#語言的示例,第二個(gè)是Visual Basic .NET語言示例。值得注意的是,在Visual Basic .NET語言示例中,雖然也出現(xiàn)了Do關(guān)鍵字,但是由于該循環(huán)方式依然是先判斷后執(zhí)行,因此也屬于while循環(huán)結(jié)構(gòu)。
- //Java語言和C#語言
- int counter = 100;
- int factorial = 1;
- while (counter > 1)
- {
- factorial *= counter--;
- }
- 'Visual Basic.NET語言
- Dim counter As UInteger = 100
- Dim factorial As UInteger = 1
- Do While counter > 0
- factorial *= counter
- counter -= 1
- Loop
與while循環(huán)結(jié)構(gòu)不同的是,do-while循環(huán)結(jié)構(gòu)是先執(zhí)行循環(huán)體語句,然后再進(jìn)行循環(huán)條件判斷。在do-while循環(huán)結(jié)構(gòu)中,首先執(zhí)行循環(huán)體,然后計(jì)算循環(huán)條件,如果循環(huán)條件的值為true,則繼續(xù)執(zhí)行循環(huán)體,一直到循環(huán)條件為false為止。在下面的示例中,可以看到先執(zhí)行循環(huán)然后再進(jìn)行條件判斷的情景。從示例中可以看出,Pascal語言使用repeat-until的形式進(jìn)行循環(huán),這種循環(huán)結(jié)構(gòu)的形式也是先執(zhí)行循環(huán)體再進(jìn)行條件判斷。
- //C和C++語言
- int counter = 100;
- long factorial = 1;
- do {
- factorial *= counter--;
- } while (counter > 0);
- //Pascal語言
- var
- counter, factorial: integer;
- begin
- counter := 100;
- factorial := 1;
- repeat
- factorial := factorial * counter;
- Dec(counter);
- until counter = 0;
- end.
集合控制式循環(huán)結(jié)構(gòu)是一種通過在集合中遍歷集合元素的循環(huán)方式,其典型的語句是foreach。該結(jié)構(gòu)的基本語法形式如下:
- foreach item in collection:
- do something to item
下面是幾個(gè)集合控制式循環(huán)示例。第一個(gè)示例是C#語言的foreach用法,第二個(gè)示例是Perl語言中的示例(變量$x是@arr集合中的元素),第三個(gè)示例是Visual Basic .NET語言示例(使用For Each..Next語句)。
- // C#語言示例
- foreach (type item in set)
- {
- // do something to item
- }
- #Perl語言示例
- foreach $x(@arr) { #$x is the element in @arr
- print $x;
- }
- 'Visual Basic .NET語言示例
- For Each item As type In set
- 'do something to item
- Next item
回書目 上一節(jié) 下一節(jié) |
聯(lián)系客服