C++基础知识【3】控制语句
目录
前言
一、条件语句
1.1、if 语句
1.2、if-else 语句
1.3、switch 语句
二、循环语句
2.1、while 循环
2.2、do-while 循环
2.3、for 循环
三、跳转语句
3.1、break语句
3.2、continue语句
3.3、goto语句
四、一些新特性
4.1、if 语句和 switch 语句支持初始化语句
4.2、for each 循环
4.3、if constexpr语句
前言
在C++中一般情况下是按顺序执行每条语句,控制语句则改变了程序的执行路径,适应更多场景下的不同的处理方式,使程序更加健壮。
C++ 中的控制语句主要包括条件语句,循环语句和跳转语句。
一、条件语句
条件语句根据表达式的值来执行不同分支的语句,主要有 if 语句、if-else 语句、switch 语句。
1.1、if 语句
该语句用于条件判断,根据判断结果决定是否执行下面的代码块。
if 语句的语法格式为:
if (expression) {// 当表达式为true时执行
}
示例:
int x = 10;
if (x > 5) {cout << "x is greater than 5" << endl;
}
1.2、if-else 语句
该语句用于条件判断,根据判断结果执行不同的代码块。
if-else 语句的语法格式为:
if (expression) {// 当表达式为真时执行的语句
} else {// 当表达式为假时执行的语句
}
示例:
int x = 3;
if (x > 5) {cout << "x is greater than 5" << endl;
} else {cout << "x is less than or equal to 5" << endl;
}
1.3、switch 语句
switch 语句根据表达式的值选择执行哪个 case 分支,如果没有符合的分支则执行 default 分支。语法格式为:
switch(expression) {
case value1:// 当表达式的值等于 value1 时执行的语句break;
case value2:// 当表达式的值等于 value2 时执行的语句break;//...
default:// 当表达式的值与所有 case 的值都不匹配时执行的语句
}
示例:
int x = 2;
switch (x) {
case 1:cout << "x is 1" << endl;break;
case 2:cout << "x is 2" << endl;break;
default:cout << "x is neither 1 nor 2" << endl;
}
二、循环语句
循环语句是执行重复操作的一种结构,主要有 while 循环、do-while 循环、for 循环。
2.1、while 循环
该语句用于循环执行一段代码,只要条件为真就一直循环执行。
while (expression) {// 当表达式为真时执行的语句
}
示例:
int x = 1;
while (x <= 5) {cout << x << endl;x++;
}
2.2、do-while 循环
do-while 循环与 while 循环的区别在于先执行一次循环体,然后再判断循环条件是否满足。
记住do{}while()比执行一次。
语法格式为:
do {// 执行循环体
} while (expression);
示例:
int x = 1;
do {cout << x << endl;x++;
} while (x <= 5);
2.3、for 循环
该语句用于循环执行一段代码,可以根据条件循环执行多次
for 循环的语法格式为:
for (initialization; condition;update) {// 执行循环体
}
initialization
:循环初始化部分,在第一次循环开始前执行一次,通常用于初始化计数器或声明循环变量。condition
:循环条件部分,每次循环前都会进行条件判断,如果条件为真,则执行循环体,否则退出循环。update
:循环更新部分,每次循环结束后执行一次,通常用于更新计数器或循环变量。
示例:
for (int x = 1; x <= 5; x++) {cout << x << endl;
}
三、跳转语句
跳转语句顾名思义就是程序执行到该语句是不再执行相邻的下一条语句,而是跳到指定的语句去执行。
跳转语句包括break,continue和goto语句。
在循环语句中,break 语句可以用来跳出循环,而 continue 语句可以用来跳过本次循环,直接进入下一次循环。
3.1、break语句
通常用于终止当前的循环语句或者 switch 语句。当程序执行到 break 语句时,会立即跳出当前的循环或者 switch 语句,并开始执行后面的语句。
循环中使用break语句实例:
#include <iostream>
int main() {int i;for (i = 1; i <= 10; i++) {if (i == 5) {break;}std::cout << i << std::endl;}std::cout << "Loop terminated." << std::endl;return 0;
}
switch使用break语句实例:
#include <iostream>
int main() {int num = 2;switch (num) {case 1:std::cout << "The number is 1." << std::endl;break;case 2:std::cout << "The number is 2." << std::endl;break;case 3:std::cout << "The number is 3." << std::endl;break;default:std::cout << "The number is not 1, 2 or 3." << std::endl;break;}std::cout << "Switch terminated." << std::endl;return 0;
}
3.2、continue语句
用于跳过循环体中的某些语句,继续执行循环的下一次迭代。当程序执行到 continue 语句时,它会跳过循环体中 continue 语句之后的代码,并开始下一次循环迭代。
实例:
#include <iostream>int main() {int i = 1;while (i <= 10) {if (i == 5) {i++;continue;}std::cout << i << std::endl;i++;}return 0;
}
3.3、goto语句
goto 语句可以让程序跳转到代码中的另一个位置继续执行,通常用于跳出多层循环或者从深层嵌套的代码块中快速返回。但是 goto 语句也容易导致代码结构复杂,难以维护和调试,所以在实际编程中应该慎用。
实例:
#include <iostream>int main() {int i, j;for (i = 0; i < 10; i++) {for (j = 0; j < 10; j++) {if (i == 5 && j == 5) {goto endloop;}}}std::cout << "Loop finished normally." << std::endl;return 0;endloop:std::cout << "Loop terminated early." << std::endl;return 0;
}
在这个示例代码中,goto 语句被用来跳出双重循环。当循环变量 i 和 j 的值都等于 5 时,程序跳转到标识符 endloop 所在的位置,执行 endloop: 标识的语句块。如果循环正常结束,程序将输出 Loop finished normally.。如果使用了 goto 语句跳出循环,程序将输出 Loop terminated early.。
四、一些新特性
C++11以后引入了一些新的特性,使得控制语句更加丰富,简单,易用。下面简单说几个常用的新特性。
4.1、if 语句和 switch 语句支持初始化语句
C++11 以后引入了 if 语句和 switch 语句支持初始化语句,可以在条件表达式之前定义变量并初始化。
例如:
if (int x = get_value(); x > 10) {// x 在这里可以使用
}// 其中 get_value() 函数返回一个 int 值用于初始化变量 x,如果 x 的值大于 10,执行 if 语句中的语句块。switch (int i = get_value(); i) { // 可以定义变量并初始化case 1:// 执行语句块break;default:// 执行语句块break;
}
4.2、for each 循环
它可以遍历一个序列中的所有元素,将每个元素赋值给一个变量并执行一些操作。使用 for each 循环可以避免繁琐的迭代器操作,提高代码的可读性和可维护性。
实例:
#include <iostream>int main() {int arr[] = {1, 2, 3, 4, 5};for (int x : arr) {std::cout << x << std::endl;}return 0;
}
4.3、if constexpr语句
if constexpr 是 C++17 中引入的一种新的条件语句,它可以用于编译时条件判断,并在编译时进行分支的选择,可以避免在运行时进行条件判断和分支选择,从而提高代码的执行效率和性能。
if constexpr 的语法格式和普通的 if 语句类似,只是在 if 关键字后面加了一个 constexpr 关键字,用于指示编译器在编译时对条件进行求值,例如:
if constexpr (std::is_same_v<T, int>) {// 只有 T 是 int 类型时,才会执行这里的代码// 编译器会在编译时对条件进行求值// 如果 T 不是 int 类型,这里的代码会被编译器优化掉
}
在上面的例子中,如果 T 类型是 int 类型,编译器会在编译时对条件进行求值,然后执行 if 语句中的代码;如果 T 类型不是 int 类型,编译器会在编译时将 if 语句中的代码优化掉。
使用 if constexpr 可以避免在运行时进行条件判断和分支选择,从而提高代码的执行效率和性能,特别是在模板编程中,使用 if constexpr 可以更加方便地实现代码的条件分支。
以上就是 C++ 中的控制语句。掌握好这些语句可以让你更灵活地控制程序的流程,实现更多的功能。
有哪些地方写的不准确,或者不正确,又或者有什么疑问,可以随时跟我讨论。
相关文章:
C++基础知识【3】控制语句
目录 前言 一、条件语句 1.1、if 语句 1.2、if-else 语句 1.3、switch 语句 二、循环语句 2.1、while 循环 2.2、do-while 循环 2.3、for 循环 三、跳转语句 3.1、break语句 3.2、continue语句 3.3、goto语句 四、一些新特性 4.1、if 语句和 switch 语句…...
ImportError: Can not find the shared library: libhdfs3.so解决方案
大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。喜欢通过博客创作的方式对所学的知识进行总结与归纳,不仅形成深入且独到的理…...
Qt插件开发总结5--主界面嵌入插件UI
文章目录一、前言二、效果展示三、嵌入插件UI1、插件接口文件添加UI指针2、插件子项目工程建立UI类3、插件类中创建UI类、使UI指针指向创建的UI类4、插件元信息中添加widget键值对,指示插件UI嵌入主界面中的位置5、主界面中预留接入点tabWidget6、插件管理器中元数据…...
一些关于linux process 和python process的记录
python mulprocess 主要用来生成另一个进程并运行 def func(i):print(helloworld)from multiprocessing import Process p Process(targetfunc,args(i, )) p.start()如果想要调用shell命令,可以采用os.popen 或者是 subprocess.run 但是前者只能执行命令并获取输…...
卡尔曼滤波——一种基于滤波的时序状态估计方法
文章目录1. Kalman滤波及其应用2. Kalman原理公式推导:Step 1:模型建立Step 2:开始Kalman滤波Step 3:迭代滤波本文是对 How a Kalman filter works, in pictures一文学习笔记,主要是提炼核心知识,方便作者快…...
什么是X6CrMo17-1
X6CrMo17-1X6CrMo17-1是在430的基礎上加入了鉬,提高鋼的耐點蝕、耐縫隙腐蝕性及強度等,比430鋼抗鹽溶液體性強。一、X6CrMo17-1對應牌號:1、國標GB-T標準:數字牌號:S11790、新牌號:10Cr17Mo、舊牌號&#x…...
软件测试是个人就能做?恕我直言,你可能是个“纯粹”的测试工具人,BUG收集器
作为过来人的我和你说说软件测试的真正情况。 前言 一个软件做出来,最不能少的是谁?毫无疑问是开发,开发是最了解软件运作的那个人,早期就有不少一人撸网站或者APP的例子,相当于一个人同时是产品、研发、测试、运维等…...
递归算法(recursion algorithm)
递归算法 什么是递归算法 在过程或者函数里调用自身的算法; 递归算法(recursion algorithm),通过重复将问题分解为同类的子问题而解决问题的方法, Java中函数可以通过调用自身来进行递归,大多数编程语句…...
VScode下 ESP32 下载程序
ESP32-S3 下载方式可以通过UART0 下载,USB 下载,JTAG下载,还可以使用WIFI进行远程OTA升级程序。插件底栏按键介绍:①选择串口端口号,如COM3; ②选择芯片型号; ③工程idf设置,相当于menuconfig; …...
黑苹果日历
黑果日历 2023/2/27 总结 安装流程 制作启动U盘2017年,本来去当兵,结果近视👓没验上。父母我还想学什么?我想到了黑客操作电脑的画面,感觉特别酷。 2017年有了第一台自己的笔记本,是小米游戏本࿰…...
python+pytest接口自动化框架(5)-requests发送post请求
在HTTP协议中,与get请求把请求参数直接放在url中不同,post请求的请求数据需通过消息主体(request body)中传递。且协议中并没有规定post请求的请求数据必须使用什么样的编码方式,所以其请求数据可以有不同的编码方式,服务端通过请…...
Linux 进程:进程控制
目录一、进程创建1.fork2.vfork二、进程终止三、进程等待四、进程替换1.理解程序替换2.子进程在程序替换中的作用Linux的进程控制分为四部分: 进程创建进程终止进程等待进程替换 一、进程创建 常见的创建进程的函数有两个: pid_t fork(void)pid_t vf…...
过滤器的创建和执行顺序
过滤器的创建和执行顺序 8.1.1创建并配置过滤器 P143 重点是如何创建并配置(xml) 1.创建 public class EncodingFilter implements Filter {Overridepublic void init(FilterConfig filterConfig) throws ServletException {}Overridepublic void doFil…...
JDK1.8 ConcurrentHashMap
数据结构锁sizeCtlconcurrencyLevelForwardingNode、ReservationNode扩容get、put、removehashmap:线程不安全 hashtable:通过synchronized保证线程安全但效率低。强一致性 ConcurrentHashMap:弱一致性 数据结构 ConcurrentHashMap为node数…...
参考 Promise/A+ 规范和测试用例手写 Promise
前言 这可能是手写promise较清晰的文章之一。 由浅至深逐步分析了原生测试用例,以及相关Promise/A规范。阅读上推荐以疑问章节为切入重点,对比Promise/A规范与ECMAScript规范的内在区别与联系,确定怎样构建异步任务和创建promise实例。然后开…...
yolov5数据集制作
yolov5 数据集的格式 每个图像的标注信息存储在一个独立的txt文件中每个txt文件的名称应该与其对应的图像名称相同,只是文件扩展名不同。例如: 对于名为“image1.jpg”的图像,其标注信息应存储在名为“image1.txt”的txt文件中。 在每个txt文件中,每一行表示一个对象的标注…...
主板EC程序烧写异常致无法点亮修复经验
主板型号:Gigabyte AB350M-Gaming3 官网上明确写着支持R5 5500,但按照如下步骤实践下来实际是不支持的 升级biosF31到F40版本的注意事项: 步骤: 1 使用Q-Flash先将bios升级到f31版本;2 然后下载提示中的ECFW Update To…...
【Java爬取赛事网站】命令行输出(仅供学习)
Java爬取赛事网站 Java爬取赛事网站Java爬取赛事网站参与社区的问题回答Gitcode项目地址PSP表格解题思路描述问题接口设计和实现过程编写中的测试关键代码展示性能改进单元测试异常处理心路历程与收获参与社区的问题回答 问题回答这个作业属于哪个课程软件工程-23年春季学期这…...
redis主从复制原理
在 Redis 中,我们可以通过 SLAVEOF 命令或者 slaveof 选项,让一个服务器去复制另一个服务器,被复制的服务器称为“主服务器”,发起复制的服务器称为“从服务器”,由两种服务器组成的模式称为“主从复制”。 主从复制原…...
buu刷题(第一周)
目录 [DDCTF 2019]homebrew event loop action:trigger_event%23;action:buy;5%23action:get_flag; [CISCN2019 华东南赛区]Web4 [RootersCTF2019]babyWeb [GWCTF 2019]mypassword [NESTCTF 2019]Love Math 2 [BSidesCF 2019]Pick Tac Toe [RootersCTF2019]ImgXweb [SW…...
算法训练营 day62 单调栈 每日温度 下一个更大元素 I
算法训练营 day62 单调栈 每日温度 下一个更大元素 I 每日温度 739. 每日温度 - 力扣(LeetCode) 给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,…...
ChIP-seq 分析:Peak 注释与可视化(9)
1. 基因注释 到目前为止,我们一直在处理对应于转录因子结合的 ChIPseq 峰。顾名思义,转录因子可以影响其靶基因的表达。 转录因子的目标很难单独从 ChIPseq 数据中确定,因此我们通常会通过一组简单的规则来注释基因的峰: 如果峰与…...
ABB机器人配置DeviceNet总线IO板以及信号分配的具体方法示例
ABB机器人配置DeviceNet总线IO板以及信号分配的具体方法示例 基本步骤: 配置IO板分配IO信号这里以DeviceNet总线的DSQC652为例进行说明: 配置IO板的基本步骤: 配置IO板的型号 连接到总线 配置IO板的地址 (1台机器人可以配置多个IO板连接到DeviceNet总线,为了让机…...
2023 年网络安全漏洞的主要原因
网络安全漏洞已经并将继续成为企业面临的主要问题。因此,对于企业领导者来说,了解这些违规行为的原因至关重要,这样他们才能更好地保护他们的数据。 在这篇博文中,我们将概述 2023 年比较普遍的网络安全漏洞的主要原因。 云…...
剑指 Offer 34. 二叉树中和为某一值的路径
剑指 Offer 34. 二叉树中和为某一值的路径 难度:middle\color{orange}{middle}middle 题目描述 给你二叉树的根节点 rootrootroot 和一个整数目标和 targetSumtargetSumtargetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。 叶子节…...
2023前端vue面试题(边面边更)
Vue中key的作用 vue 中 key 值的作用可以分为两种情况来考虑: 第一种情况是 v-if 中使用 key。由于 Vue 会尽可能高效地渲染元素,通常会复用已有元素而不是从头开始渲染。因此当使用 v-if 来实现元素切换的时候,如果切换前后含有相同类型的…...
webpack配置完全指南
前言 对于入门选手来讲,webpack 配置项很多很重,如何快速配置一个可用于线上环境的 webpack 就是一件值得思考的事情。其实熟悉 webpack 之后会发现很简单,基础的配置可以分为以下几个方面: entry 、 output 、 mode 、 resolve …...
juju创建lxd容器时如何使用本地镜像(by quqi99)
作者:张华 发表于:2023-03-01 版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明 问题 没有外网,所以配置了一个local custom镜像库,也使用了container-image-meta…...
后端程序员学习前端开发之第一步环境搭建
一、安装 Node.js Node.js 是一个开源的、跨平台的 JavaScript 运行时环境。Node.js官网 二、安装 npm 镜像 因为 npm 是国外的,所以使用起来速度比较慢。我们这里使用了淘宝的 cnpm 镜像安装 vue。使用淘宝的 cnpm 命令管理工具代替默认的 npm 管理工具。 进入c…...
【记录问题】RuntimeError:working outside of application context. Flask使用SQLAlchemy数据库
前提:Flask使用SQLAlchemy数据库 本质:依赖包版本不匹配 问题1:报错RuntimeError:working outside of application context. 运行程序报错,如下错误: 原因:flask-sqlalchemy 版本过高导致&am…...
wordpress 更换模板/鹤壁搜索引擎优化
1.java.lang.Object类的说明: 1.Object类是所Java类的根父类 2.如果在类的声明中未使用extends关键字指明其父类,则默认父类为java.lang.Object类 3.Object类中的功能(属性、方法)就具通用性。 属性:无 方法:equals() / toString() / getClass() /hashCode() / clone() …...
上海做设计公司网站/微信推广平台
Nginx的简介 Nginx(发音同 engine x)是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。由俄罗斯的程序设计师Igor Sysoev所开发࿰…...
介绍化工项目建设和招聘的网站/河南企业网站建设
传送门 给你串A和串B,|B| < |A| 已知串B有两种可能含义,求串A的总可能含义数 dp[i]表示串A的从头开始长度为i的串的可能意义的数目 若该长度为i的串的后缀与模式串B匹配,则该后缀可以选择替换或者不替换 dp[i] dp[i - 1] dp[i - Bl] 否…...
自做装逼头像网站/关键词推广优化app
TCP主动关闭连接 appl: close(), --> FIN FIN_WAIT_1 //主动关闭socket方,调用close关闭socket,发FIN <-- ACK FIN_WAIT_2 //对方操作系统的TCP层,给ACK响应。然后给FIN <-- FIN …...
那个网站专利分析做的好/百度建站云南服务中心
有时候我们需要对其它应用程序发送和接收的网络数据进行拦截,比如要对IE发送的**头进行分析,得到请求的地址等.这次我们可以用一些例如WPE, Sniffer之类的工具来达到目的.但是工具功能有限,要想实现更强大的功能,还是我们自己动手来DIY吧.拦截网络数据封包的方法有三种,一是将网…...
企业网上推广方式/西安seo霸屏
LeetCode 456. 132模式 难度 中等 给定一个整数序列:a1, a2, …, an,一个132模式的子序列ai, aj, ak被定义为:当i < j < k时,ai < ak < aj。设计一个算法,当给定有n个数字的序列时,验证这个…...