我们之前讲过了分支结构和循环结构,在switch语句也大致了解了一下break,这里要先注意一点,break和continue是两个关键字!!!
而今天我们再来详细介绍一下break和continue的用法。
- break:用于永久的终止循环,只要break被执行,直接就会跳出本层循环,继续往后执行。
- continue:跳过本次循环continue后边的代码,在for循环和while循环中有所差异的。
我们分别在三种循环中对比一下它们的效果。
-
while循环中的break和continue
-
break举例
#include <stdio.h>
int main()
{
int i = 1;
while(i <= 10)
{
if(i == 5)
break;//当i等于5后,就执行了break,循环就终止了
printf("%d ",i);
i = i + 1;
}
return 0;
}
i在一开始初始化为1,进入while循环开始,判断i是否<=10,成立是显而易见的,然后再进入if判断i是否等于5,不成立,跳过if,执行printf语句,输出为1,最后给i自增1,此时i等于2,回到while语句的判断,依次类推……直到i等于5时,if成立,执行break,退出这一层的while,也跳过了printf语句和i=i+1,因为只有一层循环,所以直接结束该程序,最后结果为:1 2 3 4
-
continue举例
continue在循环中的作用就是跳过本次循环中continue后边的代码,直接抵达下一次循环的判断。
我们将上面的代码中的break换成continue会是什么结果呢?
#include <stdio.h>
int main()
{
int i = 1;
while(i <= 10)
{
if(i == 5)
continue;
//当i等于5后,就执行了continue,直接跳过continue下面的代码,开始下一次循环
printf("%d ",i);
i = i + 1;
}
return 0;
}
我们上面已经分析了它的循环过程,所以我们省略前面的部分,直接到i等于5的时候,执行continue,跳过了下面的语句,重新回到了while的循环的判断,然后又再次进入了if判断是否等于5,成立,执行continue,又重新回到了while的循环判断……就这样,进行了死循环,因为i等于5时,一直无法抵达i=i+1,所以执行了死循环。
-
for循环中的break和continue
-
break举例
我们之前讲过for循环和while循环的区别,所以break在这里的用法和while循环是一样的
#include <stdio.h>
int main()
{
int i = 1;
for (i = 1; i <= 10; i++)
{
if (i == 5)
break;
printf("%d", i);
}
return 0;
}
这和while的运行过程是一样的,先执行i=1,然后判断是否符合条件,i<=10条件符合,所以执行下面的语句,先执行if的判断,判断不成立,跳过if语句,执行printf,最后,执行第三个表达式i++对自己进行自增。此时i等于2,再次执行第二个表达式判断i<=10,以此类推……所以最后结果为1 2 3 4。
-
continue举例
我们再来将上面代码中的break换成continue会是什么结果呢?
#include <stdio.h>
int main()
{
int i = 1;
for (i = 1; i <= 10; i++)
{
if (i == 5)
continue;
printf("%d", i);
}
return 0;
}
注意了!!!这里的continue导致的运行过程可不一样了,那么哪里不一样呢?我们直接来到i等于5时,执行了continue语句,跳过了printf,然后回到了i++给自己自增1,你没有看错,只跳过了printf,没有跳过i++,为什么呢?因为i++虽然是最后执行的,但是它是在for的()内的,你可以理解为是i++是和其他两个语句在同一行的,continue管不到for的第三个表达式。所以最后结果为1 2 3 4 6 7 8 9 10。注意没有5噢
-
do while循环中的break和continue
do while循环中,break和continue的用法与while循环几乎一模一样,所以我们这里不再过多解释了。
//do while 下的break
#include <stdio.h>
int main()
{
int i = 1;
do
{
if (i == 5)
break;
printf("%d ", i);
i = i + 1;
}while (i <= 10);
return 0;
}
//do while 下的continue
#include <stdio.h>
int main()
{
int i = 1;
do
{
if (i == 5)
continue;
printf("%d ", i);
i = i + 1;
}while (i <= 10);
return 0;
}
-
循环的嵌套
现在我们已经介绍完了三种循环和他们所使用的关键字。这三种循环只有嵌套在一起才能更好的解决问题。
我来给大家留个小作业(实际上是想偷懒……):
练习:找出100~200之间的素数,并打印在屏幕上
注:素数又称质数,只能被1和本身整除的数字。
题目解析:
- 要从100~200之间找出素数,⾸先得有100~200之间的数,这⾥可以使⽤循环解决。
- 假设要判断i是否为素数,需要拿2~i-1之间的数字去试除i,需要产⽣2~i-1之间的数字,也可以使⽤循环解决。
- 如果2~i-1之间有数字能整除i,则i不是素数,如果都不能整除,则i是素数。
如果有不确定思路是否正确的朋友,可以打在评论区,我来为你解答。
最后,我们再来介绍一个特殊的语句——goto语句
-
goto语句
这是一种十分特殊的语句,它可以跳转到本函数内所标记好的位置。我们用一个例子来详细介绍一下。
例如:
#include <stdio.h>
int main()
{
printf("hehe\n");
goto next;
printf("haha\n");
next:
printf("跳过了haha的打印\n");
return 0;
}
我们依次往下执行,到goto next;直接跳过printf语句,执行next:下面的语句,所以最后结果为
hehe
跳过了haha的打印
goto语句一般使用很少,因为C语言是一种结构化的语言,goto很有可能会打乱程序的运行流程,所以一般能不用就尽量不去使用,一般都是用在多层循环内,我们刚刚说过,break只能跳出本层的循环,如果循环层数过多,就需要用到goto语句。
例如:
for(……)
{
for(……)
{
for(……)
{
if(disaster)
goto error;
}
}
}
error:
//……
今天的内容就到这里了,如果有什么疑问,可以打在评论区噢。