C 流程控制
一 流程控制
顺序结构: 默认的流程结构 按照书写顺序执行每一条语句
选择结构: 对给定的条件进行判断 再根据判断结果来决定执行哪一段代码
循环结构: 在给定条件成立的情况下 反复执行某一段代码
二 选择结构
1. if
#include <stdio.h> int main() { /* 1> if的第一种结构 if(条件) { 语句1; 语句2; ... } 条件成立 {}里面的代码才会执行 */ int money = 6000; if(money >= 5000) { printf("大保健\n"); } /* 2> if的第二种结构 if(条件) { 语句1; 语句2; ... }else { 语句1; 语句2; ... } 不是第一个{}里面的代码被执行 就是第二个{}里面的代码被执行 */ if(money >= 5000) { printf("大保健\n"); }else { printf("好好上班\n"); } /* 3> if的第三种结构 if(条件1) { 语句1; ... }else if(条件2) { 语句1; ... }else if(条件3) { 语句1; ... }else { 语句1; ... } 只有一个{}里面的代码被执行 条件判断顺序从上到下 */ if(money == 5000) { printf("大保健\n"); }else if(money == 4000) { printf("好好上班\n"); }else if(money == 3000) { printf("回家种田\n"); }else { printf("唉!!!\n"); } /* 4> if的第四种结构 if(条件) 语句1; 语句2; ... 这种情况比较特殊 条件是否成立只会影响语句1; 之后的语句2... 都和条件无关 想要都影响 就用{}括起来 这种写法要注意: 如果要在if后面的语句中定义新的变量 必须用{}包住 */ return 0; }
2. switch
#include <stdio.h> int main() { int a = 10; switch(a) { case 0: printf("这是一个0"); break; case 5: printf("这是一个5"); break; case 10: printf("这是一个10"); break; default: printf("什么也不是"); break; } return 0; //break: 退出switch语句 //default: 当前面的case都不匹配的时候就会执行 //注意: 如果case后面没有break 就会执行后面所有case中的语句 直到遇到break为止 //注意: 如果要在case后面定义新的变量 必须用{}包住 }
3. if和switch的对比
1> if语句能完成的功能 switch不一定能完成
2> switch语句能完成的功能 if都能完成
3> if用得比较多 比较灵活 switch只能某个单值
三 循环结构
1. while
#include <stdio.h> int main() { /* while(条件) { 循环体 } */ int count = 0; while(count < 30) { ++count; if(count%10 == 0) { continue; } printf("hello world! 第%d次\n", count); if(count == 28) { break; } } return 0; //continue: 跳出本次循环 进入下一次循环 //break: 退出整个循环 //特点: 只有条件成立才会执行循环体 //注意: 死循环 while(3) { printf("死循环\n"); } }
2. do while
#include <stdio.h> int main() { /* do { } while(条件); */ int i = 0; do { i++; } while(i < 8); printf("i = %d\n", i); return 0; //特点: 不管条件是否成立 一定会执行一次循环体 }
3. for
#include <stdio.h> int main() { /* for(语句1; 条件; 语句2) { 循环体 } 语句1: 初始化语句 语句2: 增量语句(执行完循环体后再执行的语句) 1.for一开始就会执行一次 语句1(整个for循环只会执行一次) 2.判断条件是否成立 如果条件成立 就会执行一次循环体 然后就会执行语句2 再次判断条件是否成立... */ for(int i = 0; i < 30; printf("i = %d\n", i), i++) {} for(int i = 0; i < 30; printf("i = %d\n", i), printf("哈哈\n"), i++) {} for(int i = 0; i < 30; i++) { printf("i = %d\n", i); } return 0; //注意: 不要随便在for()后面加分号 //注意: for循环体内部变量的作用域 //死循环 for(;;); }
4. while循环和for循环的比较
可以互换
for循环的变量可以及时回收
四 break和continue
1. break 使用场合
1> switch语句: 退出整个switch语句
2> 循环结构(while|do while|for): 退出整个循环语句
3> 循环嵌套下的break: 只对最近的循环结构有效
2. continue 使用场合
1> 循环结构(while|do while|for): 跳出本次循环 进入下一次循环
2> 循环嵌套下的continue: 只对最近的循环结构有效