break和continue

break 和 continue
  break用于循环,则用于终止循环
  break用于switch,则用于终止switch
  break不能直接用于if,除非if属于循环内部的一个子句。
  当有多层循环时,break只能终止距离它最近的循环
  当多层switch嵌套时,break只能终止距离它最近的switch

continue 用于跳过本次循环余下的语句,转去判断是否需要执行下次循环

例子:

1.

1 for(1; 2; 3)
2 {
3     A;
4     B;
5     continue;//如果执行该语句,则会执行语句3,C和D都会被跳过去,不会被执行
6     C;
7     D;
8 }

2.

1 while (表达式)    //当把for循环转化成while语句时,语句3一定要在continue之前
2 {
3     A;
4     B;
5     continue;//如果执行该语句,则会执行表达式,C和D都会被跳过去,不会被执行
6     C;
7     D;
8 }

如: 

1 char ch;
2 while( (ch=getchar()) != '\n')
3   continue;

详见scanf对用户非法输入的处理

1. break不能直接用于if, 除非if属于循环内部的一个子句:

 1 # include <stdio.h>
 2 
 3 int main(void)
 4 {
 5     int i;
 6 /*
 7     switch (2)
 8     {
 9     case 2:
10         printf("哈哈!\n");
11         break;  //OK, break可以用于switch
12     }
13 
14 */
15     
16     for (i=0; i<3; ++i )
17     {
18         if (3 > 2)
19             break;  //break虽然是if内部的语句,但break终止的是外部的for循环
20         printf("嘿嘿!\n");
21     }
22 
23     return 0;
24 }

break用于多个for循环,只能终止离它最近的:

 1 # include <stdio.h>
 2 
 3 int main(void)
 4 {
 5     int i, j;
 6 
 7     for (i=0; i<3; ++i)
 8     {
 9         for (j=1; j<4; ++j)
10             break;  //break只能终止距离它最近的循环
11         printf("同志们好!\n");
12     }
13 
14     return 0;
15 }

switch + break的用法_电梯程序:

 1 # include <stdio.h>
 2 
 3 int main(void)
 4 {
 5     int val;
 6 
 7     printf("请输入您要进入的楼层: ");
 8     scanf("%d", &val);
 9 
10     switch (val)
11     {
12     case 1:
13         printf("1层开!\n");
14         break;
15     case 2:
16         printf("2层开!\n");
17         break;
18     case 3:
19         printf("3层开!\n");
20         break;
21     default:
22         printf("没有盖到这一层!\n");
23         break;
24     }
25 
26     return 0;
27 }

多层switch嵌套与break的用法:

 1 /*
 2 时间:2015年2月7日20:06:10
 3 描述:测试break在多层switch中的用法
 4 功能:当多层switch嵌套时,break只能终止距离它最近的switch
 5 */
 6 # include <stdio.h>
 7 
 8 int main (void)
 9 {
10     int x =1, y = 0, a = 0, b = 0;
11 
12     switch (x)
13     {
14     case 1 :
15         switch (y)
16         {
17         case 0 :
18             a++;
19             break;        //break只能终止距离它最近的switch
20         case 1 :
21             b++;
22             break;
23         }
24         b = 100;        //如果break终止内层switch,则b = 100,如果终止外层switch,则b = 0
25         break;
26     case 2 :
27         a++;
28         break;
29     }
30 
31     printf("a = %d b = %d\n", a, b);
32 
33 /*
34     2015年2月7日20:11:15
35     当有多层循环时,break只能终止距离它最近的循环
36     break不能直接用于if,除非if属于循环内部的一个子句。
37 如:if (3 > 2)
38         break;        //错误
39 */
40     int i, j;
41     for (i=0; i<3; i++)
42     {
43         for (j=0; j<3; j++)
44         {
45             if (3 > 2)
46                 break;        //if是循环的子句,OK,break虽然是if的子句,但是终止的是内层for循环
47             printf("终止if!\n");//如果break终止if,则此句会输出
48         }
49         printf("终止最近的for循环!\n");//break终止内层循环,此句会输出3次!
50     }
51     return 0;
52 }
53 /*
54 在VC++6.0输出结果是:
55 ----------------------------
56 a = 1 b = 100
57 终止最近的for循环!
58 终止最近的for循环!
59 终止最近的for循环!
60 Press any key to continue
61 ----------------------------
62 */

一元二次方程_do...while人机交互

 1 /*
 2 时间:2015年2月7日18:34:21
 3 描述:使用 do...while 人机交互连续计算一元二次方程的解 
 4 功能:
 5 */
 6 
 7 # include <stdio.h>
 8 # include <math.h>
 9 int main (void)
10 {
11     double a, b, c;
12     double delta;
13     double x1, x2;
14     char ch;
15     
16     do
17     {
18         printf("请输入一元二次方程的3个系数:\n");
19         printf("a = ");
20         scanf("%lf", &a);
21         
22         printf("b = ");
23         scanf("%lf", &b);
24         
25         printf("c = ");
26         scanf("%lf", &c);
27         
28         delta = b*b - 4*a*c;
29         
30         if (delta > 0)
31         {
32             x1 = (-b + sqrt(delta)) / (2*a);
33             x2 = (-b - sqrt(delta)) / (2*a);
34             printf("有两个解,x1 = %lf, x2 = %lf\n", x1, x2);
35         }
36         else if (0 == delta)
37         {
38             x1 = (-b) / (2*a);
39             printf("有唯一解:x1 = x2 = %lf\n", x1);
40         }
41         else
42             printf("无实数解!\n");
43         
44         printf("是否需要继续(Y/N)?\n");
45         scanf(" %c", &ch);        //注意%c之前要有一个空格,原因略
46     
47     } while ('y'==ch || 'Y'==ch);
48     
49     return 0;
50 }
51 /*
52 在VC++6.0输出结果是:
53 ----------------------------
54 请输入一元二次方程的3个系数:
55 a = 1
56 b = 2
57 c = 1
58 有唯一解:x1 = x2 = -1.000000
59 是否需要继续(Y/N)?
60 y
61 请输入一元二次方程的3个系数:
62 a = 1
63 b = 5
64 c = 6
65 有两个解,x1 = -2.000000, x2 = -3.000000
66 是否需要继续(Y/N)?
67 Y
68 请输入一元二次方程的3个系数:
69 a = 4
70 b = 1
71 c = 4
72 无实数解!
73 是否需要继续(Y/N)?
74 n
75 Press any key to continue
76 ----------------------------
77 */

 

posted @ 2015-05-28 18:06  moon1992  阅读(398)  评论(0编辑  收藏  举报