在第 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
的值相等。