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.xdnf.cn/news/1419950.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

初识sql注入--手工注入

目录 可能使用的sql函数 入侵网站方式 1、文件上传漏洞 2、rce 3、sql注入 SQL注入 什么是sql注入 进行SQL注入 实验环境 开始实验&#xff08;使用information_shema数据库&#xff09; 1、进入靶场 2、报列数 下面来解释一下为什么要照上面SQL语句写 url编码 单…

六级翻译笔记

理解加表达 除了专有名词不能自己理解翻译&#xff0c;其它都可以 时态一般唯一 题目里出现有翻译为 客观存在&#xff1a; there be 单词结尾加er和ee的区别&#xff1a;er是主动&#xff0c;ee是被动 中文句子没有被动&#xff0c;也可以英文翻译为被动 中文的状语可以不是…

【Linux笔记】 基础指令(二)

风住尘香花已尽 日晚倦梳头 重命名、剪切指令 -- mv 简介&#xff1a; mv 命令是 move 的缩写&#xff0c;可以用来移动文件或者将文件改名&#xff0c;是 Linux 系统下常用的命令&#xff0c;经常用来备份文件或者目录 语法&#xff1a; mv [选项] 源文件或目录 目标文件或目录…

stm32——OLED篇

技术笔记&#xff01; 一、OLED显示屏介绍&#xff08;了解&#xff09; 1. OLED显示屏简介 二、OLED驱动原理&#xff08;熟悉&#xff09; 1. 驱动OLED驱动芯片的步骤 2. SSD1306工作时序 三、OLED驱动芯片简介&#xff08;掌握&#xff09; 1. 常用SSD1306指令 2. …

iOS 提交项目到github(本地没有该项目)

流程简介 申请github账号&#xff08;如果有请跳过&#xff09; add repository创建项目开心的提交就好 具体过程 1. 申请账号&#xff08;本部分不做介绍&#xff0c;请自行研究&#xff09; 2. 如果有账号&#xff0c;按照下面图片依次操作就好 点击该图中的New reposito…

AI语音模型PaddleSpeech踩坑(安装)指南

PaddleSpeech简介 PaddleSpeech 是基于飞桨 PaddlePaddle 的语音方向的开源模型库&#xff0c;用于语音和音频中的各种关键任务的开发&#xff0c;包含大量基于深度学习前沿和有影响力的模型。 PaddleSpeech安装步骤 提示&#xff1a;要找到一个合适的PaddleSpeech版本与pad…

sklearn之线性回归——以上证红利指数为例

文章目录 线性回归概念使用sklearn实现上证中立指数预测内置数据集的加载与处理 外部数据集的加载和处理数据内容数据加载和处理 开始预测分割数据集导入线性回归模型查看线性回归模型的系数绘制预测结果预测效果评估 最终代码 线性回归 线性回归&#xff08;Linear Regressio…

无管理员权限linux系统手动切换cuda版本

查看当前计算机cudatoolkit的版本 nvcc -V下载 如果想切换到指定版本&#xff0c;则去官网下载&#xff08;10.1版本为例&#xff09;&#xff1a; cuda下载 cudnn下载 将下载好的文件放到服务器的文件夹中 安装 安装cuda sh cuda_10.1.243_418.87.00_linux.run选择接受 …

用户登录后端:登录密码解密后用PasswordEncoder验证密码是否正确

前置知识: 前端登录加密看用户登录 PasswordEncoder加密看PasswordEncoder详解 项目中因为要判断用户登录密码是否正确&#xff0c;通过输入错误次数锁住用户 1.后端配置rsa私钥 #密码加密传输&#xff0c;前端公钥加密&#xff0c;后端私钥解密 rsa:private_key: xxxx2. 读…

parallels desktop19最新免费Mac电脑虚拟机软件

Parallels Desktop是一款运行在Mac电脑上的虚拟机软件&#xff0c;它允许用户在Mac系统上同时运行多个操作系统&#xff0c;比如Windows、Linux等。通过这款软件&#xff0c;Mac用户可以轻松地在同一台电脑上体验不同操作系统的功能和应用程序&#xff0c;而无需额外的硬件设备…

【深耕 Python】Quantum Computing 量子计算机(5)量子物理概念(二)

写在前面 往期量子计算机博客&#xff1a; 【深耕 Python】Quantum Computing 量子计算机&#xff08;1&#xff09;图像绘制基础 【深耕 Python】Quantum Computing 量子计算机&#xff08;2&#xff09;绘制电子运动平面波 【深耕 Python】Quantum Computing 量子计算机&…

软件验收计划书-验收规程(Word原件)

编写软件验收计划是软件开发过程中的一个关键步骤&#xff0c;其重要性体现在以下几个方面&#xff1a; 明确验收标准&#xff1a;软件验收计划详细列出了验收的标准、测试方法、测试环境等&#xff0c;确保所有相关人员对验收的期望和要求有清晰的认识。这有助于避免在验收阶段…

windows@注册表介绍@注册表的查看和编辑操作

文章目录 abstractrefs注册表的主要组件包括根键极其缩写名称&#x1f47a;子键特性 查看注册表&#x1f47a;使用powershell查看路径下的子路径声明概念Get-ChildItem查看注册表路径下的项Set-Location进入注册表路径举例说明查看文件系统某个路径下的项查看某个注册表路径的项…

以Ubuntu 18.04为例,介绍如何通过GUI安装Vmware Tools

正文共&#xff1a;1024 字 15 图&#xff0c;预估阅读时间&#xff1a;1 分钟 我前面已经在我的VMware ESXi主机上装了上百台虚拟机了&#xff0c;系统涉及的面也算得上非常广了&#xff0c;包括Windows系列&#xff08;Windows 7&#xff08;VMware虚拟机部署&#xff08;Win…

springboot+vue+mybatis灵活就业服务平台+PPT+论文+讲解+售后

随着网络科技的不断发展以及人们经济水平的逐步提高&#xff0c;网络技术如今已成为人们生活中不可缺少的一部分&#xff0c;而微信小程序是通过计算机技术&#xff0c;针对用户需求开发与设计&#xff0c;该技术尤其在各行业领域发挥了巨大的作用&#xff0c;有效地促进了灵活…

电脑nvidia驱动和合适版本的duda--自用 回忆版

参考文献&#xff1a;http://t.csdnimg.cn/ecDuG 内容很多抄的这个&#xff0c;主要害怕链接失效 一、Ubuntu 18.04 安装NVIDIA显卡驱动 1、查看本机显卡能够配置的驱动信息 ubuntu-drivers devices所以可以看出&#xff0c;推荐 nvidia-driver-530 - distro non-free 2、安…

暗区突围资格 暗区突围测试资格 暗区突围资格申请

《暗区突围》作为一款备受瞩目的战术射击手游&#xff0c;以其独特的撤离玩法、高度拟真的枪战体验以及丰富的装备搜集系统&#xff0c;在玩家群体中迅速积累了极高的人气。游戏设定在一个充满未知与危险的封闭区域&#xff0c;玩家需要凭借智慧、策略与精湛的操作&#xff0c;…

一个注解完美实现分布式锁(AOP)

前言 学习过Spring的小伙伴都知道AOP的强大&#xff0c;本文将通过Redisson结合AOP&#xff0c;仅需一个注解就能实现分布式锁。 &#x1f36d; 不会使用aop和redisson的小伙伴可以参考&#xff1a; 【学习总结】使Aop实现自定义日志注解-CSDN博客 【学习总结】使用分布式锁和…

小学拼音弄一下

import re from xpinyin import Pinyindef remove_middle_characters(text):# 仅保留汉字chinese_chars re.findall(r[\u4e00-\u9fff], text)cleaned_text .join(chinese_chars)# 如果字符数为偶数&#xff0c;则在中间添加空格if len(cleaned_text) % 2 0:middle_index le…

Sqlite在Mybatis Plus中关于时间字段的处理

我的个人项目中&#xff0c;使用Mybatis-Plus 和 Sqlite数据库&#xff0c; 但是在存储和查询时间字段的时候&#xff0c;总是出现问题&#xff0c;记录下我解决问题的过程。 Sqlite会默认把时间字段转成时间戳存储到数据库的字段中&#xff0c;看起来不直观&#xff0c;所以我…