## 循环结构 - C语言中提供了三大循环结构, 分别是while、dowhile和for - 循环结构是程序中一种很重要的结构。 + 其特点是,在给定条件成立时,反复执行某程序段, 直到条件不成立为止。 + 给定的条件称为"循环条件",反复执行的程序段称为"循环体" ![](https://img-blog.csdnimg.cn/img_convert/d32037b3b82185eadb8c1f2ae4e2d160.png) ## 循环结构while - 格式: ```c while ( 循环控制条件 ) { 循环体中的语句; 能够让循环结束的语句; .... } ``` - 构成循环结构的几个条件 - 循环控制条件 + 循环退出的主要依据,来控制循环到底什么时候退出 - 循环体 + 循环的过程中重复执行的代码段 - 能够让循环结束的语句(递增、递减、真、假等) + 能够让循环条件为假的依据,否则退出循环 - 示例: ```c int count = 0; while (count < 3) { // 循环控制条件 printf("发射子弹~哔哔哔哔\n"); // 需要反复执行的语句 count++; // 能够让循环结束的语句 } ``` - while循环执行流程 + 首先会判定"循环控制条件"是否为真, 如果为假直接跳到循环语句后面 + 如果"循环控制条件"为真, 执行一次循环体, 然后再次判断"循环控制条件"是否为真, 为真继续执行循环体,为假跳出循环 + 重复以上操作, 直到"循环控制条件"为假为止 ```c #include int main(){ int count = 4; // 1.判断循环控制条件是否为真,此时为假所以跳过循环语句 while (count < 3) { printf("发射子弹~哔哔哔哔\n"); count++; } // 2.执行循环语句后面的代码, 打印"循环执行完毕" printf("循环执行完毕\n"); } ``` ```c #include int main(){ int count = 0; // 1.判断循环控制条件是否为真,此时0 < 3为真 // 4.再次判断循环控制条件是否为真,此时1 < 3为真 // 7.再次判断循环控制条件是否为真,此时2 < 3为真 // 10.再次判断循环控制条件是否为真,此时3 < 3为假, 跳过循环语句 while (count < 3) { // 2.执行循环体中的代码, 打印"发子弹" // 5.执行循环体中的代码, 打印"发子弹" // 8.执行循环体中的代码, 打印"发子弹" printf("发射子弹~哔哔哔哔\n"); // 3.执行"能够让循环结束的语句" count = 1 // 6.执行"能够让循环结束的语句" count = 2 // 9.执行"能够让循环结束的语句" count = 3 count++; } // 11.执行循环语句后面的代码, 打印"循环执行完毕" printf("循环执行完毕\n"); } ``` --- - ***while循环注意点*** - 任何数值都有真假性 ```c #include int main(){ while (1) { // 死循环 printf("发射子弹~哔哔哔哔\n"); // 没有能够让循环结束的语句 } } ``` - 当while后面只有一条语句时,while后面的大括号可以省略 ```c #include int main(){ while (1) // 死循环 printf("发射子弹~哔哔哔哔\n"); // 没有能够让循环结束的语句 } ``` - 如果while省略了大括号, 那么后面不能定义变量 ```c #include int main(){ while (1) // 死循环 int num = 10; // 报错 // 没有能够让循环结束的语句 } ``` - C语言中分号(;)也是一条语句, 称之为空语句 ```c #include int main(){ int count = 0; while (count < 3);{ // 死循环 printf("发射子弹~哔哔哔哔\n"); count++; } } ``` - 最简单的死循环 ```c // 死循环一般在操作系统级别的应用程序会比较多, 日常开发中很少用 while (1); ``` --- - while练习 + 计算1 + 2 + 3 + ...n的和 + 获取1~100之间 7的倍数的个数 --- ## 循环结构do while - 格式: ```c do { 循环体中的语句; 能够让循环结束的语句; .... } while (循环控制条件 ); ``` - 示例 ```c int count = 0; do { printf("发射子弹~哔哔哔哔\n"); count++; }while(count < 10); ``` - do-while循环执行流程 + 首先不管while中的条件是否成立, 都会执行一次"循环体" + 执行完一次循环体,接着再次判断while中的条件是否为真, 为真继续执行循环体,为假跳出循环 + 重复以上操作, 直到"循环控制条件"为假为止 - 应用场景 + 口令校验 ```c #include int main() { int num = -1; do{ printf("请输入密码,验证您的身份\n"); scanf("%d", &num); }while(123456 != num); printf("主人,您终于回来了\n"); } ``` - while和dowhile应用场景 + 绝大多数情况下while和dowhile可以互换, 所以能用while就用while + 无论如何都需要先执行一次循环体的情况, 才使用dowhile + do while 曾一度提议废除,但是他在输入性检查方面还是有点用的 --- ## 循环结构for - 格式: ```c for(初始化表达式;循环条件表达式;循环后的操作表达式) { 循环体中的语句; } ``` - 示例 ```c for(int i = 0; i < 10; i++){ printf("发射子弹~哔哔哔哔\n"); } ``` - for循环执行流程 + 首先执行"初始化表达式",而且在整个循环过程中,***只会执行一次***初始化表达式 + 接着判断"循环条件表达式"是否为真,为真执行循环体中的语句 + 循环体执行完毕后,接下来会执行"循环后的操作表达式",然后再次判断条件是否为真,为真继续执行循环体,为假跳出循环 + 重复上述过程,直到条件不成立就结束for循环 - for循环注意点: + 和while一模一样 + 最简单的死循环```for(;;);``` - for和while应用场景 + while能做的for都能做, 所以企业开发中能用for就用for, 因为for更为灵活 + 而且对比while来说for更节约内存空间 ```c int count = 0; // 初始化表达式 while (count < 10) { // 条件表达式 printf("发射子弹~哔哔哔哔 %i\n", count); count++; // 循环后增量表达式 } // 如果初始化表达式的值, 需要在循环之后使用, 那么就用while printf("count = %i\n", count); ``` ```c // 注意: 在for循环初始化表达式中定义的变量, 只能在for循环后面的{}中访问 // 所以: 如果初始化表达式的值, 不需要在循环之后使用, 那么就用for // 因为如果初始化表达式的值, 在循环之后就不需要使用了 , 那么用while会导致性能问题 for (int count = 0; count < 10; count++) { printf("发射子弹~哔哔哔哔 %i\n", count); } // printf("count = %i\n", count); ``` ```c // 如果需要使用初始化表达式的值, 也可以将初始化表达式写到外面 int count = 0; for (; count < 10; count++) { printf("发射子弹~哔哔哔哔\n", count); } printf("count = %i\n", count); ``` 最后,如果你有任何疑问,请关注微信公众号 **代码情缘** 加我微信。