麻辣家族討論版版's Archiver

小誌 發表於 2010-5-10 19:06

(PHP+IIS+MsSQL教學第9篇)重複執行的迴圈敘述

[color=DarkOrange][b][size=5]重複執行的迴圈敘述[/size][/b][/color]
所謂迴圈(Loop)就是能讓某一段的程式敘述能夠重複執行許多次的流程控制敘述,在本章節中,將介紹數個常用來控制程式的迴圈敘述。

[color=Green][b][size=4]計次執行的for迴圈敘述[/size][/b][/color]
當我們知道迴圈必須執行的次數時,for敘述就是最好的迴圈敘述,要使用For-Next敘述就必須使用一個控制變數來決定For-Next敘述要執行的次數,其格式如下:
for迴圈敘述區塊格式[code]for  (計次變數=初值;終止條件;計次變量)
       {
          敘述區塊;
       }[/code]由上列格式中可得知,for敘述可以幫我們建立一個迴圈,我們只要指定變數起始值、變數的計次變量與終止條件就可以決定迴圈重複的次數。
[attach]227[/attach]

例如:[code]for ($X=0 ; $X<10 ; $X++)
       {
          $Y=$Y+$X;
        }[/code]在上例中,最重要的一個地方就是變數X,它在迴圈中是扮演一個計數器的角色,而計數範圍從0到9,所以在『{…}』中的敘述區塊將會被執行10次,因此我們可對for敘述分析如下。
[list=1]
[*]第一次執行迴圈時,變數X被指定為起始值。
[*]執行迴圈前,變數X都會先進行是否超過終止值的檢驗,若超過,則結束迴圈,否則就繼續執行迴圈內的敘述。
[*]執行過迴圈後,變數X的值將會加上步進值(1)。
[/list]

[color=Red][b]提示[/b][/color]
『$X++』就是「$X=$X+1」的意思,每執行過一次迴圈,變數X的值就會加1。
[attach]228[/attach]

for敘述不僅可以是遞增迴圈,也可以是遞減增迴圈,其格式如下:
For遞減迴圈敘述區塊格式[code]for  (計次變數=初值;終止條件;負計次變量)
       {
          敘述區塊;
       }[/code]也就說遞減迴圈for敘述的起始值必須大於終止值,而判斷是否脫離迴圈的敘述就變成:計次變數值 < 終止值,例如:[code]for ($X=10 ; $X<0 ; $X--)
       {
          $Y=$Y+$X;
        }[/code]for敘述的步進值(Step)的設定,是讓迴圈敘述跳要執行的靈魂,除終止值條件會影響迴圈結果外,步進值(Step)的設定亦十分重要,例如:[code]for ($X=1 ; $X<10 ; $X+=2)
       {
          $Y=$Y+$X;
        }[/code]請問您:上例for迴圈敘述結束後,變數Y等於多少?絕對不是55喔!
在我們這個例子中,變數X被指定為起始值1,也就說變數X一開始是1,可是每執行一次迴圈後變數X並不是加1喔!而是加2,所以Y=1+3+5+7+9,答案應該是25。
[attach]229[/attach]

小誌 發表於 2010-5-10 19:13

[color=Green][size=4][b]巢狀For迴圈[/b][/size][/color]
什麼是巢狀For迴圈?就是For迴圈內又有For迴圈!例如下圖所示:
[attach]230[/attach][code]<?
for ($X=1 ; $X<=5 ; $X++)
  {
    for ($Y=1 ; $Y<=$X ; $Y++)
     {
      echo $Y;
     }
    echo "<br>";
  }
?>[/code]當程式執行後會在網頁中列印出下圖:
[attach]231[/attach]

[color=Red][b]提示[/b][/color]
連續使用echo()函數輸出資料,則輸出的資料會連成一列,故在內迴圈執行完畢後再次利用echo()函數輸出一個「<BR>」換行標籤跳至下一空白列。


[color=Magenta][b][size=4]實做學習[/size][/b][/color]
請試著在網頁中列印出九九乘法表:範例光碟test03_06.php[code]<?
for ($x=1; $x<10; $x++)
{
  for ($y=1; $y<10; $y++)
  {
  echo($x . " * " . $y . " = " . $x*$y );
  }
   echo "<br>";
}
?>[/code]當程式執行後會在網頁中列印出下圖:
[attach]232[/attach]

天啊!圖上網頁中的九九乘法表太難看了吧!歪歪斜斜的沒有標齊,這時候,我們不妨試著修改程式敘述,加入表格的HTML標籤,使輸出在網頁中的九九乘法表能標齊對正。
[attach]233[/attach][code]<HTML>
<HEAD>
<TITLE>test03_07</TITLE>
</HEAD>
<BODY>
<TABLE Border=1 width=100%>
<?
for ($x=1; $x<10; $x++)
{
  echo "<TR Align=Center>";
  for ($y=1; $y<10; $y++)
  {
  echo ("<TD>" . $x . " * " . $y . " = " . $x*$y . "</TD>");
  }
   echo "<TR>";
}
?>
</TABLE>
</BODY></HTML>
[/code]

小誌 發表於 2010-5-10 19:17

[color=Green][b][size=4]while迴圈敘述[/size][/b][/color]
當我們知道迴圈必須執行的次數時,for敘述就是最好的迴圈敘述,但是若不知道迴圈必須執行的次數呢,那我們就可以使用while迴圈敘述,其格式如下:
While迴圈敘述區塊格式[code] While  (條件式)
{
       要重複執行的敘述區塊;
}[/code]while迴圈敘述是由保留字while開始,在其後是一個條件式,而這個條件式則是一個布林值運算式,如果這個條件式成立(布林值運算結果為True),那麼在while迴圈敘述裡(敘述區塊)的程式碼就會執行至結尾,然後再判斷條件式,當這個條件式不再成立時,while迴圈敘述就會停止執行。

現在我們來比較一下For與While敘述:計算1加至10:
for寫法:[code]for ($X=0 ; $X<10 ; $X++)
       {
          $Y=$Y+$X;
        }[/code]while寫法:[code]$X=1;
While ($X <= 10)
{
      $Y=$Y+$X;
       $X=$X+1;
}[/code]看完這兩個敘述的比較,您是不是發現:同樣的功能,但是While敘述似乎麻煩多了,不過,若不知道迴圈會執行幾次,還是While敘述比較適合,如下例:

[color=Magenta][size=4][b]實做學習[/b][/size][/color]
請設計一PHP程式,計算6561是3的幾次方,並將答案顯示於網頁中。
[attach]234[/attach][code]<?
$test=6561;
$ans=0;
while ($test>1)
{
    $test=$test/3;
    $ans=$ans+1;       
}
echo ("6561是3的" . $ans . "次方");
?>
[/code]

小誌 發表於 2010-5-10 19:21

[color=Green][size=4][b]do-while迴圈敘述[/b][/size][/color]
while敘述是在迴圈一開始的時候就先判斷條件式,而do-while迴圈敘述則是先執行迴圈內的敘述區塊,直到迴圈的結尾才進行條件式的判斷。
[attach]235[/attach]

條件式成立(布林值運算結果為False)時,那麼在Do While迴圈敘述裡(敘述區塊)的程式碼就會執行至結尾,然後再判斷條件式,當這個條件式不成立時,Do –While迴圈敘述就會停止執行。
Do While-Loop迴圈敘述區塊格式[code] Do
{  
       要重複執行的敘述區塊;
} While (條件式);[/code][b][color=Red]提示[/color][/b]
While迴圈敘述與是在迴圈一開始的時候就先判斷條件式,然後再決定迴圈是否繼續進行,而Do-While迴圈敘述則是先執行迴圈內的敘述區塊,直到迴圈的結尾才進行條件式的判斷來決定迴圈是否繼續。
就條件式判斷的結果來論,While迴圈敘述與Do-While迴圈敘述是在條件式「成立(True)」時才重複迴圈內的程式敘述。

頁: [1]

麻辣家族討論版版為 麻辣學園 網站成員  由 昱得資訊工作室 © Since 1993 所提供