break 和 continue
break用于循环,则用于终止循环 break用于switch,则用于终止switch break不能直接用于if,除非if属于循环内部的一个子句。 当有多层循环时,break只能终止距离它最近的循环 当多层switch嵌套时,break只能终止距离它最近的switchcontinue 用于跳过本次循环余下的语句,转去判断是否需要执行下次循环
例子:
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 # include2 3 int main(void) 4 { 5 int i; 6 /* 7 switch (2) 8 { 9 case 2:10 printf("哈哈!\n");11 break; //OK, break可以用于switch12 }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 # include2 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 # include2 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 # include7 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只能终止距离它最近的switch20 case 1 :21 b++;22 break;23 }24 b = 100; //如果break终止内层switch,则b = 100,如果终止外层switch,则b = 025 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:1535 当有多层循环时,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 = 10057 终止最近的for循环!58 终止最近的for循环!59 终止最近的for循环!60 Press any key to continue61 ----------------------------62 */
一元二次方程_do...while人机交互
1 /* 2 时间:2015年2月7日18:34:21 3 描述:使用 do...while 人机交互连续计算一元二次方程的解 4 功能: 5 */ 6 7 # include8 # include 9 int main (void)10 {11 double a, b, c;12 double delta;13 double x1, x2;14 char ch;15 16 do17 {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 else42 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 = 156 b = 257 c = 158 有唯一解:x1 = x2 = -1.00000059 是否需要继续(Y/N)?60 y61 请输入一元二次方程的3个系数:62 a = 163 b = 564 c = 665 有两个解,x1 = -2.000000, x2 = -3.00000066 是否需要继续(Y/N)?67 Y68 请输入一元二次方程的3个系数:69 a = 470 b = 171 c = 472 无实数解!73 是否需要继续(Y/N)?74 n75 Press any key to continue76 ----------------------------77 */