当前位置:首页 » 《随便一记》 » 正文

C语言中的分支和循环(下)

8 人参与  2024年02月23日 18:26  分类 : 《随便一记》  评论

点击全文阅读


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(表达式成立),则执行循环语句,语句执行完后再次判断,是否进行下一次的循环,以此类推。(图中出现的 breakcontinue 稍后介绍)

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语言的学习路上一起进步!


点击全文阅读


本文链接:http://zhangshiyu.com/post/69656.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1