分支与循环(2)

作者:几冬雪来

时间:2022年12月6日

内容:while,do...while,for三大循环

目录

前言: 

1.什么是循环语句:

2.三大循环语句:

(1)while循环:

continue语句嵌套入while语句:

(2)for循环:

(3)do...while循环:

(4)三大循环的区别:

(5)死循环:

结尾:


前言: 

在上一篇博客中我们了解到了循环与分支中的分支部分,那么接下来我们将进一步的讲解分支与循环之间的循环部分。我们通过学习可以认识到,分支语句的本质就是选择语句,让你在两个或者多个条件中选择一个正确的条件后,执行该条件中的语句。那么循环语句呢?接下来听我来说明。

 上图可理解为循环语句的草图。(雾

1.什么是循环语句:

循环语句顾名思义就是循环,重复进行某一动作或者事情,当某一时刻我们打破了循环的必要条件的时候循环也就会停止。这种就类似盗梦空间,一个梦接着一个梦,我们会重复的做让自己醒来这个想法,直到自己回到现实世界,梦空间停止。

 这样讲有点抽象,那我就举我们生活中的例子。就例如我们学生,每周的星期一到星期五因为要上学读书,所以我们会一直重复在某个时间被闹钟吵醒,然后起床后洗漱吃早饭后去上学这个动作,当来到星期六的时候,因为没有要上的课,所以我们就可以睡晚一会,这个时候循环的条件就被破坏,循环就会停止下来。我们可以将它初步理解为我们的循环语句。

2.三大循环语句:

while循环。

do..while循环。

for循环。

(1)while循环:

相信大家都已经知道if分支语句了吧。我们写一个代码来区别if分支语句和while循环语句的区别。

 这便是我们的if语句,当a满足if的条件的时候,执行if中的语句,执行一次后便结束编程。但是当我们将这里的if换为while会发生什么呢?我们来修改一下代码,并将它打印出来。

我们可以看见在我们的编译板上输出了循环的hehe,这就是while语句和if语句的区别。while在我们输入的条件满足while后面()中的条件的时候也就是条件为真的时候while,while中的语句就会反复执行,直到 while的条件为假的时候,循环不成立,这个时候循环就结束。那么我们怎么将这个代码变成如if一样只打印一个hehe的语句?

 这里我们只要在printf后面将a进行++循环就只能循环一次。因为这里我们将a++,也就是将a的值从0变为了1,这个时候a再来到while循环语句,while(a(1)== 0)为假不成立,所以循环不成立,所以while中的语句不再执行,程序只执行一次。

同时我们也可以通过使用while循环来限制打印hehe的个数。比如我们想打印5个hehe,我们这个只要把while循环的循环条件设置为a<5即可。

我们也可以把while的循环语句好if的分支语句进行结合,也是嵌套。这样我们可以实现不同的结果。通常情况下while中嵌套if,或者if中嵌套while都是可以的,在这里我们就讲一下while循环语句中嵌套if语句。

 这就是循环语句和分支语句的嵌套使用。只是这里有人会不懂是为什么,那我来解释一下。首先我们对a进行初始化,因为a满足while条件却不满足if的条件,所以即使if语句在前面也不执行,当a为5的时候,满足了while的同时满足了if语句,if里面的break语句就起到了作用(注:break的作用是跳出循环而不是if语句)。所以跳出循环,循环结束,最后打印出0--4的数字。

continue语句嵌套入while语句:

我们将while中嵌套if语句的代码进行修改,将if语句的break修改为continue会发生什么呢?我们来试验一下看看。

这里我们将这个代码与上面的break的代码进行对比,我们可以发现continue代码打印出来结果的后面少了一连串的中文结束语。我们要了解为什么的话首先要了解continue的作用是什么。

continue是用来终结此次循环的作用,当循环遇到continue后循环的语句不再执行,代码直接跳到循环部分,进行下一次的循环。

也就是这个代码一直会是a为5,然后无限的循环下去。我们也可以在while条件中输入scanf和getchar等操作符。

但是,我们getchar和putchar操作符还没有详细讲过,所以我们就先暂且搁置,只要知道有这个用法即可。就是是我们while语句的用法。

(2)for循环:

for循环是我们三大循环语句的第二种,for循环的写法也是十分的新奇。

第一个空用来初始化值,类似于int a = 0,第二个空便是判断也就是while循环的条件,最后一个是对数值的调整,也就是a++或a--之类的改变某些值的表达式。

现在我们用for循环来代替while循环来输入数字0--10的值。

在for语句中break的使用和在while语句的使用方法和结果是一样的,这里我就不列举出来了,但是break虽然没有区别,但是在while中使用continue和在for循环中使用continue却是两种截然不同的结果。

对比while循环在输出输出4的时候不再往下输出,我们可以看见在for循环中使用continue的话,除了输出结果少了5后,程序依旧会继续输入下去。就是因为我们for循环的特殊性,因为for循环的++是在for循环的调整中的,所以continue跳过接下来的语句并不会影响a进行++。当a++为6后if语句不成立,因此程序继续输出。 

建议:

1.循环变量就是我们的for循环中初始化的变量,我们在for循环里面不能对该变量进行二次修改,否则程序很容易发生崩溃。

2. 我们写for循环的时候一般判断条件都是单一的'<'或者'>',少使用'<='和'>='。

同样的for循环也可以scanf输入我们的数组每个arr[]的值。

 这里给大家普及一个知识,for循环中初始化,判断和调整3个部分都可以省略【for( ; ; ;)】。但是注意省略掉判断部分,循环会进入死循环。

在此同时我们要知道,for循环的条件并不单调,不是初始化,判断和调整都只能输出一个词,我们也可以输出多个词。但是在输入判断的时候我们要用&&和||进行连接。接下来我就举一个简单的代码来表达一下吧。

for(int x = 0,int y = 0;x<5&&y<7;x++,y++)

那可以可以省略初始化的值呢,那当然是可以的,不过省略了初始化的值,同一个代码可能会出现不同的结果。就比如我下面列举的一个代码。

这是我们的原代码,我们可以看见这里打印了9个hehe,现在我们把代码中for循环里的初始化的区域都去掉后再次编译函数,看看结果有什么不同之处。

我们把两个代码进行对比一下,可看出来第一个代码打印了9个hehe,第二个代码打印了3个hehe。这是什么原因?因为for循环的for中的j = 0被去掉了,i的第一次循环的时候,j就已经变为3了,第二次for循环没有将j重新初始化为0,所以j依旧为3,循环条件不满足跳过循环。这就导致了我们只打印出了3个hehe。

(3)do...while循环:

我们的do..while循环语句和while与for语句有不同的地方,我们可以看见while的判断被放在了最后面,这样就造成了do...while循环与其他两个循环的最本质的区别。这个我们放到后面来讲解。

我们这里故技重施,用do...while循环来打印有序的数字。

但是在3个循环语句中,do...while循环是使用率最少的,我现在来对3大循环语句的使用率进行排序。

for循环>while循环>do...while循环。

因为do...while循环的限制比较多,因此我们并不长使用。而do...while循环的break和continue的用法就更为少数,我就不给大家细讲了。

注:do...while循环最后的while要加入符号';',不然程序会报错。

(4)三大循环的区别:

前面我们讲过了while和for循环的区别,在continue的使用上for和while的结果不一样。那么do...while与其他的循环有什么区别。我们可以看见do...while的while判断语句放在了后面,这就意味着while是先执行再判断,这就是do...while与其他循环的区别,其他循环是满足条件执行语句,而do...while是先执行后判断,这就导致了while和for循环中的循环语句在特殊情况下可能一次都不会执行,但是do...while语句最少都会执行一次。

(5)死循环:

死循环是我们在编译循环语句中会出现的问题,那么死循环是什么,就和它的名字一样,循环一直进行而没有达到循环停止所需要的条件我们将其称为死循环。我们上面的一个代码就是死循环的模式,我重新书写一下,大家可以去试验看看。

#include <stdio.h>

int main()
{
    int a = 0;
    while(a == 0)
    {
        printf("hehe\n");
    }
    retrun 0;
}

大家以后在编译代码的时候如果看到了死循环的话,一定要先去循环部分查找错误,也可能程序就在这里出错了。

结尾:

到这里我们的分支语句和循环语句的基本讲解就结束了,在下一篇博客中我会教大家二分查找的使用,以此来结束我们分支与循环的这一个小课程的进程。希望我的博客能为大家在C语言的学习中提供一定的帮助。

  • 7
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值