迴圈敘述 - for

一、for 敘述的語法

上一頁我們討論到 while、do-while 兩種迴圈的用法,接下來我們看到第三種迴圈 for 的語法:

for (起始值; 條件式; 更新值) 指令一;

for (起始值; 條件式; 更新值) {

  指令一;

  指令二;

  指令三;

}

起始值是進入迴圈一開始會執行的動作,而更新值則是執行完每次的迴圈要執行的動作,我們舉個例子來看:

for(i=1; i<=10; i++) printf("%d\n", i);

上面的語法,程式執行的步驟如下:

  1. 設定變數 i=1;
  2. 檢查 i<=10 是否成立,不成立則跳出迴圈 ( 即跳至 6. )
  3. 執行 printf("%d\n", i);
  4. 執行 i++; ( 即 i=i+1; )
  5. 跳至 2. 的位置
  6. 迴圈結束

而在 for 迴圈中,我們同樣可以使用 breakcontinue 指令,再此就不再舉例。如果不需要起始值或更新值,則該欄位可以空白。而如果起始值或更新值有兩個以上,可以用逗點 , 隔開,例如:

for(a=1, b=1; a<=100; a++, b++)

另外,上面提到 i++ 的寫法,在 C 中我們如果要寫 a=a+3 可以簡寫成 a+=3,而 a*=3 同樣就是 a=a*3 的意思,至於 a=a+1 及 a=a-1 在 C 裡面有個更簡短的寫法,就是 a++a--,另外 ++a--a 也是同樣的意思,至於 ++ 及 -- 寫在前後的差別,則是在於 ++a 是先運算後取值,而 a++ 是先取值後運算。例如:

a=1;

b=1;

c=a++;

d=++b;

printf("%d %d %d %d", a, b, c, d);

上面的例子會印出 2 2 1 2。

 

二、1+2+...+N 之總合

接下來,我們來看一個典型 for 迴圈的例子,我們用程式來計算 1+2+....+N 之總合,在此假設我們不知道 S= (1+N)*N/2 這個公式,直接用程式讓它從 1 加到 100,整個程式如下:

#include <stdio.h>

void main()

{

 int s=0, i;

 for(i=1; i<=100; i++) s+=i;

 printf("1+2+...+100=%d\n", s);

}

上面的 s 代表總合,一開始是 0,接著每次加上 i 當時的值,而 i 的值會從 1 遞增到 100,最後 s 的值就是 1 加到 100 的總合了。接下來,讓我們用程式計算出 1/1 + 1/2 + 1/3 + ... + 1/100 的總合,和上面不一樣的是,要把 s 改用 float,而 1/i 要改寫成 1.0/i ,這樣它才會被當成 float 來運算。

#include <stdio.h>

void main()

{

 int i;

 float s=0.0;

 for(i=1; i<=100; i++) s+=1.0/i;

 printf("1/1+1/2+...+1/100=%f\n", s);

}

 

三、九九乘法表-多重迴圈的使用:

我們先來寫 2*1= 1 到 2*9=18 的程式:

#include <stdio.h>

void main()

{

 int i;

 for(i=1; i<=9; i++)

   printf("2*%d=%2d\n", i, i*2);

}

上例的 %2d 代表要以兩格的寬度印出該整數,而 %5.2f 則代表印出小數點後兩位,包括小數點共五格的寬度印出該浮點數,即 5 是總寬度,而小數點後的 2 是小數點後要印出的位數。接下來我們再改成真正的九九乘法表,修改的部分用黃色來表示:

#include <stdio.h>

void main()

{

 int i, j;

 for(i=1; i<=9; i++) {

   for(j=2; j<=9; j++)

     printf("%d*%d=%2d ", j, i, i*j);

   printf("\n");

 }

}

像這樣迴圈裡面又有迴圈的寫法,我們稱為雙重迴圈多重迴圈。當然,除了 for 裡面有 for 之外,for 裡面也可以用 while,while 裡面也可以用 while 及 for。

 

四、迴圈敘述的比較:

接下來我們比較 for、while、do-while 三種的用法,首先是 while 及 do-while,while 是先檢查條件是否成立再執行迴圈的指令,而 do-while 則是先執行迴圈的指令再檢查條件是否成立。因此,在一般的情況下,do-while 至少會執行一次迴圈內的指令,而 while 則是不一定會執行到迴圈內的指令。

再來看看 while 及 for,一般說來,while 用在執行次數不固定,直到某個條件成立為止的情況下,而 for 則是用在已知執行次數的情況下,例如在 BASIC 中的 for 寫法如下:

FOR I=1 TO 100

  S=S+I

NEXT I

但是在 C 語言中, for 的第二個欄位也是一個條件值,所以在 C 中, while(條件式)for( ; 條件式; ) 是一樣的。也就是說 while 能做到的,for 都可以做到。只不過我們還是在沒有起始值或是更新值的時候,儘可能使用 while,這樣一來比較容易看得懂,二來日後要把程式改用其他程式語言的時候也比較方便。

 

五、練習:

  1. 印出 100 次 Hello, TCGS!
  2. 輸入一個整數 N,印出 N 之所有因數。(利用取餘數符號 %)

 

上一頁

首頁

下一頁