设为首页 加入收藏

TOP

6.4 break和continue语句
2013-10-12 06:51:56 来源: 作者: 【 】 浏览:86
Tags:6.4 break continue 语句

6.4  break和continue语句

在第4.4节中我们见到了break语句的一种用法--跳出switch语句块,这个语句也可以用来跳出循环体。continue语句也会终止当前循环,和break语句不同的是,continue语句终止当前循环后又回到循环体的开头准备执行下一次循环。对于while循环和do/while循环,执行continue语句之后测试控制表达式,如果值为真则继续执行下一次循环;对于for循环,执行continue语句之后首先计算控制表达式3,然后测试控制表达式2,如果值为真则继续执行下一次循环。例如下面的代码打印1到100之间的素数。

例6.1  求1~100的素数

  1. #include <stdio.h>  
  2.  
  3. int is_prime(int n)  
  4. {  
  5.         int i;  
  6.         for (i = 2; i < n; i++)  
  7.                 if (n % i == 0)  
  8.                         break;  
  9.         if (i == n)  
  10.                 return 1;  
  11.         else 
  12.                 return 0;  
  13. }  
  14.  
  15. int main(void)  
  16. {  
  17.         int i;  
  18.         for (i = 1; i <= 100; i++) {  
  19.                 if (!is_prime(i))  
  20.                         continue;  
  21.                 printf("%d\n", i);  
  22.         }  
  23.         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的值相等。

习题

1.例6.1只是为了说明break和continue的用法才这么写的,其实完全可以不用break和continue,请读者修改一下控制流程,去掉break和continue而保持程序整体功能不变。

2.上一节讲过怎样把for循环改写成等价的while循环,但也提到如果循环体中有continue语句这两种形式就不等价了,为什么呢?


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇14.3.2 Usual Arithmetic Convers.. 下一篇14.3.1 Integer Promotion

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: