for和do-while循环以及break和continue语句

2023-10-26

for循环

语法形式

for 循环是三种循环中使用最多的, for 循环的语法形式如下:

for(表达式1;表达式2;表达式3)
语句;
//
表达式1 ⽤于循环变量的初始化
表达式2 ⽤于循环结束条件的判断
表达式3 ⽤于循环变量的调整

循环的执行流程图

在这里插入图片描述
首先我们可以假设for(i=0;i<3;i++)
根据表达式1中确定循环变量,接下来再通过表达式2来判断是否为真也就是判断i=0是否小于3,如果为真(!=0)则执行循环语句,执行完再根据表达式3调整循环变量,即i++之后i从0变为1,一直这样循环知道i大于或等于3为止,如果为假(为0),则直接跳出循环。

for循环和while循环的区别

int main()
{
	int i = 1;//初始化
	while (i <= 10)
	{
		printf("%d", i);
		i = i + 1;
	}
	return 0;
}


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

}

for和while在实现循环的过程中都有初始化、判断、调整这三个部分,但是for循环的三个部分非常集中,便于代码的维护并且也更方便理解,而如果代码较多的时候 while 循环的三个部分就比较分散,所以从形式上 for 循环要更优⼀些。

例子

1:在屏幕上打印1~10的值
#include <stdio.h>
int main()
{
	int i = 0;
	for (i = 1; i <= 10; i++)
	{
		printf("%d ", i);
	}

	return 0;
}
2:计算1~100之间3的倍数的数字之和
#include <stdio.h>
int main()
{
	int i = 0;
	int sum = 0;
	for (i = 1; i <= 100; i++)
	{
		if (i % 3 == 0)
			sum += i;
	}
	printf("%d\n", sum);
	return 0;
}
//⼩⼩的优化
//如果能直接产⽣3的倍数的数字就省去了多余的循环和判断
#include <stdio.h>
int main()
{
	int i = 0;
	int sum = 0;
	for (i = 3; i <= 100; i += 3)
	{
		sum += i;
	}
	printf("%d\n", sum);
	return 0;
}

do-while循环

语法形式

在循环语句中 do while 语句的使用最少,但在一些特点情况下用有奇效,它的语法如下:

do
 语句;
while(表达式)

while和for这两种循环都是先判断,条件如果满足就进入循环,执行循环语句,如果不满足就跳出循环。
而do while循环则是先直接进入循环体,执行循环语句,然后再执行while后的判断表达式,表达式为真,就会进行下⼀次,表达式为假,则不再继续循环。
也正因为do的作用,我们可以将一些不需要判断的语句放进do里面,使之不需要被while进行判断

循环的执行流程图

在这里插入图片描述
在 do while 循环中先执行图上的“语句”,执行完语句,在去执行“判断表达式”,判断表达式的
结果是!=0,则继续循环,执行循环语句;判断表达式的结果==0,则循环结束。所以在 do while 语句中循环体是至少执行⼀次的,这是 do while 循环比较特殊的地方。

例子

1:在屏幕上打印1~10的值
#include <stdio.h>
int main()
{
	int i = 1;
	do
	{
		printf("%d ", i);
		i = i + 1;
	} while (i <= 10);

	return 0;
}
2:输⼊⼀个正整数,计算这个整数是⼏位数?
例如:
输⼊:1234 输出:4
输⼊:12 输出:
#include <stdio.h>
int main()
{
	int n = 0;
	scanf("%d", &n);
	int cnt = 0;
	do
	{
		cnt++;
		n = n / 10;
	} while (n);
	printf("%d\n", cnt);
	return 0;
}
这⾥并⾮必须使⽤do while语句,但是这个代码就⽐较适合使⽤ do while 循环,因为n即使是0,也是1位数,要统计位数的

break和continue语句

break和continue在不同循环中的区别

在循环执行的过程中,如果某些状况发生的时候,需要提前终止循环,这是非常常见的现象。C语言中
提供了 break 和 continue 两个关键字,就是应该到循环中的。
• break 的作用是用于永久的终止循环,只要 break 被执行,直接就会跳出循环,继续往后执
行。
• continue 的作用是跳过本次循环 continue 后边的代码,在 for 循环和 while 循环中有所差异的。

while

break#include <stdio.h>
int main()
{
	int i = 1;
	while (i <= 10)
	{
		if (i == 5)
			break;//当i等于5后,就执⾏break,循环就终⽌了
		printf("%d ", i);
		i = i + 1;
	}
	return 0;
}
打印了1,2,3,4后,当i等于5的时候,循环正 break 的地⽅终⽌,不再打印,不再循环。
所以 break 的作⽤就是永久的终⽌循环,只要 break 被执⾏, break 外的第⼀层循环就终⽌了。
那以后我们在循环中,想在某种条件下终⽌循环,则可以使⽤ break 来完成我们想要的效果。

continue#include <stdio.h>
int main()
{
	int i = 1;
	while (i <= 10)
	{
		if (i == 5)
			continue;
		/*当i等于5后,就执⾏continue,直接跳过continue的代码,去循环的判断的地⽅,
		因为这⾥跳过了i = i+1,所以i⼀直为5,程序陷⼊和死循环*/
		printf("%d ", i);
		i = i + 1;
	}
	return 0;
}
到这⾥我们就能分析出来, continue 可以帮助我们跳过某⼀次循环 continue 后边的代码,直接到循环的判断部分,进⾏下⼀次循环的判断,如果循环的调整是在 continue 后边的话,可能会造成死循环

for

其实和 while 循环中的 break ⼀样, for 循环中的 break 也是⽤于终⽌循环的,不管循环还需要循环多少次,只要执⾏到了 break ,循环就彻底终⽌。
#include <stdio.h>
int main()
{
	int i = 1;
	for (i = 1; i <= 10; i++)
	{
		if (i == 5)
			break;
		printf("%d ", i);
	}
	return 0;
}

continue#include <stdio.h>
int main()
{
	int i = 1;
	for (i = 1; i <= 10; i++)
	{
		if (i == 5)
			continue;//这⾥continue跳过了后边的打印,来到了i++的调整部分
		printf("%d ", i);
	}
	return 0;
}
所以在 for 循环中 continue 的作⽤是跳过本次循环中 continue 后的代码,直接去到循环的调整部分。未来当某个条件发⽣的时候,本次循环⽆需再执⾏后续某些操作的时候,就可以使⽤continue 来实现

do-while

break#include <stdio.h>
int main()
{
	int i = 1;
	do
	{
		if (i == 5)
			break;
		printf("%d ", i);
		i = i + 1;
	} while (i <= 10);
	return 0;
}

continue#include <stdio.h>
int main()
{
	int i = 1;
	do
	{
		if (i == 5)
			continue;
		printf("%d ", i);
		i = i + 1;
	} while (i <= 10);
	return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

for和do-while循环以及break和continue语句 的相关文章

  • socket网络编程几大模型?看看CHAT是如何回复的?

    CHAT回复 网络编程中常见的有以下几种模型 1 阻塞I O模型 Blocking I O 传统的同步I O模型 一次只处理一个请求 2 非阻塞I O模型 Non blocking I O 应用程序轮询调用socket相关函数检查请求 不需
  • 让CHAT介绍下V2ray

    CHAT回复 V2Ray是一个网络工具 主要用于科学上网和保护用户的网络安全 它的名字源自Vmess Ray 光线 通过使用新的网络协议 为用户提供稳定且灵活的代理服务 下面是一些V2Ray的主要特性 1 多协议支持 V2Ray 提供了大量
  • 软件测试|使用matplotlib绘制平行坐标系图

    简介 绘制平行坐标系图 Parallel Coordinates Plot 是一种用于可视化多维数据的强大方法 在这篇文章中 我们将介绍如何使用Matplotlib库创建平行坐标系图 以及如何解释和定制这种图表 我们将使用一个示例数据集来演
  • 软件测试|使用matplotlib绘制多种柱状图

    简介 在数据可视化领域 Matplotlib是一款强大的Python库 它可以用于创建多种类型的图表 包括柱状图 本文将介绍如何使用Matplotlib创建多种不同类型的柱状图 并提供示例代码 创建基本柱状图 首先 让我们创建一个基本的柱状
  • 基于java的学生成绩在线管理系统设计与实现

    基于java的学生成绩在线管理系统设计与实现 I 引言 A 研究背景和动机 基于Java的学生成绩在线管理系统设计与实现的研究背景和动机是设计一个可以方便管理学生成绩的系统 该系统可以方便地记录学生的成绩 并为老师和学生提供查询和统计功能
  • qt.qpa.plugin: Could not find the Qt platform plugin “windows“ in ““

    系统环境 Win10家庭中文版 Qt 5 12 9 链接了一些64位的第三方库 程序编译完运行后出现 qt qpa plugin Could not find the Qt platform plugin windows in 弹窗如下 网
  • Python自动化测试 | 如何使用Robot Framework进行自动化测试?

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • Android Navigation的四大要点你都知道吗?

    在JetPack中有一个组件是Navigation 顾名思义它是一个页面导航组件 相对于其他的第三方导航 不同的是它是专门为Fragment的页面管理所设计的 它对于单个Activity的App来说非常有用 因为以一个Activity为架构
  • 计算机Java项目|电影购票系统

    作者简介 Java领域优质创作者 CSDN博客专家 CSDN内容合伙人 掘金特邀作者 阿里云博客专家 51CTO特邀作者 多年架构师设计经验 腾讯课堂常驻讲师 主要内容 Java项目 Python项目 前端项目 人工智能与大数据 简历模板
  • 春眠不觉晓,Java数据类型知多少?基础牢不牢看完本文就有数了

    俺滴座右铭是不在沉默中爆发 就在沉默中灭亡 一起加油学习 珍惜现在来之不易的学习时光吧 等工作之后 你就会发现 想学习真的需要挤时间 厚积薄发啦 我们知道Java是面向对象的静态型编程语言 在Java的世界里万物皆对象 但我认为是万物皆数据
  • 详解Java信号量-Semaphore

    第1章 引言 大家好 我是小黑 今天 咱们一起来深入探讨一下Semaphore 在Java中 正确地管理并发是一件既挑战又有趣的事情 当谈到并发控制 大家可能首先想到的是synchronized关键字或者是ReentrantLock 但其实
  • 15天学会Python深度学习,我是如何办到的?

    陆陆续续有同学向我们咨询 Python编程如何上手 深度学习怎么学习 如果有人能手把手 一对一帮帮我就好了 我们非常理解初学者的茫然和困惑 大量视频 书籍 广告干扰了大家的判断 学习Python和人工智能 成为内行人不难 为此 我们推出了
  • 【心电图基线估计和去噪方法的群稀疏正则化】带有群稀疏正则化的心电图基线估计和去噪(Matlab实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码及文章
  • 2024年华为OD机试真题-靠谱的车-Python-OD统一考试(C卷)

    题目描述 程序员小明打了一辆出租车去上班 出于职业敏感 他注意到这辆出租车的计费表有点问题 总是偏大 出租车司机解释说他不喜欢数字4 所以改装了计费表 任何数字位置遇到数字4就直接跳过 其余功能都正常 比如 1 23再多一块钱就变为25 2
  • 【路径规划】基于改进遗传算法求解机器人栅格地图路径规划(Matlab实现实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码实现
  • 2024年华为OD机试真题-分割均衡字符串-Python-OD统一考试(C卷)

    题目描述 均衡串定义 字符串只包含两种字符 且两种字符的个数相同 给定一个均衡字符串 请给出可分割成新的均衡子串的最大个数 约定字符串中只包含大写的 X 和 Y 两种字符 输入描述 均衡串 XXYYXY 字符串的长度 2 10000 给定的
  • 2024年华为OD机试真题-查找接口成功率最优时间段-Python-OD统一考试(C卷)

    题目描述 服务之间交换的接口成功率作为服务调用关键质量特性 某个时间段内的接口失败率使用一个数组表示 数组中每个元素都是单位时间内失败率数值 数组中的数值为0 100的整数 给定一个数值 minAverageLost 表示某个时间段内平均失
  • 软件测试/测试开发|给你剖析闭包与装饰器的魔力

    测试管理班是专门面向测试与质量管理人员的一门课程 通过提升从业人员的团队管理 项目管理 绩效管理 沟通管理等方面的能力 使测试管理人员可以更好的带领团队 项目以及公司获得更快的成长 提供 1v1 私教指导 BAT 级别的测试管理大咖量身打造
  • Java进阶之旅第七天

    Java进阶之旅第七天 文章目录 Java进阶之旅第七天 方法引用 介绍 代码展示 结果 方法引用的分类
  • 计算机Java项目|java游戏账号交易系统

    作者简介 Java领域优质创作者 CSDN博客专家 CSDN内容合伙人 掘金特邀作者 阿里云博客专家 51CTO特邀作者 多年架构师设计经验 腾讯课堂常驻讲师 主要内容 Java项目 Python项目 前端项目 人工智能与大数据 简历模板

随机推荐

  • Java中的数组互相赋值

    本文探讨Java中数组中的赋值问题 在探讨这个问题之前必须先弄懂一件事 Java中的数组到底是什么东西 是类 是对象 还是什么其他奇奇怪怪的东西 答案是 Java中的数组本质上是对象 但是这个对象不是通过某个类实例化来的 而是JVM创建的
  • 明显调用的表达式前的括号必须具有(指针)函数类型 编译器错误 C2064

    看到 明显调用的表达式前的括号必须具有 指针 函数类型 这句时我才发现我的语文水平有多烂 怎么看都看不懂 折腾了半天才知道是哪里出了问题 举个简单的例子 class CTest void CTest m pFun void CallFun
  • 数据库连接超时No operations allowed after conn

    com mysql jdbc exceptions jdbc4 MySQLNoTransientConnectionException No operations allowed after connection closed 分析 出现这
  • unity性能优化方案整理 & 一些思路 & 一些技巧(持续更新 2019-09-12)

    原文链接1 https www cnblogs com zhenlong p 4862869 html 原文链接2 http www xuanyusong com archives 3205 原文链接3 https www cnblogs
  • 网络攻击类型与防火墙防范策略汇总

    1 防火墙攻击防范概述 防火墙的攻击防范功能能够检测出多种类型的网络攻击 并能采取相应的措施保护内部网络免受恶意攻击 保证内部网络主机的正常运行 攻击防范功能可以抵御传统的单包攻击 也能够抵御各种常见的DDoS攻击 单包攻击主要包括扫描类攻
  • SQL server 查询语句

    select from test dbo users 普通条件查询 where id 1 模糊查询 select from test dbo users where username like li 范围查询 select from tes
  • org.springframework.stereotype 注解

    org springframework stereotype 1 controller 控制器 注入服务 2 service 服务 注入dao 3 repository dao 实现dao访问 4 component 把普通pojo实例化到
  • 华为OD机试 - 贪吃蛇(Java )

    题目描述 贪吃蛇是一个经典游戏 蛇的身体由若干方格连接而成 身体随蛇头移动 蛇头触碰到食物时 蛇的长度会增加一格 蛇头和身体的任一方格或者游戏版图边界碰撞时 游戏结束 下面让我们来完成贪吃蛇游戏的模拟 给定一个N M的数组arr 代表N M
  • 排序算法总结—时间复杂度O(n^2)—冒泡/插入/选择小记

    排序算法总结 时间复杂度O n 2 冒泡 插入 选择小记 冒泡排序 最基础的排序 一层一层将最大值或最小值放到该去的位置 适用于顺序存储和链表存储 时间复杂度 O n 2 空间复杂度 O 1 稳定的排序算法 产生的有序子序列全局有序 每次有
  • python2 命令行模式CMD改变颜色失败解决办法

    参考链接 https blog csdn net qq 15158911 article details 88943571 这个问题找了一个下午的解决办法 写好了python代码之后 cmd使用命令行模式运行 颜色演示的时候效果是这样的 解
  • 使用Mybatis从数据库中查出时间显示时分后发现不符合

    问题介绍 这个问题困扰我了整整一天 我用Google搜了一页又一页都没有找到解决方案 大部分都是使用SimpleDateFormat 设置时区后再格式化 但是不论我怎么选择时区 问题并没有解决 在一步步排查后 我选择在google上搜索my
  • python txt追加写入_python 实现在txt指定行追加文本的方法

    python 实现在txt指定行追加文本的方法 如下所示 fp file data txt lines for line in fp lines append line fp close lines insert 1 a new line
  • 【机器人学】【国家标准】发现《GB/T 29824-2013 工业机器人 用户编程指令》的一个编辑错误

    错误处 近来的主要工作是设计工业机器人控制系统 需要设计一系列的用户编程指令 在查阅国家标准的时候 发现一处错误 封面
  • 探索 Mimikatz 神器之 WDigest

    自从 Mimikatz 出现以来 我们很多人已经对这个工具进行过封装 也尝试过注入 或者是使用 powershell 实现类似的功能 现在我们决定给这个工具添加一个内存 dump 的功能 无论我们如何封装使用 Mimikatz 它仍然是 W
  • Mysql-通过创建存储过程完成“对多个同类表进行查询并将结果汇总储存在新表中”

    案例背景 公司数据储存在N张表中 N是大数 现在需要求每个类别某类数据topN用户的数据 代码结果 创建存储过程将数据从多个相同表中查询求topN并存入 本文主要内容 知识点 分组查询topN问题 https editor csdn net
  • 雅可比矩阵机器学习_深度学习中的Matrix Calculus (一)

    绝大多数网络上对深度学习公式的推导教程notation混乱 而专门介绍Matrix Calculus的材料可能又过于繁杂 其实在深度学习中用到的矩阵微积分并不艰深 看完之后你就可以愉快的进行各种推导了 本文仅作为优秀资源的搬运总结 有余力的
  • SQL 备份表-造数据-还原表

    不影响日后工作的造数据步骤 1 备份表内的内容 2 清表内内容 3 给表造数据 4 还原表 1 备份表内的内容 create table lt 库名2 gt lt 表名2 gt as select from lt 库名1 gt lt 表名1
  • 搭建iscsi存储系统

    内容 常见硬盘介绍 NAS和SAN服务器概述 实战 配置IP SAN服务器 实战 IP SAN服务器日常操作 存储设备 阵列柜 SAS 容量小 300G 600G 900G 价格贵 SATA 容量大 500G 750G 1T 2T 3T 4
  • HackMyVM Influencer

    HackMyVM Influencer 靶机IP 192 168 173 148 信息收集 nmap端口扫描 开启80 2121端口 ftp连接2121端口 匿名用户登录 下载所有文件 查看note txt 依次对图片文件 进行密码爆破 在
  • for和do-while循环以及break和continue语句

    目录 for循环 语法形式 循环的执行流程图 for循环和while循环的区别 例子 do while循环 语法形式 循环的执行流程图 例子 break和continue语句 break和continue在不同循环中的区别 while fo