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