在第 4 節 “switch語句”中我們見到了break語句的一種用法,用來跳出switch語句塊,這個語句也可以用來跳出循環體。continue語句也會終止當前循環,和break語句不同的是,continue語句終止當前循環後又回到循環體的開頭準備執行下一次循環。對於while循環和do/while循環,執行continue語句之後測試控製表達式,如果值為真則繼續執行下一次循環;對於for循環,執行continue語句之後首先計算控製表達式3,然後測試控製表達式2,如果值為真則繼續執行下一次循環。例如下面的代碼打印1到100之間的素數:
例 6.1. 求1-100的素數
#include <stdio.h>
int is_prime(int n)
{
int i;
for (i = 2; i < n; i++)
if (n % i == 0)
break;
if (i == n)
return 1;
else
return 0;
}
int main(void)
{
int i;
for (i = 1; i <= 100; i++) {
if (!is_prime(i))
continue;
printf("%d\n", i);
}
return 0;
}is_prime函數從2到n-1依次檢查有沒有能被n整除的數,如果有就說明n不是素數,立刻跳出循環而不執行i++。因此,如果n不是素數,則循環結束後i一定小於n,如果n是素數,則循環結束後i一定等於n。注意檢查臨界條件:2應該是素數,如果n是2,則循環體一次也不執行,但i的初值就是2,也等於n,在程序中也判定為素數。其實沒有必要從2一直檢查到n-1,只要從2檢查到⌊sqrt(n)⌋,如果全都不能整除就足以證明n是素數了,請讀者想一想為什麼。
在主程序中,從1到100依次檢查每個數是不是素數,如果不是素數,並不直接跳出循環,而是i++後繼續執行下一次循環,因此用continue語句。注意主程序的局部變數i和is_prime中的局部變數i是不同的兩個變數,其實在調用is_prime函數時主程序的局部變數i和參數n的值相等。