C语言中的分支和循环(下)
一、 什么是循环二、 while循环2.1、 while循环的语法结构和执行流程2.2、while循环的实践 三、 for循环3.1、 for循环的语法结构和执行流程3.2、for循环的实践 四、 do-while循环4.1、do-while循环的语法结构和执行流程4.2、do-while循环的例子 五、break语句和continue语句5.1、 什么是break语句和continue语句5.2、 while循环中的break和continue(1)break语句(2)continue语句 5.3、 for循环中的break和continue5.4、 do-while循环中的break和continue
一、 什么是循环
首先,什么是循环呢?
循环是一种程序控制结构,它允许程序反复执行某些语句块,直到满足某个条件为止。
C语言中提供了三种循环语句,分别是: while 循环、 for 循环、 do-while 循环。
二、 while循环
2.1、 while循环的语法结构和执行流程
while 语句的语法结构和 if 语句非常类似
1while( 表达式 )2 语句;
while 循环后面与 if 语句一样,只能控制一条语句,如果想控制多条语句,应加上大括号。
与 if 语句一样,while 循环后面不加 “;”,加了即表示循环一条空语句,与后面实际想要执行的语句就没关系了下面,我们来看看 while 循环的执行流程图:
首先,上来就是判断表达式是否成立,若表达式的值为0(即表达式不成立),则循环直接结束;若表达式值为非0(表达式成立),则执行循环语句,语句执行完后再次判断,是否进行下一次的循环,以此类推。(图中出现的 break 和 continue 稍后介绍)
2.2、while循环的实践
下面,让我们用刚刚学到的知识,在屏幕上打印 1-10 的值
参考代码如下:
#include<stdio.h>int main(){int i = 1;while (i <= 10){printf("%d ", i);i = i + 1;}return 0;}
让我们来逐一分析上面的代码:
int i = 1;
这一句是创建了循环变量"i",同时将其初始化为1
while (i <= 10)
这一句是进行循环结束条件判断,当表达式符合括号内的条件时,方可执行后面的循环语句,反之结束语句
printf("%d ", i);
这一句是执行流程
i = i + 1;
这一句是对循环变量进行调整,当没有这一语句时,循环将变成死循环
从上面的代码我们不难看出,循环语句主要有三部分组成:1、 变量的初始化
2、 循环结束条件的判断
3、 循环变量的调整
三、 for循环
从上面的 while循环,我们知道了循环语句最重要的三个部分,但大家发现没有,在 while循环中,这三个部分太过分散,一旦代码过长,将不好控制,那有没有其他的方法呢,下面就有请我们的 for循环 闪亮登场!
3.1、 for循环的语法结构和执行流程
for循环把三个部分放在一起,正因如此,它也是三种循环中用的最多的
下面,让我们来看看 for循环 的语法结构
for (表达式1; 表达式2; 表达式3){ 循环语句;}表达式1: 用于循环变量的初始化表达式2: 用于循环结束条件的判断表达式3: 用于循环变量的调整
for循环 的执行流程如下图:
首先执行表达式1初始化循环变量,接下来就是执行表达式2的判断部分,表达式2的结果如果==0,则循环结束;表达式2的结果如果!=0则执行循环语句,循环语句执行完后,再去执行表达式3,调整循环变量,然后再去表达式2的地方执行判断,表达式2的结果是否为0,决定循环是否继续。(图中的 break 和 continue 稍后介绍)
3.2、for循环的实践
下面,让我们用 for循环 在屏幕上打印1–10吧
参考代码:
#include<stdio.h>int main(){int i = 0;for (i = 0; i <= 10; i++){printf("%d ", i);}return 0;}
可以看到 for循环 的三个部分都在一起,一目了然
注:
表达式3中,写成 “i++” 或 **“++i”**都可以,在C语言中并没有太大的区别
但有些说法“++i”比“i++”更高效,
这说法在C语言中不存在,在C++中内置类型不存在,自定义类型中确实如此
四、 do-while循环
4.1、do-while循环的语法结构和执行流程
在循环语句中,do-while循环用的最少,下面是他的语法形式:
do{循环语句;}while (表达式);
注意:****“do”后面不加 “;”,而while后面加 “;”
下面让我们来看看do-while循环的执行流程图:
我们可以看到,do-while循环上来不管三七二十一,直接进入循环体,执行循环语句,然后在执行while后的判断式,表达式为真,就会进行下一次,表达式为假,则不再继续循环。
虽然在三种循环中,do-while循环用的最少,但它的先执行一次循环语句的这个特性,让它注定在某些地方有用武之地!
4.2、do-while循环的例子
例:输入一个正数,计算这个数是几位数
参考代码
#include<stdio.h>int main(){int i = 0;scanf("%d", &i);int cnt = 0;do{cnt++;i /= 10;} while (i);printf("%d\n", cnt);return 0;}
要实现这道题,好像for循环和while循环也可以做到,但是用do-while循环,但 “i”为0时,也是一位数,也是要统计计数的。
五、break语句和continue语句
5.1、 什么是break语句和continue语句
相信细心的大家在看之前的流程图时,已经注意到了有break和continue的出现,那他们是做什么用的呢?
其实,我们在执行循环时,有时候不一定要等循环结束后才退出,当有些情况发生时,也要终止循环,这是非常常见的现象。
举个生活中的例子:我们每天进行努力敲代码这个循环,当我们拿到好offer后,就停止,即终止循环,但如果中了1000万彩票,是不是立刻失去学习的动力了,不再努力敲代码了,即终止循环。
break语句的作用是用于永久的终止循环,只要break语句被执行,就会直接跳出循环,继续往后执行其他语句。
continue语句的作用是跳过本次循环continue后面的代码,在for循环和while循环中有所差异
5.2、 while循环中的break和continue
(1)break语句
下面看个例子:
题目:输出1-10中出了数字5的所有数
#include<stdio.h>int main(){int i = 1;while (i <= 10){if (i == 5)break;printf("%d", i);i++;}return 0;}
代码的输出结果是什么?没错,就是打印“1 2 3 4”!
(2)continue语句
接下来将break换成continue看看会发生什么:
#include<stdio.h>int main(){int i = 1;while (i <= 10){if (i == 5)continue;printf("%d ", i);i++;}return 0;}
代码的输出结果是什么?是除了5之外的数都打印吗?
让我们看看运行结果:
是“1234”后死循环!
为什么会出现这种情况呢,这是因为当“i”==5时进入循环体后,并没有执行后面的调整语句“i++”就直接退出本轮循环,下一次又是5进来后5退出,用不得安宁。
那这样子行不行呢:
int main(){int i = 1;while (i <= 10){printf("%d ", i);i++;if (i == 5)continue;}return 0;}
让我们看看输出结果:
显然,还是错的
这是因为continue是跳过本次循环之后的语句,把continue放在最后,跳过了个寂寞。
下面这是正确写法:
#include<stdio.h>int main(){int i = 1;while (i <= 10){i++;if (i == 5)continue;printf("%d ", i);}return 0;}
这是打印结果:
虚晃一枪,哈哈哈!没错,还是错的!大家要细心点,看仔细哦。
下面是参考代码(这次是尊嘟)
#include<stdio.h>int main(){int i = 0;while (i < 10){i++;if (i == 5)continue;printf("%d ", i);}return 0;}
可见,这小小的continue,在while中,一不留神,就会犯错,用的时候一定要小心哦
再强调一遍:continue是用于跳过本次循环后边的代码,直接去判断部分,看是否进行下一次循环
5.3、 for循环中的break和continue
首先是break语句,for循环中的break语句和while循环中的基本类似,这里就不多赘述了,让我们直接进入continue语句(我就是懒得写,略略略!)
接下来就是 for循环中的continue语句啦
让我们看看下面这个示例:
#include<stdio.h>int main(){int i = 0;for (i = 1; i <= 10; i++){if (i == 5)continue;printf("%d ", i);}return 0;}
可以看到for循环就没那么多妖了,这是为什么呢
原来for循环continue跳过后面的语句后,是一定会执行“i++”的,而while则不一定,要看具体情况,因此,用while循环更容易造成死循环。
5.4、 do-while循环中的break和continue
do-while循环中的break语句也相对比较简单,这里也不过多赘述了,下面我们看看continue语句。
下面我们看看这段代码:
#include<stdio.h>int main(){int i = 1;do{printf("%d ", i);if (i == 5)continue;i++;} while (i <= 10);return 0;}
没错,是死循环!
不知踩过一次坑的你这次有没有再跳进去呢?
下面是参考代码:
#include<stdio.h>int main(){int i = 0;do{i++;if (i == 5)continue;printf("%d ", i);}while (i < 10);return 0;}
do-while循环和while循环类似,大家可以自己分析原因,他们的这种写法导致他们非常容易陷入死循环,使用的时候一定要小心小心再小心。
好啦,本期循环语句就介绍到这里啦,希望本期博客能对你有所帮助,同时,如果有错误的地方请多多指正,让我们在C语言的学习路上一起进步!