Board logo

標題: 3-3 重複執行的迴圈敘述(3-3-1 計次執行的for迴圈敘述) [打印本頁]

作者: 小誌    時間: 2011-4-18 18:10     標題: 3-3 重複執行的迴圈敘述(3-3-1 計次執行的for迴圈敘述)

3-3   重複執行的迴圈敘述
所謂迴圈(Loop)就是能讓某一段的程式敘述能夠重複執行許多次的流程控制敘述,在本章節中,將介紹數個常用來控制程式的迴圈敘述。
作者: 小誌    時間: 2011-4-18 18:12

3-3-1   計次執行的for迴圈敘述
當我們知道迴圈必須執行的次數時,for敘述就是最好的迴圈敘述,要使用For-Next敘述就必須使用一個控制變數來決定For-Next敘述要執行的次數,其格式如下:
for迴圈敘述區塊格式
  1. for  (計次變數=初值;終止條件;計次變量)
  2.        {
  3.           敘述區塊;
  4.        }
複製代碼
由上列格式中可得知,for敘述可以幫我們建立一個迴圈,我們只要指定變數起始值、變數的計次變量與終止條件就可以決定迴圈重複的次數。
[attach]5471[/attach]
圖3-7  for敘述流程圖。
例如
  1. for ($X=0 ; $X<10 ; $X++)
  2.        {
  3.           $Y=$Y+$X;
  4.         }
複製代碼
在上例中,最重要的一個地方就是變數X,它在迴圈中是扮演一個計數器的角色,而計數範圍從0到9,所以在『{…}』中的敘述區塊將會被執行10次,因此我們可對for敘述分析如下。


提示『$X++』就是「$X=$X+1」的意思,每執行過一次迴圈,變數X的值就會加1。
作者: 小誌    時間: 2011-4-18 18:14

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

實做學習5:(範例光碟test03_05.php,test03_05_show.php)
讓瀏覽者指定N值,然後計算1x2x……x(N-1)xN,並將計算結果顯示於網頁中。

test03_05_show.php
  1. <?
  2. $ans=1;
  3. $num=0;
  4. if ($_POST["num"] > 0)
  5.   {
  6.     $num=$_POST["num"];
  7.     for ($X=1 ; $X<=$num ; $X++)
  8.      {
  9.       $ans=$ans*$X;
  10.      }
  11.     echo "1乘到 $num 答案是:$ans";
  12.   }
  13. ?>
複製代碼
我們先將變數ans的值設為1,所以「ans= ans *1*2x…*N-1*N」等於「ans= 1*2*…N-1*N」,因此「ans= 1*2*…N-1*N」就等於「ans= 1」、「ans= ans*2」、「ans= ans*3」…「ans= ans*N」連續運算的結果,所以使用for敘述將是最佳選擇。
作者: 小誌    時間: 2011-4-18 18:17

巢狀For迴圈
什麼是巢狀For迴圈?就是For迴圈內又有For迴圈!例如下圖所示:
[attach]5472[/attach]
圖3-11   巢狀for迴圈。
  1. <?
  2. for ($X=1 ; $X<=5 ; $X++)
  3.   {
  4.     for ($Y=1 ; $Y<=$X ; $Y++)
  5.      {
  6.       echo $Y;
  7.      }
  8.     echo "<br>";
  9.   }
  10. ?>
複製代碼
當程式執行後會在網頁中列印出下圖:
[attach]5473[/attach]
圖3-12   程式結果(範例ex03_07.php)。


提示連續使用echo()函數輸出資料,則輸出的資料會連成一列,故在內迴圈執行完畢後再次利用echo()函數輸出一個「<BR>」換行標籤跳至下一空白列。
作者: 小誌    時間: 2011-4-18 18:19

實做學習6
請試著在網頁中列印出九九乘法表:範例光碟test03_06.php
  1. <?
  2. for ($x=1; $x<10; $x++)
  3. {
  4.   for ($y=1; $y<10; $y++)
  5.   {
  6.   echo($x . " * " . $y . " = " . $x*$y );
  7.   }
  8.    echo "<br>";
  9. }
  10. ?>
複製代碼
當程式執行後會在網頁中列印出下圖:
[attach]5474[/attach]
圖3-13  

天啊!圖3-13網頁中的九九乘法表太難看了吧!歪歪斜斜的沒有標齊,這時候,我們不妨試著修改程式敘述,加入表格的HTML標籤,使輸出在網頁中的九九乘法表能標齊對正。
[attach]5475[/attach]
圖3-14  
test03_07.php
  1. <HTML>
  2. <HEAD>
  3. <TITLE>test03_07</TITLE>
  4. </HEAD>
  5. <BODY>
  6. <TABLE Border=1 width=100%>
  7. <?
  8. for ($x=1; $x<10; $x++)
  9. {
  10.   echo "<TR Align=Center>";
  11.   for ($y=1; $y<10; $y++)
  12.   {
  13.   echo ("<TD>" . $x . " * " . $y . " = " . $x*$y . "</TD>");
  14.   }
  15.    echo "<TR>";
  16. }
  17. ?>
  18. </TABLE>
  19. </BODY></HTML>
複製代碼

作者: 小誌    時間: 2011-4-18 18:20

實做學習7
試撰寫一PHP敘述,使網頁中出現下圖之畫面。
[attach]5476[/attach]
圖3-15  
test03_08.php
  1. <html>
  2. <head>
  3. <title>test03_08</title>
  4. </head>
  5. <body>
  6. <table border="1" width="100%">
  7.   <tr>
  8.     <td width="50%">
  9. <?
  10. for ($I=1 ; $I<=5 ; $I++)
  11. {
  12.         for($J=1 ; $J<=$I ; $J++)
  13.         {
  14.            echo "㊣";
  15.         }
  16. echo "<BR>";
  17. }
  18. ?>
  19. </td>
  20.     <td width="50%">
  21. <?
  22. for ($I=5 ; $I>=1 ; $I--)
  23. {
  24.         for($J=$I ; $J>=1 ; $J--)
  25.         {
  26.            echo "◎";
  27.         }
  28. echo "<BR>";
  29. }
  30. ?>
  31. </td>
  32.   </tr>
  33. </table>
  34. </body>
  35. </html>
複製代碼

作者: 游燿呈    時間: 2013-9-12 16:35

大家好
我是php初學者
本篇遞減迴圈範例:
<?php
for ($X=10 ; $X<0 ; $X--)
      {
         $Y=$Y+$X;
       }
      echo $Y;
?>
做了好幾次都做不出來( 網頁無任何內容 )
請問各位先進, 問題出在哪裡?




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)