C语言基础——循环语句

c86f430db9924f31838cdbf70f5080ae.gif

🌺​🙏🙏🙏欢迎大家观看,写的好的话希望三连感谢🙏🙏🙏🌺


文章目录

一、循环语句的介绍

二、不同循环语句的使用

1.while循环

1.1 while循环的使用方式

1.2 while循环的执行流程

2.for循环

2.1 for循环的使用方法

2.2 for循环的执行流程

3.do……while循环

3.1 do……while循环的使用方式

3.2 do……while循环的执行流程

三、break和continue在循环之中的使用

1.break

2.continue

总结


前言

大家好啊,通过我们上一章节的学习,我们了解了条件语句的具体使用方法,通过条件语句,我们便可以尝试去让计算机去判断和执行很多不同条件时的输出,但是小伙伴们肯定有的时候会困扰,如果我们在一个条件下要执行很多重复的指令怎么办呢,就比如在日常生活之中,我们可能会因为没有写作业的条件下被老师罚抄课文100遍(痛苦的回忆[:(]),这个时候怎么办呢,老老实实输入100遍嘛?肯定是不方便的,这时就要用到我们今天的循环语句啦。


一、循环语句的介绍

就前言所说,循环循环顾名思义就是重复,在一定的条件下去不断的重复一个我们要的内容,可能是一个指令,也可能是一个函数等,在C语言当中,循环语句有while循环、do……while循环、for循环等等,它们的使用场景和使用方法都不太一样,接下来我们便来一探究竟吧。

二、不同循环语句的使用

1.while循环

1.1 while循环的使用方式

在提到while循环的使用方法前,我们先不急着往下探究,让我们的脑海之中先来回忆回忆我们上一章节的if语句的语法。相信大家都没有遗忘,那么接下来我们下来先来对比对比if语句和while循环语句的语法之间不同之处和相似之处。

if (条件)

        { 语句; }

while (条件)

        { 语句; }

可以看出来,它们的语法是是非常的相似的,基本上就是一模一样。我们来尝试这写两行代码来试试看。

int main()
{if(1)printf("hello\n");return 0;
}

这样就构建了一个很简单的条件语句,那如果我们要不停的循环输出hello怎么做呢?

int main()
{while(1){printf("hello\n");}return 0;
}

我们来运行一下就会发现

b4694215774d47c0bd5b7f95a53abf7c.png

 我们的程序陷入了一个死循环,这是因为我们在while循环的条件之中输入了1,我们都知道只要不是0就是表示真,所以循环一直是真它就会不停的循环。

1.2 while循环的执行流程

while循环的具体的逻辑我们可以从下图来详细的介绍介绍。

fcee98576ed744ecac9108884fbd4f31.png

这是一个while语句的执行流程图,我们可以看到,我们的程序从红色方框里面进入语句,先判断条件成不成立,如果不成立就返回0然后从1跳出循环后程序结束,如果条件成立了,那就进入循环,然后执行语句,执行完语句后再从3返回去重新判断条件是否符合,如果这个时候还符合,那我们就从继续,反之我们就跳出循环。

由此可见,我们刚才while循环的条件就是1,无论输入多少hello条件一直是真,所以就进入了死循环了。

我们接下来写一道练习来看看,再屏幕中输入1~100的数字,那我们改怎么办呢,再学习循环之前我们可能只会printf(“1 2 3 ……”),太繁琐了,既然我们已经学了一个while该怎么使用它来简化我们的代码量呢

int main()
{int a = 1;while (a <= 100){printf("%d ", a);a++;}return 0;
}

 其实很简单,我们就让while循环的条件让 a <= 100就可以了,然后在语句之中输出a,但是要记住,在每次输出完a后要让a自增一下,这样每次a都增加1后输出出来,等到a自增到不符合条件时循环就会停下来啦。

e5ab450999fd493c9d37e2841d9ca110.png

这样是不是就方便多了。但是要注意,因为a = 100时还是满足条件的,所以进入程序后a还是自增了,所以当a跳出循环时是101而不是100哦。

d1031263062f4414a5a21665e38ccdec.png

从上面的例题我们可以知道,while循环的三个很重要的部分,

1.

01355eaf702546399104df6f6d4d0569.png

这个叫做循环的初始化,用来初始进入循环时用来判断的条件的初始值。

2.

60c77dab4896487181cd2b759fcd2627.png

这个就是循环是否进行下去的条件判断。

3.

922e2dcbf6b44241adfa19717a7a6e00.png

这个是用来调整的语句,如果失去这个,那么循环很可能就会陷入死循环。

2.for循环

for循环创建出来的原因本质上是因为while循环拥有部分的缺陷所以才创建出来的。我们通过刚刚的学习可以知道,while循环要成立有3个重要的关键点,但是随着我们的代码量的增加,我们的这三个关键点可能会被很多其他的代码所隔开,导致不方便修改,所以就出现了for循环来改变了这个缺陷。

2.1 for循环的使用方法

for循环是C语言中使用最多的循环语句,其语法结构如下所示

for ( 表达式1; 表达式2; 表达式3 )

        { 语句; }

我们可以看见,while语句中本该是条件的部分变成了3个表达式了,那这三个表达式分别是什么呢?其实我们从上面可以知道for循环产生的原因是因为while循环关键点容易被别的代码冲散而导致不方便修改的缺陷,那如果是我们来修改的话该怎么修改呢,把它放在一起不就好啦,设计师也是这么想的,所以说

表达式1  --------  初始化

表达式2  --------  判断

表达式3  --------  调整

这就是for循环的语法内容,如果我们要使用for循环来输入1~100的数字时,和while相比我们只要将原来分散开的三个条件放在一起即可

int main()
{for (int i = 1; i <= 100; i++){printf("%d ", i);}return 0;
}

我们可以看出来,代码精炼且美观了不少,同时,如果我们想要修改条件或者初始值之类的也非常容易找到并且修改。

d680d449b1e045768b4b6265f05e7747.png

注意:

6a7b8f251eef47c7a63bfc50bc90d7a6.png

这里是由分号隔开而不是逗号。

2.2 for循环的执行流程

我们接下来看看for循环的具体逻辑吧。

如图所示,

64d70e449f8d466a9fa96e21f319769b.png

我们就拿这个代码为例来分析一下

int main()
{for (int i = 1; i <= 100; i++){printf("%d ", i);}return 0;
}

首先就是初始化代码,也就是 int i = 1 ;然后到了表达式2的判断是否 i <= 100 ,如果满足条件就输出i,这里很显然是满足的所以就输出了i,这个时候就continue返回表达式2再进行判断,但是在返回的途中要先用表达式3进行调整,一直到 a = 101 时不满足表达式2的判断时跳出循环。

3.do……while循环

do……while循环是C语言中使用的最少的循环语句,它与for循环和while循环不同之处在于后者是先判断是否符合条件再进行第一次的语句运行,而前者则是先进行第一次语句运行再判断符不符合条件。

3.1 do……while循环的使用方式

其具体的语法如下所示

do

        语句;

while  ( 表达式 ); 

同样的,我们先来尝试一下如何实现在屏幕上打印1~100的数字吧。

int main()
{int a = 1;do{printf("%d ", a);a++;} while (a <= 100);return 0;
}

 很显然,其实语法和while循环的差不多,唯一的区别就在于它是先运行再判断的,无论如何它都会输出一次的,哪怕本来就不满足判断的条件

例如:

int main()
{int a = 1;do{printf("a大于100\n");a--;} while (a > 100);return 0;
}

我这里想看看a是不是大于100,这里的a是1,很显然不大于,按道理来讲应该不会输出的。我们来运行试试。

f5888da82f57442d99dd910efd682729.png

3.2 do……while循环的执行流程

以下是do……while语句的执行流程,

42e6539f7bc54d50b5d1cb584c9bc76e.png

在这里我们可以看到do……while循环再程序运行到此时不管三七二十一,直接开始对语句进行运行,在运行完一遍以后才开始来判断是否满足表达式,也就是说无论如何do……while循环都会运行一次。

三、break和continue在循环之中的使用

1.break

我们在上一章节就知道了break在条件语句之中的作用是跳出这个条件,在switch语句中如果程序在识别到了break就会跳出条件语句,这样就避免了会把后面不符合条件的内容运行出来,在循环语句之中也是一样的,假如程序在识别到了break,那么就会立刻跳出循环而不会运行下去,这里拿while循环为例。

 fcee98576ed744ecac9108884fbd4f31.png

我们可以从while的执行流程可以看出来当程序识别到了break,那么就会立刻从4结束而不继续运行,我们可以看看下面两个代码。

1.

int main()
{int a = 1;while (a <= 100){printf("%d ", a);if (a == 5)break;a++;}return 0;
}

 2.

int main()
{int a = 1;while (a <= 100){printf("%d ", a);a++;if (a == 5)break;}return 0;
}

 这个本来是输出1~100的数字的代码,经过我的这样一修改那么会变成什么样呢,上面和下面的输出结果会相同吗?我们来看看

1.

bbf9fd727848482d8741bf29f7a9de27.png

2.

8cce239491b84710a68a597d5bc64185.png

可以看到,它们并没有输出1~100,而且上面输出的值和下面的还不一样,这就是break的作用了,上面的程序当a == 5是满足了条件语句,所以程序进入后识别到了break,所以立刻跳出了循环,下面也是一样的但是由于a++的位置不同,导致当a == 4时进入循环输出过后自增变成了5满足后面的条件语句,所以就跳出循环了,如果说break下面还有代码也是不会运行的。

2.continue

continue的作用是跳过本次循环,它和break相比没有那么绝情,只是跳过本次循环,相当于时跳过了continue后面的代码直接进入下一次循环,但是要记住,如果continue下面有调节的代码就很容易死循环。

int main()
{int a = 1;while (a <= 100){printf("%d ", a);if (a == 5)continue;a++;}return 0;
}

如果这个时候运行代码就会无限制的输入5了

53f76ba59b4c4ea79678b9f0e81d7e31.png

所以说如果是用来调节的代码千万不要放在continue后面。


总结

通过本章节的学习,我们已经基本上了解了循环语句的使用方法,但是其实循环语句还可以嵌套使用,一般来说都可以由两个循环嵌套起来,这个我们下一章节再讲,感谢小伙伴们的观看,如果有什么不对的地方请指正,我一定会改正的,谢谢大家。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/10550.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【免费Java系列】大家好 ,今天是学习面向对象高级的第十二天点赞收藏关注,持续更新作品 !

这是java进阶课面向对象第一天的课程可以坐传送去学习http://t.csdnimg.cn/Lq3io day10-多线程 一、多线程常用方法 下面我们演示一下getName()、setName(String name)、currentThread()、sleep(long time)这些方法的使用效果。 public class MyThread extends Thread{publi…

进入泛型的世界

泛型的理解和好处 泛型的好处 编译时&#xff0c;检查添加元素的类型&#xff0c;提高了安全性减少了类型转换的次数&#xff0c;提高效率 不使用泛型 Dog-加入->Object-取出->Dog&#xff08;向下转型&#xff09; Dog放入到ArrayList 会先转成Object&#xff0c;在转…

SpringBoot自定义初始化sql文件 支持多类型数据库

我在resources目录下有init.sql初始化sql语句 指定sql文件的地址 sql内容如下&#xff1a; /*角色表*/ INSERT INTO #{schema}ccc_base_role (id, create_time, create_user_id, is_delete, role_name, status, update_time, update_user_id) VALUES(b89e30d81acb88448d412…

壹资源知识付费系统源码-小程序端+pc端

最新整理优化&#xff0c;含微信小程序和pc网页。内置几款主题&#xff0c;并且可以自己更改主题样式&#xff0c;各区块颜色&#xff0c;文字按钮等。 适用于知识付费类资源类行业。如&#xff1a;项目类&#xff0c;小吃技术类&#xff0c;图书类&#xff0c;考研资料类&…

漫谈AI时代的手机

以chatGPT 为代表的大语言的横空出世使人们感受到AI 时代的到来&#xff0c;大语言模型技术的最大特点是机器能”懂人话“&#xff0c;”说人话“了。如同历史上任何一个革命性工具的出现一样&#xff0c;它必将对人类生活和工作产生巨大的影响。 在这里。我们不妨畅想一下啊AI…

IM是什么意思?

IM&#xff08;即时通讯&#xff09;作为现代通讯领域的重要且普遍应用&#xff0c;已成为人们日常生活和工作中不可或缺的通信方式。随着科技的不断发展和互联网的普及&#xff0c;IM工具通过实时信息传递&#xff0c;将沟通变得更加迅速、便捷、高效。 IM的诞生极大地改变了…

HarmonyOS NEXT星河版之模拟图片选择器(下)---使用Swiper实现图片滑动预览

文章目录 一、目标二、开撸2.1 改造图片预览Dialog2.2 改造主页面2.3 主页面完整代码 三、小结 一、目标 在前面的介绍中&#xff0c;查看选中的图片都是单张预览&#xff0c;接下来要改造成多张可滑动预览&#xff0c;如下&#xff1a; 二、开撸 2.1 改造图片预览Dialog …

刷t2、、、

、、 public class ThisTest {public static void main(String args[]) {int i;for (;;) {System.out.println(1);}} } while()的循环条件等于for中循环条件。循环体会有一个条件改变等于for中类似自增条件。while()判断条件一般在while前面会初始化跟for中初始化一样。这样 w…

CSS滑动门

CSS滑动门使各种特殊形状的背景能够自动拉伸滑动&#xff0c;以适应元素内部的文本内容&#xff0c;其原理是&#xff1a;利用CSS精灵和盒子撑开宽度适应不同字数的导航栏。 特点&#xff1a; 1.可以根据导航字数自动调节宽度&#xff1b; 2.可以以简单的背景图实现炫彩的导航条…

CentOS 8.5 安装配置 Tinyproxy 轻量代理服务器 Windows10 系统设置http代理 详细教程

1 下载 下载地址 2 上传服务器并解压 tar zxvf tinyproxy-1.11.2.tar.gz 3 安装配置 #安装依赖软件 yum install automake cd tinyproxy-1.11.2/ #生成configure ./autogen.sh # ./configure --prefix/usr/local/tinyproxy make make install 4 配置环境 vim /etc/prof…

Excel快速填充序号的方法

Excel快速填充序号常用的方法。 方法一&#xff1a;填充前面序号后拖拽 特点&#xff1a; 能有规律的填充&#xff0c;排序的行数由拖拽的行数决定。 此方法填充的序号等效于手打的序号&#xff0c;删除一行后下一行不会自动更新排序。 步骤&#xff1a;输入两个初始序号&…

Python | Leetcode Python题解之第83题删除排序链表中的重复元素

题目&#xff1a; 题解&#xff1a; class Solution:def deleteDuplicates(self, head: ListNode) -> ListNode:if not head:return headcur headwhile cur.next:if cur.val cur.next.val:cur.next cur.next.nextelse:cur cur.nextreturn head

matlab使用教程(69)—创建包含多个 x 轴和 y 轴的图

此示例说明如何创建这样一张图&#xff0c;通过坐标区底部和左侧的轴放置第一个绘图&#xff0c;并通过坐标区顶部和右侧的轴放置第二个绘图。 使用 line 函数绘制一个红色线条。将 x 轴和 y 轴的轴线颜色设置为红色。 注意&#xff1a;从 R2014b 开始&#xff0c;您可以使用圆…

基于Python+Django+MySQL实现Web版的增删改查

Python Web框架Django连接和操作MySQL数据库学生信息管理系统(SMS),主要包含对学生信息增删改查功能&#xff0c;旨在快速入门Python Web。 开发环境 开发工具&#xff1a;Pycharm 2020.1开发语言&#xff1a;Python 3.8.0Web框架&#xff1a;Django 3.0.6数据库&#xff1a;…

auto->decltype

auto c11标准才有的,c14丰富了很多这个相关的用法 声明变量别用auto,auto是让编辑器来自己推断,很影响运行效率 #include<iostream> using namespace std;auto ave(int a, int b) {return a b; }int main() {cout << typeid(ave(1, 2)).name()<<endl;ret…

Colab/PyTorch - 003 Transfer Learning For Image Classification

Colab/PyTorch - 003 Transfer Learning For Image Classification 1. 源由2. 迁移学习(ResNet50)2.1 数据集准备2.2 数据增强2.3 数据加载2.4 迁移学习2.5 数据集训练&验证2.6 模型推理 3. 总结4. 参考资料 1. 源由 迁移学习已经彻底改变了 PyTorch 中处理图像分类的方式…

基于PSO粒子群优化的PV光伏发电系统simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1 粒子群优化算法基础 4.2 PV系统及其最大功率点跟踪 4.3 PSO在PV MPPT中的应用 5.完整工程文件 1.课题概述 基于PSO粒子群优化的PV光伏发电系统simulink建模与仿真。通过PSO粒子群优化进行最大功率…

电影院购票管理系统

文章目录 电影院购票管理系统一、项目演示二、项目介绍三、部分功能截图四、部分代码展示五、底部获取项目源码&#xff08;9.9&#xffe5;带走&#xff09; 电影院购票管理系统 一、项目演示 电影院售票管理系统 二、项目介绍 基于springbootvue的前后端分离电影院购票管理…

开发利器 - docker 安装运行 mysql

本文选择安装的mysql版本为5.7 &#xff0c;安装环境 mac 1、查看镜像是否存在 docker search mysql:5.7 2、拉取镜像 docker pull mysql:5.7 3、运行镜像 docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORDroot1234 -d mysql:5.7 --name&#xff1a;指定容器…

4---自动化构建代码(逻辑梳理,轻松理解)

一、需求引出&#xff1a; 在使用编译器编译代码时&#xff0c;无论我们在一个项目中写了多少个文件(包括头文件、源文件)&#xff0c;我们都可以一键完成编译&#xff0c;编译器会自动处理各个文件之间的包含&#xff0c;调用关系。但是在Linux中&#xff0c;我们在一个目录下…