【C++】循环、控制流语句、

8、循环(loops)
(1)for loops

for循环非常灵活,可以做很多事情。上图红框框出来的代码块就是一个for循环。

for是关键字
for后面内容分为三部分,每部分用分号;隔开

第一部分A是变量的声明,所以这里要声明变量,我们一般写int i=0;
变量名叫做i是一种惯例,可能是iterate的首字母。当然你也可以取你自己喜欢的名字。当然这个变量也不一定必须是int类型的,也不一定非得从0开始。

第二部分B是条件。如果条件为真,就执行for循环内部代码。这里i<5表示只要变量i小于5就满足循环条件。

第三部分C,i++会在for循环的下一次迭代之前被调用。所以我们也可以写i+=1或者写i=i+1。意思都是每迭代一次,变量i都要加1

D是循环体,就是每循环一次都要被执行的代码。

E是循环结束的标志。

再总结一遍:
指令指针指到第7行时,首先要做的是声明一个新变量i;接下来看这个变量是否满足条件;
如果条件B返回值为true,就跳到第9行(for循环体D),执行for循环体。当for循环体执行完毕后,指令指针就走到for循环的尾部花括号E处,看到E,指令指针就再跳转到C处执行C,就是给变量i加1;加完后指令指针再跳到B,看变量是否满足条件。

如果条件B返回值为true,就跳到第9行(for循环体D),执行for循环体。当for循环体执行完毕后,指令指针就走到for循环的尾部花括号E处,看到E,指令指针就再 跳转到C处执行C,就是给变量i加1;加完后指令指针再跳到B,看变量是否满足条件。

如此循环,直到B不满足条件,也就是B返回false,指令指针跳出for循环,也就是执行E后面的代码行(第12行)。

说明:
for循环的三部分:
第一部分(int i =0;)只是在开始时运行一次。
第二部分(i<5;)是一个比较后的bool类型。
第三部分(i++;)是要在for循环结束(})后被运行的。

所以,for循环我们也可以这样写:

所以,只要你不改变执行逻辑,你在代码形式上可以行云流水,你还可以在循环体内调用函数等等,无限可能。

(2)while loops

其实while循环和for循环一模一样!
首先,while循环同样要声明变量i,只是上例中的i已经存在了,并且i已经等于5了。
其次,while循环同样需要条件,上例的条件是i>0,满足条件就跳到循环体执行循环体的代码。
最后,循环体代码执行完毕后,同样是要执行变量的自增或者自减,这里是自减i--;否则就是无限循环了。

既然while循环和for循环一样,那为什么既生亮何生瑜?
我们约定成俗是这样使用的:当我们确实是想无限持续循环的,比如游戏,就是想让一帧帧一直循环,我们不在意究竟循环了多少次,循环到哪里,就是不介意是否要去声明i,也不介意i究竟是多少了,就是想无限循环下去,那我们就使用while循环。但是当我们想循环一个确定长度的数组,而且想追踪每个元素的信息,此时我们非常在意i究竟是多少了,此时用for循环。

(3)do while

循环就是这3种写法。至于汇编及CPU指令上的循环,就非常复杂了,以后有机会再探讨。

9、控制流语句:continue、break、return

continue只能在循环中使用,表示进入这个循环的下一个迭代iteration。当然前提是有下一个迭代,如果没有就结束。

break是主要用于循环中,也可以用在switch语句中。break表示跳出其所在的循环,也就是终止它所在的那层循环。

return表示跳出函数。如果一个函数中,碰到return关键字,你就会退出这个函数。但是函数是要有一个返回值的,如果你只是return,那就相当于函数只返回了return本身,而return本身就相当于void,所以return本身只适用于void函数。

(1)continue

下面我们断点的方式看看程序是如何执行的:

小结:
a、对于for语句,第一执行for语句时,是先初始化i,然后判断条件。如果条件是true,就执行循环体,一直执行到for循环的最后的花括号},跳回到for语句,此时首先执行的是i++,然后再判断条件,条件true就是上面的一套流程;如果条件false就直接跳出循环体。

b、如果在循环体中遇到continue,就直接跳回for语句。那跳回for语句,就要执行for语句,那就是先执行i++,再判断条件,再根据条件,true就执行循环体,false就跳出循环。

(2)break

(3)return

但是return是可以用在函数的任何地方的,不限于循环中。

小结:
在C++语言中,这些if语句或其他条件语句、循环语句、控制流语句就是编程的基本逻辑。我们就是使用这些工具来控制程序的流程。这些也是编写应用程序的基本构建块。

待续。。。。。

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

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

相关文章

Qt入门小项目 | 实现一个图片查看器

文章目录 一、实现一个图片查看软件 一、实现一个图片查看软件 需要实现的功能&#xff1a; 打开目录选择图片显示图片的名字显示图片 在以上功能的基础上进行优化&#xff0c;需要解决如下问题&#xff1a; 如何记住上次打开的路径&#xff1f; 将路径保存到配置文件中&#x…

使用MAT定位线上OOM问题

目录 1.什么是OOM? 2.发生的可能原因 3.常见类型的OOM 4.如何定位问题&#xff1f; 4.1 获取dump文件 4.2 MAT分析 「Leak Suspects」泄露嫌疑 「Histogram」直方图 「dominator tree」支配树 「thread overview」线程视图 目录 1.什么是OOM? 2.发生的可能原因 …

深度学习入门5——为什么神经网络可以学习?

在理解神经网络的可学习性之前&#xff0c;需要先从数学中的导数、数值微分、偏导数、梯度等概念入手&#xff0c;从而理解为什么神经网络具备学习能力。 1.数值微分的定义 先从导数出发理解什么是梯度。某一点的导数直观理解就是在该点的切线的斜率。在数学中导数表示某个瞬…

05-对混合app应用中的元素进行定位

本文介绍对于混合app应用中的元素如何进行定位。 一、app的类型 1&#xff09;Native App&#xff08;原生应用&#xff09; 原生应用是指利用Android、IOS平台官方的开发语言、开发类库、工具等进行开发的app应用&#xff0c;在应用性能和交互体验上应该是最好的。 通俗点来…

Win10录屏,3种方法,快速搞定

在数字化时代&#xff0c;录屏功能已经成为了我们日常生活和工作中不可或缺的一部分。无论是为了制作教学视频&#xff0c;还是为了记录游戏的高光时刻&#xff0c;还是为了保存开会内容&#xff0c;录屏功能都能为我们提供极大的便利。Win10操作系统作为微软推出的经典之作&am…

在k8s中部署Elasticsearch高可用集群详细教程

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《洞察之眼&#xff1a;ELK监控与可视化》&#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、引言 1、Elasticsearch简介 2、为什么在k8s中部署elasti…

Redis 6.0新特性详解

Redis 6.0新特性主要有3个&#xff1a;多线程、Client Side Cache、Acls。下面详细说明一下。 1.多线程 redis 6.0 提供了多线程的支持&#xff0c;redis 6 以前的版本&#xff0c;严格来说也是多线程&#xff0c;只不过执行用户命令的请求时单线程模型&#xff0c;还有一些线…

鸿蒙HarmonyOS实战:状态管理和传值

状态管理 State State是一个装饰器&#xff0c;是用来存放数据的&#xff0c;比较好理解 由State的数据来进行状态驱动视图更新 代码很简单 State count: number 0; 需要注意的是State初始化的数据必须赋值 这里我们讨论简单用法&#xff0c;至于复杂的用法可以到项目中介绍…

RAG 流程及论文串烧

文档切片 文档切片的五个层次 https://medium.com/anuragmishra_27746/five-levels-of-chunking-strategies-in-rag-notes-from-gregs-video-7b735895694d#b123 Basic RAG 与 Advanced RAG https://pub.towardsai.net/advanced-rag-techniques-an-illustrated-overview-04d…

Python学习笔记14:进阶篇(三)。类的终结篇,类的导入和模块的导入。

前言 这篇文章属于类知识的最后一篇&#xff0c;带一点点其他知识&#xff0c;学习内容来自于Python crash course。 关注我私信发送Python crash course&#xff0c;分享一份中文版PDF。 类的导入 在学习的时候&#xff0c;包括之前&#xff0c;我都是在一个文件中把所有代…

免费域名第二弹:手把手教你获取个性化免费域名并托管至Cloudflare

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 免费申请域名的方法 📒📝 注册账号📝 创建免费域名📝 将域名添加到 Cloudflare⚓️ 相关链接 ⚓️📖 介绍 📖 在如今的数字时代,拥有一个个性化的域名已经成为越来越多人的需求。无论是建立个人博客、项目展示,还…

鸿蒙开发通信与连接:【@ohos.connectedTag (有源标签)】

有源标签 说明&#xff1a; 本模块首批接口从API version 8开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。 导入模块 import connectedTag from ohos.connectedTag;connectedTag.init init(): boolean 初始化有源标签芯片。 需要权限&#…

MySQL经典面试题:谈一谈你对事务的理解

文章目录 &#x1f4d1;事务事务的基本概念回滚开启事务的sql语句 事务的基本特性总结一下涉及到的三个问题 ☁️结语 &#x1f4d1;事务 事务的基本概念 事务是用来解决一类特定场景的问题的&#xff0c;在有些场景中&#xff0c;完成某个操作&#xff0c;需要多个sql配合完…

CPN IDE实现分层效果

Shift键鼠标选中要分层的库所和变迁&#xff01;然后create subpage。 Subpage是这样的&#xff0c;不会像CPN tools里面自动生成IN和OUT库所&#xff0c;但是也能正确运行。 虽然父页面在运行中有标红&#xff1a;"port not defined" 错误通常意味着在模型中有一些连…

【QT5】<重点> QT多线程

文章目录 前言 一、QThread创建多线程 二、QMutex基于互斥量的同步 三、QReadWriteLock线程同步 四、QWaitCondition线程同步 五、QSemaphore基于信号量的同步 前言 本篇记录学习QT多线程的知识&#xff0c;参考视频13.1QThread创建多线程程序_哔哩哔哩。若涉及版权问题…

单元测试很难么?

前言 你可能会用单元测试框架&#xff0c;python的unittest、pytest&#xff0c;Java的Junit、testNG等。 那么你会做单元测试么&#xff01;当然了&#xff0c;这有什么难的&#xff1f; test_demo.py def inc(x): return x 1 def test_answer(): assert inc(3) 4 i…

经验分享,CRC(循环冗余校验)在线计算

这里分享一个好用的在线计算CRC的网站。 网址&#xff1a;http://www.ip33.com/crc.html 截图&#xff1a;

Ubuntu22.04系统安装及配置

文章目录 一、选择“安装” 二、选择“语言” 三、安装器更新 四、键盘布局 五、选择安装类型 六、网络配置 七、代理设置 八、镜像地址 九、磁盘划分 十、设置用户名、主机名、登录密码 十一、升级到Ubuntu Pro 十二、SSH设置 十三、选装软件包 十四、开始安装进…

灰度图像直方图均衡化

文章目录 1.实验目的2.需求3.代码4.实验结果 1.实验目的 了解一种最基本的图像增强技术&#xff0c;本质上是对灰度图像进行灰度变换。 2.需求 对给定图像进行灰度直方图展示&#xff0c;然后均衡化后再次展示 3.代码 import cv2 as cv import numpy as np from matplotli…

类注释规范

类注释规范 1.1.1 模板配置 模板路径&#xff1a;File–>settings–>Editor–>File and Code Templates–>Includes–>File Header  N A M E &#xff1a;设置类名&#xff0c;与下面的 {NAME}&#xff1a;设置类名&#xff0c;与下面的 NAME&#xff1a;设…