C语言基础——循环语句

news2024/12/24 11:33:27

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.coloradmin.cn/o/1665795.html

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

相关文章

Java | Leetcode Java题解之第84题柱状图中最大的矩形

题目&#xff1a; 题解&#xff1a; class Solution {public int largestRectangleArea(int[] heights) {int n heights.length;int[] left new int[n];int[] right new int[n];Arrays.fill(right, n);Deque<Integer> mono_stack new ArrayDeque<Integer>();f…

https免费证书获取

获取免费证书的网址&#xff1a; Certbot 1. 进入你的linux系统&#xff0c;先安装snapd&#xff0c; yum install snapd 2. 启动snapd service snapd start 3.安装 Certbot snap install --classic certbot 注意如下出现此错误时&#xff0c;需要先建立snap 软连接后&am…

MVCC 详解

介绍 MVCC&#xff0c;全称 Multi-Version Concurrency Control&#xff0c;即多版本并发控制 MVCC的目的主要是为了提高数据库并发性能&#xff0c;用更好的方式去处理读-写冲突&#xff0c;做到即使有读写冲突时&#xff0c;也能做到不加锁。 这里的多版本指的是数据库中同时…

Ubuntu 和 Windows之间无法复制粘贴问题解决方法

需要安装open-vm-tools&#xff0c;官方安装open-vm-tools的网址&#xff1a;安装 Open VM Tools (vmware.com)

vue 点击平滑到指定位置并绑定页面滑动效果

1.html元素 写出对应的数据块&#xff08;注意添加ref) 用于获取元素位置 <template><div class"index-page" ><div class"top-head" ref"index"><img src"logo.png" style"height: 40px;margin-right: 2…

代码+视频,R言语处理数据中的缺失值

在SCI论文中&#xff0c;我们不可避免和缺失数据打交道&#xff0c;特别是在回顾性研究&#xff0c;对于缺失的协变量&#xff08;就是混杂因素&#xff09;&#xff0c;我们可以使用插补补齐数据&#xff0c;但是对于结局变量和原因变量的缺失&#xff0c;我们不能这么做。部分…

网络端口占用问题的综合调研与解决方案

原创 Randy 拍码场 问题背景 去年底信息安全团队进行网络权限治理&#xff0c;要求所有应用实例使用静态IP&#xff0c;公网访问策略与静态IP绑定&#xff1b;之后实例重启时偶现“端口被占用”错误。通过分析总结应用日志&#xff0c;共有以下4种错误类型&#xff0c;实质都是…

WAAP全站防护理念,发现和保护敏感数据

数据是现代企业的新石油&#xff1a;正确使用它可以促进公司的发展并帮助企业在竞争中领先。就像石油一样&#xff0c;原始数据和未被发现的数据是毫无用处的&#xff0c;企业将无法从中受益&#xff1b;在最坏的情况下&#xff0c;它可能会导致安全事件。这也是企业投资敏感数…

MySQL数据库的初始化(创建库、创建表、向数据库添加测试数据)

MySQL数据库的初始化&#xff08;创建库、创建表、向数据库添加测试数据&#xff09; MySQL数据库简介MySQL创建一个新的数据库MySQL创建一张新的数据表简单&#xff08;设置&#xff09;表复杂&#xff08;设置&#xff09;表 填充测试数据SQL语句mysql>模式下输入的每句sq…

Spring Cloud | “微服务“ 架构 与 Spring Cloud

“微服务” 架构 与 Spring Cloud 目录: "微服务" 架构 与 Spring Cloud1. 认识架构"单体" 架构"SOA" 架构"微服务" 架构 2. "微服务架构" 的功能 :① 微服务架构的 "自动化部署"② 服务 "集中化管理"③…

PostgreSQL的学习心得和知识总结(一百四十三)|深入理解PostgreSQL数据库之Support event trigger for logoff

目录结构 注&#xff1a;提前言明 本文借鉴了以下博主、书籍或网站的内容&#xff0c;其列表如下&#xff1a; 1、参考书籍&#xff1a;《PostgreSQL数据库内核分析》 2、参考书籍&#xff1a;《数据库事务处理的艺术&#xff1a;事务管理与并发控制》 3、PostgreSQL数据库仓库…

转载:ubuntu18.04 安装wine以及添加mono和gecko打开简单.net应用的方法

https://www.cnblogs.com/jinanxiaolaohu/p/12191576.html 1. 今天突然想试试能不能用ubuntu跑一下公司的.net的智能客户端(SmartClient). 想到的办法就是 安装wine 但是过程略坑..这里简单说一下总结之后的过程. 2. 第一步安装wine相关内容 查了下有winehq和wine两种. …

凸优化理论学习二|凸函数及其相关概念

系列文章目录 凸优化理论学习一|最优化及凸集的基本概念 文章目录 系列文章目录一、凸函数&#xff08;一&#xff09;凸集&#xff08;二&#xff09;凸函数的定义及举例&#xff08;三&#xff09;凸函数的证明1、将凸函数限制在一条直线上2、判断函数是否为凸函数的一阶条件…

iphone进入恢复模式怎么退出?分享2种退出办法!

iPhone手机莫名其妙的进入到了恢复模式&#xff0c;或者是某些原因需要手机进入恢复模式&#xff0c;但是之后我们不知道如何退出恢复模式怎么办&#xff1f; 通常iPhone进入恢复模式的常见原因主要是软件问题、系统升级失败、误操作问题等导致。那iphone进入恢复模式怎么退出&…

【工具篇】-什么是.NET

“.NET"&#xff1a;.NET Core是由Microsoft开发&#xff0c;目前在.NET Foundation(一个非营利的开源组织)下进行管理。.NET Core是用C#和C编写的&#xff0c;并采用MIT协议作为开源协议。 简单来说&#xff1a;就是开发框架。 .NET 又称 .NET 平台或 .NET 框架&#xf…

Centos 7.9 安装 tigervnc-server

环境&#xff1a;当前使用的 Centos 7.9 的光盘作为的本地源。 1 检查是否已安装 tigervnc [rootlocalhost /]# rpm -q tigervnc tigervnc-server 未安装软件包 tigervnc tigervnc-server-1.8.0-21.el7.x86_64 如果安装过卸掉 卸载: rpm -e [rootlocalhost /]# rpm -e tige…

Django项目运行报错:ModuleNotFoundError: No module named ‘MySQLdb‘

解决方法&#xff1a; 在__init__.py文件下&#xff0c;新增下面这段代码 import pymysql pymysql.install_as_MySQLdb() 注意&#xff1a;确保你的 python 有下载 pymysql 库&#xff0c;没有的话可以使用 pip install pymysql安装 原理&#xff1a;用pymysql来代替mysqlL…

【Qt 学习笔记】Qt常用控件 | 容器类控件 | Group Box的使用及说明

博客主页&#xff1a;Duck Bro 博客主页系列专栏&#xff1a;Qt 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ Qt常用控件 | 容器类控件 | Group Box的使用及说明 文章编号&#xff…

力扣例题(用栈实现队列)

目录 链接. - 力扣&#xff08;LeetCode&#xff09; 描述 思路 push pop peek empty 代码 链接. - 力扣&#xff08;LeetCode&#xff09; 描述 思路 push 例如我们将10个元素放入栈中&#xff0c;假设最左边为栈顶&#xff0c;最右侧为栈底 则为10,9,8,7,6,5,4,3,…

JavaScript之数据类型(3)——object进阶

前言&#xff1a; 利用基础知识来构建对象会发现十分复杂&#xff0c;我们可以结合其他的知识点来为我们object的构建进行优化。 <1>工厂法&#xff1a; 基本格式&#xff1a; function creatObject(属性值1,属性值2,属性值3,...,属性值n) {var 对象名 new Object();对…