do
語句;
while (運算式);
// 先執行一次,再判斷。至少執行一次循環體。
| 特性 | while | do-while |
|---|---|---|
| 判斷時機 | 先判斷後執行 | 先執行後判斷 |
| 最少執行次數 | 0 | 1 |
| 運算式後分號 | 無 | 必須有 |
轉換時需調整循環控制條件。例:
// while 版
int a=0,n; scanf("%d",&n);
while (n--) printf("%d ", a++*2);
// do-while 版:條件改為 --n
int a=0,n; scanf("%d",&n);
do printf("%d ", a++*2);
while (--n);
do 與 while 間多語句需 {}while/for 互相嵌套
for (運算式1; 運算式2; 運算式3)
語句;
// 1. 初始化 2. 條件判斷 3. 修改循環變數
運算式1:初始化(賦值運算式),可省略(外部初始化)運算式2:循環條件(關係/邏輯運算式),可省略(恆真,需內部 break)運算式3:修改循環變數(賦值運算式),可省略(內部修改)
// 1+2+...+100
int n, s=0;
for (n=1; n<=100; n++) s += n;
// 輸出 n 個偶數(初始化在外部)
int a=0,n; scanf("%d",&n);
for (; n>0; a++, n--) printf("%d ", a*2);
// 省略所有運算式,靠循環體控制
for (;;) {
a++; n--;
printf("%d ", a*2);
if (n==0) break;
}
for (; getchar()!='\n'; n++); // 統計字符數,循環體為空語句
// 注意:分號不可少,否則後面語句成為循環體
for、while、do-while 可任意合法嵌套(不交叉)。例:印三角形
for (i=1; i<=3; i++) {
for (j=1; j<=3-i+5; j++) printf(" ");
for (k=1; k<=2*i-1+5; k++)
if (k<=5) printf(" "); else printf("*");
printf("\n");
}