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