前言
前面我们已经详细地了解了什么是分支语句以及分支语句的使用和建议。接下来就让我们进入到循环语句的学习吧!
目录
3.3.4 do while循环中的break和continue
3.循环语句
前面我们已经掌握了分支语句,在满足条件时语句执行,否则不执行。但是这样的语句只能执行一次,当我们需要一个语句执行多次时应该怎么办呢?这时,我们就可以用到循环语句。循环语句有三种,分别是while循环、for循环和do while循环。
3.1 while循环
3.1.1 while执行流程和语法结构
while语句执行的流程:
while语法结构:
这里表达式判断与if语句一样,即判断为假即为0,判断为真即为非零。
下面我们通过实际例子来深入理解一下:
假如我们想要有人帮你看看从几楼跳楼能摔死,每跳一层就报告第几层没摔死。(只用于举例,请勿模仿!!!)
//跳楼,一层一层跳
#include<stdio.h>
int main()
{
int floor = 0;
while (floor <= 5)
{
printf("第%d层没摔死",floor);
floor++;
}
return 0;
}
打印结果是第0、1、2、3、4、5层没摔死
好了,现在相信大家对基本的while语句语法已经掌握了。但是可能会有小伙伴对上面的执行流程中的continue和break有大大滴疑问。现在就让我们来探索一下continue和break到底是什么吧。
3.1.2while 语句中的break和continue
我们先来看一个break代码实例:
#include <stdio.h>
int main()
{
int i = 1;
while(i<=10)
{
if(i == 5)
break;
printf("%d ", i);
i = i+1;
}
return 0;
}
这里代码输出的结果是什么?
编译器的运行结果是1 2 3 4,可见,原代码运行时在i=5时就直接跳出循环,不再继续进行。
总结:
break在while循环中的作用:
其实在循环中只要遇到break,就停止后期的所有的循环,直接终止循环。
所以:while中的break是用于永久终止循环的
我们再来看一个continue的实例:
#include <stdio.h>
int main()
{
int i = 1;
while (i <= 10)
{
if (i == 5)
continue;
printf("%d ", i);
i = i + 1;
}
return 0;
}
代码的输出结果是什么呢?
通过运行,得到下面的结果:
我们发现,这里打印了1 2 3 4,但是程序并没有终止,而是不停地一直运行下去。即输出1 2 3 4,然后进入死循环。这是为什么呢?
其实,continue的作用是 终止本次循环的,也就是本次循环中continue后边的代码不会再执行,而是直接跳转到while语句的判断部分。进行下一次循环的入口判断。在这段代码中i==5条件满足就会执行continue,然后进入循环条件的判断,然后再判断i==5,再执行continue,持续循环下去。
3.2 for循环
前面我们已经了解了while循环,可是为什么还要再加一个for循环呢?我们先来看一下for循环是怎么进行的。
3.2.1 执行流程和语法
for循环的执行流程如下:
expr1为初始化部分,用于初始化循环变量。
expr2为条件判断部分,用于判断循环时候终止。
expr3为调整部分,用于循环条件的调整。
那么这样的结构采用的语法是怎么样的呢?接下来我们来了解一下for循环的语法
表达式1为初始化部分,用于初始化循环变量
表达式2为条件判断部分,用于判断循环时候终止
表达式3为调整部分,用于循环条件的调整
接下来用实际例子来深入理解一下:
使用for循环 在屏幕上打印1-10的数字,代码如下:
#include <stdio.h>
int main()
{
int i = 0;
for (i = 1/*初始化*/; i <= 10/*判断部分*/; i++/*调整部分*/)
{
printf("%d ", i);
}
return 0;
}
现在我们对比一下for循环和while循环
int i = 0;
//实现相同的功能,使用while
i = 1;//初始化部分
while (i <= 10)//判断部分
{
printf("hehe\n");
i = i + 1;//调整部分
}
//实现相同的功能,使用for
for (i = 1; i <= 10; i++)
{
printf("hehe\n");
}
可以发现在while循环中依然存在循环的三个必须条件,但是由于风格的问题使得三个部分很可能偏离较远,这样查找修改就不够集中和方便。所以,for循环的风格更胜一筹;for循环使用的频率也最高。
3.2.2 for循环中的break和continue
for循环中也可以出现break和continue,他们的意义和在while循环中是一样的。
但是,在使用时类似的代码会出现各种差异。
//代码1
#include <stdio.h>
int main()
{
int i = 0;
for (i = 1; i <= 10; i++)
{
if (i == 5)
break;
printf("%d ", i);
}
return 0;
}
结果是1 2 3 4
//代码2
#include <stdio.h>
int main()
{
int i = 0;
for (i = 1; i <= 10; i++)
{
if (i == 5)
continue;
printf("%d ", i);
}
return 0;
}
结果是 1 2 3 4 5 6 7 8 9 10,而不是像while循环那样出现死循环。
在for循环中,调整语句由于不在循环语句内部,因此不受break和continue的干扰。而while循环中如果continue在调整语句前面,就容易被跳过。
3.3 do...while()循环
3.3.1 执行流程和语法
do语句执行流程:
do语句的语法:
从执行流程可以看出来,do...while循环运行时是先执行循环语句再判断是否继续循环的。因此循环至少执行一次。但do语句使用的场景有限,所以不是经常使用。
#include <stdio.h>
int main()
{
int i = 10;
do
{
printf("%d\n", i);
} while (i < 10);
return 0;
}
这段代码打印结果是10。初始化的 i 是10,先执行打印的语句,判断结果为假,退出循环。
3.3.4 do while循环中的break和continue
相信到这里大家已经猜到这里要讲什么了。这里的break和continue与前面的while循环几乎完全一样,唯一的不同点就是do...while循环的判断部分在后面。
通过两个简单的代码我们再细致地理解一下:
#include <stdio.h>
int main()
{
int i = 10;
do
{
if (10 == i)
break;
printf("%d\n", i);
} while (i < 10);
return 0;
}
结果当然是什么都没有啦。
#include <stdio.h>
int main()
{
int i = 5;
do
{
if (5 == i)
continue;
printf("%d\n", i);
} while (i < 10);
return 0;
}
你知道的,直接死循环,啥都不打印。
我们的分支和循环语句的探索就到此结束啦。欢迎各位大佬批评指正!!!