【C语言初阶】循环语句的具体用法,有这篇博客就够了

news2024/11/24 22:48:48

在这里插入图片描述

君兮_的个人主页

勤时当勉励 岁月不待人

C/C++ 游戏开发


Hello米娜桑,这里是君兮_,今天又抽空为大家更新我们的主线0基础C语言啦!今天要将的内容是循环语句的具体用法。同时如果你是0基础小白的话,建议先看看下面两篇博客哦!以下是链接:
【C语言初阶】万字解析,带你0基础快速入门C语言(上)
【C语言初阶】万字解析,带你0基础快速入门C语言(下)

  • 废话不多说咱们直接开始吧!!

循环语句详解

  • 一. 循环语句具体解析
    • 什么是循环语句,分别又有哪些?
    • 1.while循环
      • while语句中的break和continue
        • break
        • continue
    • 2.for循环
      • for循环中的break和continue
      • for语句的循环控制变量
      • for循环中的一些变体
    • 3.do-while循环
      • do-while语句中的break与continue
    • 4.goto语句
      • 整蛊游戏-关机程序
  • 二.循环语句的实战应用
  • 总结

一. 循环语句具体解析

什么是循环语句,分别又有哪些?

在这里插入图片描述

  • 以上图片的例子就叫循环,也就是说满足某个条件就进入循环语句直至该条件不再满足就跳出循环。
  • 循环语句通常分为以下三类:
    在这里插入图片描述
  • 接下来我们逐一介绍。

1.while循环

  • 在我们之前的介绍中相信你已经掌握了,if语句:
    当条件满足的情况下,if语句后的语句执行,否则不执行。
    但是这个语句只会执行一次。
  • 由于我们发现生活中很多的实际的例子是:同一件事情我们需要完成很多次。
    那我们怎么做呢?
  • C语言中给我们引入了: while 语句,可以实现循环。
  • 语法结构
//while 语法结构
while(表达式)
循环语句;
  • while语句执行流程

在这里插入图片描述

  • 图中expr表条件判断,如果!=0(为真)就进入循环执行循环中的stmt,执行完或者使用continue跳出该次循环后进入下一次循环继续判断此时是否为真,如果此刻条件==0(为假)或者在上次循环中用break跳出循环,那么此时循环停止,执行循环后的语句。
  • 举一个简单的例子
int main()
{
int i = 1;
while(i<=10)
{
printf("%d ", i);
i = i+1;
}
return 0;
}
  • 上面代码的结果是在屏幕上打印1-10的数,我在这里想让大家注意的地方是:
i = i+1;
  • 在通常情况下我们使用循环语句时,得让它的条件朝着不满足循环条件的方向发生变化,否则就一直跳不出循环语句,陷入死循环。

while语句中的break和continue

了解了while循环的基本用法,我们来聊聊循环语句中会多次出现的break与continue

break

  • 还是引例来说明:
//break 代码实例
#include <stdio.h>
int main()
{
	int i = 1;
	while (i <= 10)
	{
		if (i == 5)
		{
			break;
		}
		printf("%d ", i);
		i = i + 1;
	}
	return 0;
}
  • 这段代码的输入结果是什么?
    在这里插入图片描述
  • 当i==5时,就已经通过break跳出该循环了,因此只打印前面四个数

总结:
break在while循环中的作用:
其实在循环中只要遇到break,就停止后期的所有的循环,直接终止循环。
所以:while中的break是用于永久终止循环的。

continue

//continue 代码实例1
#include <stdio.h>
int main()
{
int i = 1;
while(i<=10)
{
if(i == 5)
continue;
printf("%d ", i);
i = i+1;
}
return 0;
}

在这里插入图片描述

  • 虽然从结果上看,打印的依然是1 2 3 4,但是两者现在处于的状态确是截然不同的:
  • 对比两个结果图我们可以发现,用break时,循环已经停止了,而使用continue时,光标仍然在闪烁说明此时循环压根没停止,陷入了死循环。
  • continue的作用是跳过此次循环continue下面的部分直接进入下次循环,由于i=i+1在continue下面未被执行,此时i还是等于5满足循环条件并且一直不会变化,这时程序就进入了死循环。

总结:
continue在while循环中的作用就是:
continue是用于终止本次循环的,也就是本次循环中continue后边的代码不会再执行,
而是直接跳转到while语句的判断部分。进行下一次循环的入口判断。


2.for循环

  • for循环也是我们常用的一种循环语句

语法
for(表达式1; 表达式2; 表达式3)
循环语句;

  • 表达式1为初始化部分,用于初始化循环变量的。

  • 表达式2为条件判断部分,用于判断循环时候终止。

  • 表达式3为调整部分,用于循环条件的调整。

  • 举个实际应用的问题来说明:

使用for循环 在屏幕上打印1-10的数字。

#include <stdio.h>
int main()
{
	int i = 0;
	//for(i=1/*初始化*/; i<=10/*判断部分*/; i++/*调整部分*/)
	for (i = 1; i <= 10; i++)
	{
		printf("%d ", i);
	}
	return 0;
}

在这里插入图片描述

  • for循环的执行流程
    在这里插入图片描述
  • 图中expr1表示初始化变量,expr2表示判断循环条件,expr3表示调整变量,stmt表示f执行or中的代码
  • 我们来对比以下for循环与while循环:
int i = 0;
//实现相同的功能,使用while
i=1;//初始化部分
while(i<=10)//判断部分
{
printf("hehe\n");
i = i+1;//调整部分
}
//实现相同的功能,使用for
for(i=1; i<=10; i++)
{
printf("hehe\n");
}
  • 通过两者的对比我们可以发现:
  • 在while循环中依然存在循环的三个必须条件,但是由于风格的问题使得三个部分很可能偏离较远,这样查找修改就不够集中和方便。所以,for循环的风格更胜一筹;for循环使用的频率也最高。

for循环中的break和continue

  • 和在while循环中类似,但是还是有部分差异的,我们来看看下面两段代码:
//代码1
#include <stdio.h>
int main()
{
	int i = 0;
	for (i = 1; i <= 10; i++)
	{
		if (i == 5)
			break;
		printf("%d ", i);
	}
	return 0;
}
//代码2
#include <stdio.h>
int main()
{
	int i = 0;
	for (i = 1; i <= 10; i++)
	{
		if (i == 5)
			continue;
		printf("%d ", i);
	}
	return 0;
}

  • 与whlie中代码类似,但是运行结果却不尽相同:
    在这里插入图片描述
    在这里插入图片描述

  • 代码1是相同的这里不做讨论,代码2的运行结果却有较大差异。

  • 原因:

  • 在for循环中,我们可以看到,即使continue跳过了i==5这次循环,但由于i是在for语句中表达式3上就已经++了,所以跳过5也不会对后面的运行有什么影响,只需省略对5的打印即可。

for语句的循环控制变量

建议:

1. 不可在for 循环体内修改循环变量,防止 for 循环失去控制。
2. 建议for语句的循环控制变量的取值采用“前闭后开区间”写法。

int i = 0;
//前闭后开的写法
for(i=0; i<10; i++)
{}
//两边都是闭区间
for(i=0; i<=9; i++)
{}
  • 这两种写法都是对的,但是对于初学者来很容易误判循环需要执行的次数,此时采用前闭后开区间的写法就能很好的判断出循环的次数。
  • 也就是说,此时循环的次数就等于你后开(i<10)中的那个数,对上面代码来说就是10次!

for循环中的一些变体

  • 1.可省略
//代码1
for(;;)
{
printf("hehe\n");
}
  • for循环中的初始化部分,判断部分,调整部分是可以省略的,但是不建议初学时省略,容易导致问题
  • 2.可嵌套
//代码2
  int i = 0;
  int j = 0;
  //这里打印多少个hehe?
  for(i=0; i<10; i++)
 {
    for(j=0; j<10; j++)
   {
     printf("hehe\n");
}
  • 此时打印的hehe数应该为10*10个
  • 3.可使用多个变量控制循环
//代码4-使用多余一个变量控制循环
int x, y;
  for (x = 0, y = 0; x<2 && y<5; ++x, y++)
 {
    printf("hehe\n");
    
 }

3.do-while循环

  • 与while循环类似,但是它是先执行一次,再判断循环条件。
  • 语法

do
循环语句;
while(表达式);

  • 执行流程
    在这里插入图片描述
  • stmt表示需要执行的语句,expr表示判断循环的条件。
  • do-while语句的特点
  • 循环至少执行一次,使用的场景有限,所以不是经常使用。
#include <stdio.h>
int main()
{
int i = 1;
do
{
printf("%d ", i);
    i=i+1;
}while(i<=10);
return 0;
}

do-while语句中的break与continue

#include <stdio.h>
int main()
{
int i = 1;
do
{
    if(5 == i)
      break;
printf("%d ", i);
    i=i+1;
}while(i<=10);
 
return 0;
}
#include <stdio.h>
int main()
{
int i = 1;
 
do
{
    if(5 == i)
      continue;
printf("%d ", i);
    i=i+1;
}while(i<=10);
 
return 0;
}
  • 实际使用下来与while类似,我就不具体展开了。

4.goto语句

  • C语言中提供了可以随意滥用的 goto语句和标记跳转的标号。
  • 从理论上 goto语句是没有必要的,实践中没有goto语句也可以很容易的写出代码。
  • 但是某些场合下goto语句还是用得着的,最常见的用法就是终止程序在某些深度嵌套的结构的处理过程。
  • 例如:一次跳出两层或多层循环。
    多层循环这种情况使用break是达不到目的的。它只能从最内层循环退出到上一层的循环。
  • goto语言真正适合的场景如下:
for(...)
  for(...)
 {
    for(...)
   {
      if(disaster)
        goto error;
   }
 }
  …
error:
if(disaster)
    // 处理错误情况
  • 这样就能直接跳出多层循环直接来到error了

整蛊游戏-关机程序

  • 下面我们来讲一个goto实战的小例子–关机程序
  • 注意:这里博主用切身经历告诉大家,如果不想遭到毒打,就不要整蛊室友!!切记切记!!尤其是在ta打游戏的时候。
  • 代码如下:
#include<stdlib.h>
#include<windows.h>
int main()
{
	char i[10] = { 0 };
	system("shutdown -s  -t  60");//系统指令让电脑关机
	again:
	printf("你的电脑将在一分钟后关机,请输入“我是猪”停止关机\n请输入:>");
	scanf("%s", &i);
	if ((strcmp(i, "我是猪") != 0))//判断是否输入“我是猪”
		goto again;
	else
		system("shutdown -a");//停止关机
	return 0;
}

  • 当然,while也可以实现:
#include <stdio.h>
#include <stdlib.h>
int main()
{
	char input[10] = { 0 };
	system("shutdown -s -t 60");
	while (1)
	{
		printf("电脑将在1分钟内关机,如果输入:我是猪,就取消关机!\n请输入:>");
		scanf("%s", input);
		if (0 == strcmp(input, "我是猪"))
		{
			system("shutdown -a");
			break;
		}
		return 0;
	}
}
  • 这种算是比较好心的了,你如果想恶搞的话完全可以错误的提示ta,ta永远都猜不对。甚至能把这个程序安装在系统里只要电脑一启动就运行该程序。
  • 当然这里博主墙裂不推荐大家这么做,博主上回这么做已经是18年前了,现在17岁了。
  • 关于上面的系统指令啥的,只需要了解即可,后面有机会会讲的,对于初学者来说,上面都想学就只会从入门到入土
    在这里插入图片描述

二.循环语句的实战应用

  • 鉴于篇幅原因以及以前都写过相关博客,这里就不多赘述了,咱们直接贴博客链接,感兴趣的可以来看看:
    【C语言】三子棋详解(包教包会的那种)
    【C语言】万字教学,带你分步实现扫雷游戏(内含递归函数解析),剑指扫雷,一篇足矣
    【C语言】带你玩转经典算法用二分法在一个有序数组中查找某个数
    【C语言】如何打印某个范围中满足某些条件的数(素数,闰年,水仙花数等)

总结

  • 今天的内容就到此结束啦,循环中我见过以及遇到过的所有知识以及易错点都在里面。
  • 如果你有任何疑问欢迎在评论区指出或者私信我,咱们下次再见啦!

新人创作不易,如果今天的内容对你有所帮助的话,请点个三连再走吧,你们的支持就是我更新的动力,再次感谢大家的支持!!!
在这里插入图片描述

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

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

相关文章

普通人接了人生第一单

大家好&#xff0c;我是 “秋意零” &#xff0c;全网同名&#xff08;某平台多了一个数字0 “如&#xff1a;秋意零0”&#xff09;。 你&#xff0c;相信天上掉馅饼吗&#xff1f; 40 分钟赚 150 你敢信&#xff1f; 现在我突然有点信了&#xff0c;为什么呢&#xff1f;请…

ESP-C3入门19. RSA算法加密、解密的实现

ESP-C3入门19. RSA算法加密、解密的实现 一、概述二、重要函数1. mbedtls_pk_parse_public_key和mbedtls_pk_parse_key函数原型&#xff1a;函数参数&#xff1a; 2. mbedtls_pk_encrypt函数原型&#xff1a;函数参数&#xff1a;函数功能&#xff1a; 三、实现过程1. CMakeLis…

@Param注解的用法

1、使用Param注解的原因 在 Mapper接口中&#xff0c;当方法的参数为多个字面量类型&#xff0c;此时mybatis会将这些参数存储在一个Map集合中&#xff0c;以两种方式进行存储 1、以arg0.arg1…为键&#xff0c;以参数为值2、以param1&#xff0c;param2…为键&#xff0c;以…

解读Linux常用命令使用方法

文章目录 1.前言1.1 定义1.2 特点 2.常用命令介绍2.1 ls2.2 pwd2.3 cd2.4 touch2.5 cat2.6 mkdir2.7 rm2.8 cp2.9 mv2.10 man&#xff08;联机手册&#xff09;2.11 vim2.12 grep2.13 ps2.14 netstat 1.前言 1.1 定义 Linux是一套免费使用和自由传播的类Unix操作系统&#xf…

【百套源码】HTML5期末大作业 - 各类网页作业源码合集

文章目录 持续更新文章记录1️⃣ 个人介绍类相关源码1.1 html实现个人简历1.2 科技风个人简历1.3 网站风个人简历1.4 多种风格个人主页模板1.5 html好看的个人简历明星版1.6 专属个人主页-系列11.7 专属个人主页-系列21.8 专属个人主页-系列31.9 专属个人主页-系列41.10 专属个…

uniapp和springboot微信小程序开发实战:前端架构之微信小程序主页实现

文章目录 主页效果前端代码后端实现主页效果 前端代码 具体代码实现如下: <template><view><!--首页轮播图--><view class="uni-banner-wrap"><swiper class="swiper" circular :indicator-dots="indicatorDots" …

数字信号处理11:变换

之前好长一段时间都在写软著、写一些结课作业&#xff0c;就断断续续的在学&#xff0c;很少有时间把东西串起来&#xff0c;前些博文主要就是讲的说&#xff0c;做这个Z变换&#xff0c;今天就主要来看看其他的变换&#xff0c;当然&#xff0c;最重要的还是傅里叶变换&#x…

有哪些优秀好用的网站SEO文章采集软件?

有哪些优秀好用的网站SEO文章采集软件?Ai智能采集文章操作教程及txt转Word教程#资源变现 #资源采集 我为什么会死磕seo并利用采集站seo赚到了第一个100W&#xff1f; 两个原因&#xff1a; 第一就是seo就是目前网络上免费的获取精准用户最牛逼&#xff0c;最有效的引流吸粉手…

linux下express+puppeteer安装部署并用PM2守护进程

背景 承上篇 puppeteer-不需重构&#xff0c;无痛加强vue单页面应用的SEO&#xff0c;提升百度收录排名,是在本地nginx部署前端&#xff0c;本地另起express服务进行测试&#xff0c;下面我们来讲讲如何部署express到linux服务器&#xff0c;并用PM2守护进程。 node 16.14.1 p…

java 学习交流社区平台系统Myeclipse开发mysql数据库web结构jsp编程计算机servlet网页项目

一、源码特点 JSP 学习交流社区平台系统 是一套完善的系统源码&#xff0c;对理解JSP java serlvet dao bean MVC编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;以及相应配套的设计文档&#xff0c;系统主要采用B/S模式开发。 研究的基本内…

wsl中docker自启动

前言 wsl -l -v # 查看 wsl 的状态 wsl -t Ubuntu # 关闭指定版本 wsl -d Ubuntu # 启动指定版本 启动 docker 通过命令 ps -p 1 -o comm 我们知道我们用的是 init&#xff0c;故我们将 systemd 命令修改为 SysV init命令。 ps -p 1 -o comm 更换命令&#xff0c;用SysV in…

NLP作业02:课程设计报告

作业头 这个作业属于哪个课程自然语言处理这个作业要求在哪里NLP作业02&#xff1a;课程设计报告我在这个课程的目标实现基于Seq2Seq注意力机制的聊天机器人这个作业在哪个具体方面帮助我实现目标问题的提出&#xff0c;资料的查找参考文献1.简说Seq2Seq原理以及实现 2.序列到…

Android加载大图策略,防止OOM

前言 Android中图片以位图&#xff08;Bitmap&#xff09;的形式存在&#xff0c;位图常见的格式有.png、.jgp、.bmp、.gif。在加载图片的过程中常见的就是OOM&#xff08;Out of Memory&#xff09;内存溢出。 内存溢出是系统会给APP分配内存也就是Heap Size值。当APP占用的内…

含多类型充电桩的电动汽车充电站优化配置方法(matlab代码)

目录 1 主要内容 目标函数 约束条件 程序亮点 2 部分代码 3 程序结果 4 下载链接 1 主要内容 该程序复现博士文章《互动环境下分布式电源与电动汽车充电站的优化配置方法研究》第三章《含多类型充电桩的电动汽车充电站优化配置方法》&#xff0c;本章选择3种典型的电动汽…

乐鑫创客沙龙精彩回顾|激发创新、共享技术

近期&#xff0c;乐鑫科技在全国多个城市举办了 ESP Friends 创客沙龙活动&#xff0c;吸引了来自物联网各个领域的企业家、开发者、创客和学生的参与&#xff0c;包含智能硬件企业家、技术自媒体、教育从业者、博士生、高校学生等。他们与乐鑫资深应用工程师和技术专家面对面深…

冯诺依曼体系结构和操作系统的工作方式

目录 一. 冯诺依曼体系结构 1.1 什么是冯诺依曼体系结构 1.2 为什么冯诺依曼体系结构这样设计 1.3 冯诺依曼体系结构与现实问题的结合 二. 操作系统的工作方式 2.1 操作系统的功能 2.2 操作系统对下进行软硬件管理的方式 2.3 操作系统对上提供使用环境的方式 三. 总结…

泛微E-Office前台文件上传漏洞

0x01 阅读须知 此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等&#xff08;包括但不限于&#xff09;进行检测或维护参考&#xff0c;未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失&…

史上最全Hadoop面试题:尼恩大数据面试宝典专题1

说在前面&#xff1a; 《尼恩 大数据 面试宝典》 是 《尼恩Java面试宝典》 姊妹篇。 这里特别说明一下&#xff1a;《尼恩Java面试宝典》41个专题 PDF &#xff08;请在文末获取&#xff09;自发布以来&#xff0c; 已经收集了 好几千题&#xff0c; 足足4000多页&#xff0c…

android 如何分析应用的内存(八)——Android 7.0以后的malloc debug

android 如何分析应用的内存&#xff08;八&#xff09; 接上文&#xff0c;介绍六大板块中的第三个————malloc调试和libc回调 上一篇文章中&#xff0c;仅仅是在分配和释放的时候&#xff0c;拦截对应的操作。而不能进一步的去检查内存问题。比如&#xff1a;释放之后再…

卖家必看,要做好独立站,一定要知道的八件事!

如何打造并运营你的跨境独立站&#xff1f;如何吸引更多的流量并促使他们在你的网站下单&#xff1f;在你决定开设独立站之前&#xff0c;以下这些方面是你必须要考虑的&#xff0c;否则你的独立站可能会面临失败的风险。 一、定义目标受众 你是B2B业务还是B2C独立站&#xff…