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.mfbz.cn/a/615647.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ICode国际青少年编程竞赛- Python-4级训练场-综合训练4

ICode国际青少年编程竞赛- Python-4级训练场-综合训练4 1、 Dev.turnLeft() Dev.step(3) Dev.turnRight() Dev.step(3) Dev.turnLeft() Dev.step(4)2、 for i in range(3):Dev.step(2)Dev.turnRight()while Flyer[i].disappear():wait()Dev.step(2 i)Dev.turnLeft()3、 …

【机器学习】逻辑回归:智能垃圾邮件分类实例

逻辑回归&#xff1a;智能垃圾邮件分类的利器 一、引言二、逻辑回归概述三、垃圾邮件分类实例数据准备特征选择与建模 四、总结与展望 一、引言 随着互联网的迅猛发展&#xff0c;电子邮件已成为人们日常生活和工作中不可或缺的一部分。然而&#xff0c;与此同时&#xff0c;垃…

docker+nginx+Jenkins自动构建

文章目录 前言一、实操记录问下AI&#xff1a;jenkins 配置新增一个mobilegit配置Build TriggersBuild EnvironmentBuild StepsPost-build Actions 上面一顿配置下来&#xff0c;构建 -- FAILURE 总结 前言 在已有docker-Jenkins-nginx 部署方案上&#xff0c;在另外一台测试…

【定制化】在Android平台实现自定义的程序启动页

特别说明&#xff1a;以下仅适用于Android平台。 实现原理 创建安卓端自定义的Activity禁用UnityPlayerActivity的启动Logo改用自定义Activity 示例效果 参考简单步骤或详细步骤都可实现。 自定义的启动动画&#xff0c;效果如下&#xff1a; 简单步骤 三步操作实现启动动画…

亚信安全发布《2024年第一季度网络安全威胁报告》

亚信安全2024年第一季度网络安全威胁报告 一季度威胁概览 《亚信安全2024年第一季度网络安全威胁报告》的发布旨在从一个全面的视角解析当前的网络安全威胁环境。此报告通过详尽梳理和总结2024年第一季度的网络攻击威胁&#xff0c;目的是提供一个准确和直观的终端威胁感知。…

Excel 分组汇总后删除明细

有 Excel 数据如下所示&#xff1a; IDCriteria1Criteria2Criteria3Criteria4101210271239312381236123171826182918239182120182147 需要按 ID 分组汇总其余列&#xff0c;结果如下&#xff1a; IDCriteria1Criteria2Criteria3Criteria410121027123932561826939267 解法及简…

yo!这里是socket网络编程相关介绍

目录 前言 基本概念 源ip&&目的ip 源端口号&&目的端口号 udp&&tcp初识 socket编程 网络字节序 socket常见接口 socket bind listen accept connect 地址转换函数 字符串转in_addr in_addr转字符串 套接字读写函数 recvfrom&&a…

线性集合:ArrayList,LinkedList,Vector/Stack

共同点&#xff1a;都是线性集合 ArrayList ArrayList 底层是基于数组实现的&#xff0c;并且实现了动态扩容&#xff08;当需要添加新元素时&#xff0c;如果 elementData 数组已满&#xff0c;则会自动扩容&#xff0c;新的容量将是原来的 1.5 倍&#xff09;&#xff0c;来…

STK与matlab交互 Astrogator模块(14)

一、背景介绍 高轨卫星的轨道保持。与任何其它轨道状态一样&#xff0c;地球同步轨道也会受到各种扰动力的影响&#xff0c;这些摄动力会影响GEO卫星在位置方面的稳定性。摄动的主要来源是地球的非地球位势、太阳辐射压力和第三体效应&#xff08;主要是月球和太阳&#xff09…

特产销售|基于Springboot+vue的藏区特产销售平台(源码+数据库+文档)​

目录 基于Springbootvue的藏区特产销售平台 一、前言 二、系统设计 三、系统功能设计 1系统功能模块 2管理员功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff1a;✌️大厂码农|毕设布道…

JavaScript 防抖与节流——以游戏智慧解锁实战奥秘

&#x1f525; 个人主页&#xff1a;空白诗 文章目录 &#x1f3ae; 引言❓ 什么是防抖和节流&#x1f3f9; 防抖(Debounce) - 锁定追击&#xff0c;精确无误&#x1f4cc; 基础概念&#x1f4cc; 适用场景&#x1f4cc; 实战代码&#xff1a;防抖 应用于输入框的实时搜索 &…

【Python-爬虫】

Python-爬虫 ■ 爬虫分类■ 1. 通用网络爬虫&#xff1a;&#xff08;搜索引擎使用&#xff0c;遵守robots协议&#xff09;■ robots协议&#xff08;君子协议&#xff09; ■ 2. 聚集网络爬虫&#xff1a;自己写的爬虫程序 ■ urllib.request&#xff08;要导入的模块&#x…

带有-i选项的sed命令在Linux上执行成功,但在MacOS上失败了

问题&#xff1a; 我已经成功地使用以下 sed 命令在Linux中搜索/替换文本&#xff1a; sed -i s/old_string/new_string/g /path/to/file然而&#xff0c;当我在Mac OS X上尝试时&#xff0c;我得到&#xff1a; command i expects \ followed by text我以为我的Mac运行的是…

高效文件管理:一键提取文件名关键字,快速创建对应文件夹

在数字化时代&#xff0c;文件管理成为我们日常工作中不可或缺的一部分。随着文件数量的不断增加&#xff0c;如何高效、有序地管理这些文件成为了许多人的挑战。传统的文件管理方法&#xff0c;如手动创建文件夹和分类文件&#xff0c;不仅耗时耗力&#xff0c;而且容易出错。…

使用html和css实现个人简历表单的制作

根据下列要求&#xff0c;做出下图所示的个人简历&#xff08;表单&#xff09; 表单要求 Ⅰ、表格整体的边框为1像素&#xff0c;单元格间距为0&#xff0c;表格中前六列列宽均为100像素&#xff0c;第七列 为200像素&#xff0c;表格整体在页面上居中显示&#xff1b; Ⅱ、前…

多功能投票小程序基于ThinkPHP+FastAdmin+Uniapp(源码搭建/上线/运营/售后/维护更新)

基于ThinkPHPFastAdminUniapp开发的多功能系统&#xff0c;支持图文投票、自定义选手报名内容、自定义主题色、礼物功能(高级授权)、弹幕功能(高级授权)、会员发布、支持数据库私有化部署&#xff0c;Uniapp提供全部无加密源码。 功能特性

Vue-watch监听器

监听器 watch侦听器&#xff08;监视器&#xff09;简单写法完整写法 watch侦听器&#xff08;监视器&#xff09; 作用&#xff1a;监视数据变化&#xff0c;执行一些业务逻辑或异步操作 语法&#xff1a; watch同样声明在跟data同级的配置项中简单写法&#xff1a; 简单类型…

ios 开发如何给项目安装第三方库,以websocket库 SocketRocket 为例

1.brew 安装 cococapods $ brew install cocoapods 2、找到xcode项目 的根目录&#xff0c;如图&#xff0c;在根目录下创建Podfile 文件 3、在Podfile文件中写入 platform :ios, 13.0 use_frameworks! target chat_app do pod SocketRocket end project ../chat_app.x…

攻防世界-web-fileinclude

题目 解题 原题代码 <html> <head><meta http-equiv"Content-Type" content"text/html; charsetutf-8" /></head><b>Notice</b>: Undefined index: language in <b>/var/www/html/index.php</b> on lin…

【硬件模块】ESP-01SWiFi模块基于AT指令详解(WiFi,TCP/IP,MQTT)

ESP-01S ESP-01S是由安信可科技开发的一款Wi-Fi模块。其核心处理器是ESP8266&#xff0c;该处理器在较小尺寸的封装中集成了业界领先的Tensilica L106超低功耗32位微型MCU&#xff0c;带有16位精简模式&#xff0c;主频支持80MHz和160MHz&#xff0c;并集成了Wi-Fi MAC/BB/RF/P…