- 註冊時間
- 2006-10-8
- 最後登錄
- 2019-6-20
- 主題
- 查看
- 積分
- 1306
- 閱讀權限
- 110
- 文章
- 1393
- 相冊
- 0
- 日誌
- 1
   
狀態︰
離線
|
for (起始值; 條件式; 更新值) 指令一;
或
for (起始值; 條件式; 更新值) {
指令一;
指令二;
指令三;
}
起始值是進入迴圈一開始會執行的動作,而更新值則是執行完每次的迴圈要執行的動作,我們舉個例子來看:
for(i=1; i<=10; i++) printf("%d\n", i);
上面的語法,程式執行的步驟如下:
設定變數 i=1;
檢查 i<=10 是否成立,不成立則跳出迴圈 ( 即跳至 6. )
執行 printf("%d\n", i);
執行 i++; ( 即 i=i+1; )
跳至 2. 的位置
迴圈結束
而在 for 迴圈中,我們同樣可以使用 break 和 continue 指令,再此就不再舉例。如果不需要起始值或更新值,則該欄位可以空白。而如果起始值或更新值有兩個以上,可以用逗點 , 隔開,例如:
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
查看全部評分
|