当前位置: 首页 > news >正文

3.分支与循环

一、分支结构

1.概念

一个 CPP 程序默认是按照代码书写顺序,从上到下依次执行下来的。但是,有时我们需要选择性的执行某些语句,来实现更加复杂的逻辑,这时候就需要分支结构语句的功能来实现。选择合适的分支语句可以显著提高程序的效率。

2.if语句

(1)基本 if 语句

基本if语句的结构如下所示:

if(条件)
{语句1;
}

if语句通过对条件进行求值,若结果为真(非 0),执行语句,否则不执行。如果主体中只有单个语句的话,花括号可以省略。

(2)if...else语句

if...else语句的结构如下:

if(条件)
{语句1;
}
else
{语句2;
}

if...else语句和if语句类似,else不需要再写条件。当if语句的条件满足时会执行if里的语句,if语句的条件不满足时会执行else里的语句。同样,当主体只有一条语句时,可以省略花括号。

(3)else if语句

if(条件1)
{语句1;
}
else if(条件2)
{语句2;
}
else if(条件3)
{语句3;
}
else
{语句4;
}

else if语句是ifelse的组合,对多个条件进行判断并选择不同的语句分支。在最后一条的else语句不需要再写条件。以上述代码为例,它实现的逻辑是:

  • 若条件 1 为真,执行语句 1;
  • 否则,若条件 2 为真,执行语句2;
  • 否则,若条件 3 为真,执行语句 3;
  • 否则,即所有的条件都为假才执行主体 4。

3.switch语句

switch(选择句)
{case 标签1:语句1;case 标签2:语句2;default:语句3;
}

switch语句执行时,先求出选择句的值,然后根据选择句的值选择相应的标签,从标签处开始执行。其中,选择句必须是一个整数类型表达式,而标签都必须是整数类型的常量。

switch语句中还要根据需求加入break语句进行中断,否则在对应的case被选择之后接下来的所有case里的语句和default里的语句都会被运行。

int i=1;//int为整型的一种
switch(i)
{case 1:cout<<"first"<<endl;break;case 2:cout<<"second"<<endl;break;default:cout<<"others"<<endl;break;
}char j='A';// 这里的 j 的数据类型是字符型 ,但 char 也是属于整数的类型,满足整数类型的表达式的要求
switch(j)
{case 'A':cout<<"first"<<endl;break;case 'B':cout<<"second"<<endl;break;default:cout<<"others"<<endl;break;
}

处理入口编号不能重复,但可以颠倒。也就是说,入口编号的顺序不重要。各个case(包括default)的出现次序可任意。

switchcase分句中也可以选择性的加花括号。不过要注意的是,如果需要在switch语句中定义变量,花括号是必须要加的。例如:

int i=1;
switch(i)
{case 1:{int x;cout<<"first:"<<x<<endl;break;}case 2:cout<<"second"<<endl;break;default:cout<<"others"<<endl;break;
}

二、循环结构

1.概念

有时,我们需要做一件事很多遍,甚至有时候循环次数并不是一个常量,而是与输入的变量或者一些计算结果有关系。为了不写过多重复的代码,高效实现重复的功能,我们需要循环语句来帮助。

2.for语句

for循环语句的结构如下所示:

for(初始化;判断条件;更新)
{循环体;
}

for循环语句的执行顺序是:
初始化 → 判断条件 → 循环体 → 更新 → 判断条件 → 循环体 → 更新 → 判断条件 . . . 初始化\rightarrow判断条件\rightarrow循环体\rightarrow更新\rightarrow判断条件\rightarrow循环体\rightarrow更新\rightarrow判断条件... 初始化判断条件循环体更新判断条件循环体更新判断条件...
如果循环体只有一条语句,那么花括号同样也可以省略。除此以外,for语句的三个部分中,任何一个部分都可以省略。其中,若省略了判断条件,相当于判断条件永远为真。

例如,读入 n n n 个数我们可以采用以下方法:

for(int i=1;i<=n;i++)
{cin >> a[i];
}

3.while语句

while循环语句的结构如下所示:

while(判断条件)
{循环体;
}

while循环语句的执行顺序是:
判断条件 → 循环体 → 判断条件 → 循环体 . . . 判断条件\rightarrow循环体\rightarrow判断条件\rightarrow循环体... 判断条件循环体判断条件循环体...
如果循环体只有一条语句,那么花括号同样也可以省略。因为,while语句没有自带初始化和更新,为了不陷入死循环,需要程序员在其他地方实现这两个功能。

例如,验证冰雹猜想:

while(x>1)
{if(x%2==1)x=3*x+1;elsex=x/2;
}

4.do...while语句

do...while循环语句的结构如下所示:

do
{循环体;
}while(判断条件);

while循环语句的执行顺序是:
循环体 → 判断条件 → 循环体 → 判断条件 → 循环体 . . . 循环体\rightarrow判断条件\rightarrow循环体\rightarrow判断条件\rightarrow循环体... 循环体判断条件循环体判断条件循环体...
如果循环体只有一条语句,那么花括号同样也可以省略。do..whilewhile唯一的不同就在于,do..while不管判断条件如何,都会先执行一遍循环体。

5.breakcontinue语句

break 语句的作用是退出最近一层的循环。continue 语句的作用是跳过本次循环中,循环体的余下部分。

for(int i=1;i<=n;i++)
{if(i%2==0 || i%3==0)continue;cout<<i<<" ";
}//1,4,5,7,...int x=35;
for(int i=2;i<=n;i++)
{if(x%i==0)break;cout<<i<<" ";
}//2,3,4

三、作业

【入门2】分支结构

【入门3】循环结构

相关文章:

3.分支与循环

一、分支结构 1.概念 一个 CPP 程序默认是按照代码书写顺序&#xff0c;从上到下依次执行下来的。但是&#xff0c;有时我们需要选择性的执行某些语句&#xff0c;来实现更加复杂的逻辑&#xff0c;这时候就需要分支结构语句的功能来实现。选择合适的分支语句可以显著提高程序…...

面试之多线程案例(四)

1.单例模式 单例模式是指在内存中只会创建且仅创建一次对象的设计模式。在程序中多次使用同一个对象且作用相同时&#xff0c;为了防止频繁地创建对象使得内存飙升&#xff0c;单例模式可以让程序仅在内存中创建一个对象&#xff0c;让所有需要调用的地方都共享这一单例对象。…...

抄写Linux源码(Day1:获取并运行 Linux0.11)

Day1&#xff1a;获取并运行 Linux0.11 参考资料&#xff1a;https://zhuanlan.zhihu.com/p/438577225 这是我参考的一个别人写的 Linux0.11 解读&#xff1a;https://github.com/dibingfa/flash-linux0.11-talk 我获取 Linux-0.11 源码的链接&#xff1a;https://github.com/…...

大数据_Hadoop_Parquet数据格式详解

之前有面试官问到了parquet的数据格式&#xff0c;下面对这种格式做一个详细的解读。 参考链接 &#xff1a; 列存储格式Parquet浅析 - 简书 Parquet 文件结构与优势_parquet文件_KK架构的博客-CSDN博客 Parquet文件格式解析_parquet.block.size_davidfantasy的博客-CSDN博…...

Docker的安装和部署

目录 一、Docker的安装部署 &#xff08;1&#xff09;关闭防火墙 &#xff08;2&#xff09;关闭selinux &#xff08;3&#xff09;安装docker引擎 &#xff08;4&#xff09;启动docker &#xff08;5&#xff09;设置docker自启动 &#xff08;6&#xff09;测试doc…...

FPGA项目实现:秒表设计

文章目录 项目要求项目设计 项目要求 设计一个时钟秒表&#xff0c;共六个数码管&#xff0c;前两位显示分钟&#xff0c;中间两位显示时间秒&#xff0c;后两位显示毫秒的高两位&#xff0c;可以通过按键来开始、暂停以及重新开始秒表的计数。 项目设计 为完成此项目共设计…...

Postgresql源码(109)并行框架实例与分析

1 PostgreSQL并行参数 系统参数 系统总worker限制&#xff1a;max_worker_processes 默认8 系统总并发限制&#xff1a;max_parallel_workers 默认8 单Query限制&#xff1a;max_parallel_workers_per_gather 默认2 表参数限制&#xff1a;parallel_workers alter table tbl …...

ES派生类的prototype方法中,不能访问super的解决方案

1 下面的B.prototype.compile方法中&#xff0c;无法访问super class A {compile() {console.log(A)} }class B extends A {compile() {super.compile()console.log(B)} }B.prototype.compile function() {super.compile() // 报错&#xff0c;不可以在此处使用superconsole.…...

使用adb通过电脑给安卓设备安装apk文件

最近碰到要在开发板上安装软件的问题&#xff0c;由于是开发板上的安卓系统没有解析apk文件的工具&#xff0c;所以无法通过直接打开apk文件来安装软件。因此查询各种资料后发现可以使用adb工具&#xff0c;这样一来可以在电脑上给安卓设备安装软件。 ADB 就是连接 Android 手…...

113、单例Bean是单例模式吗?

单例Bean是单例模式吗? 通常来说,单例模式是指在一个JVM中,一个类只能构造出来一个对象,有很多方法来实现单例模式,比如懒汉模式,但是我们通常讲的单例模式有一个前提条件就是规定在一个JVM中,那如果要在两个JVM中保证单例呢?那可能就要用分布式锁这些技术,这里的重点…...

RabbitMQ 集群部署

RabbiMQ 是用 Erlang 开发的,集群非常方便,因为 Erlang 天生就是一门分布式语言,但其本身并不支持负载均衡。 RabbitMQ 的集群节点包括内存节点、磁盘节点。RabbitMQ 支持消息的持久化,也就是数据写在磁盘上,最合适的方案就是既有内存节点,又有磁盘节点。 RabbitMQ 模式大…...

2023年【零声教育】13代C/C++Linux服务器开发高级架构师课程体系分析

对于零声教育的C/CLinux服务器高级架构师的课程到2022目前已经迭代到13代了&#xff0c;像之前小编也总结过&#xff0c;但是课程每期都有做一定的更新&#xff0c;也是为了更好的完善课程跟上目前互联网大厂的岗位技术需求&#xff0c;之前课程里面也包含了一些小的分支&#…...

iOS开发-实现热门话题标签tag显示控件

iOS开发-实现热门话题标签tag显示控件 话题标签tag显示非常常见&#xff0c;如选择你的兴趣&#xff0c;选择关注的群&#xff0c;超话&#xff0c;话题等等。 一、效果图 二、实现代码 由于显示的是在列表中&#xff0c;这里整体控件是放在UITableViewCell中的。 2.1 标签…...

linux系统磁盘性能监视工具iostat

目录 一、iostat介绍 二、命令格式 三、命令参数 四、参考命令&#xff1a;iostat -c -x -k -d 1 &#xff08;一&#xff09;输出CPU 属性值 &#xff08;二&#xff09;CPU参数分析 &#xff08;三&#xff09;磁盘每一列的含义 &#xff08;四&#xff09;磁盘参数分…...

BT#蓝牙 - Link Policy Settings

对于Classic Bluetooth的Connection&#xff0c;有一个Link_Policy_Settings&#xff0c;是HCI configuration parameters中的一个。 Link_Policy_Settings 参数决定了本地链路管理器(Link Manager)在收到来自远程链路管理器的请求时的行为&#xff0c;还用来决定改变角色(rol…...

c++ | 动态链接库 | 小结

//环境 linux c //生成动态链接库 //然后调用动态链接库中的函数//出现的问题以及解决//注意在win和在linux中调用动态链接库的函数是不一样的//在要生成链接库的cpp文件中比如以后要调用本文件中的某个函数&#xff0c;需要extern "c" 把你定的函数“再封装”避免重…...

如何使用Flask-SQLAlchemy来管理数据库连接和操作数据?

首先&#xff0c;我们需要安装Flask-SQLAlchemy。你可以使用pip来安装它&#xff0c;就像这样&#xff1a; pip install Flask-SQLAlchemy好了&#xff0c;现在我们已经有了一个可以操作数据库的工具&#xff0c;接下来让我们来看看如何使用它吧&#xff01; 首先&#xff0c…...

麒麟-飞腾Kylin-V4桌面arm64系统静态编译QT

1.系统具体版本&#xff1a; 2. 因为此版本的源很老了&#xff0c;需要修改版本的源&#xff0c;才能正常更新各种软件&#xff0c;否则&#xff0c;你连麒麟商店都打不开。 sudo vi /etc/apt/sources.list 选择你系统对应版本的源地址&#xff1a; #4.0.2桌面版本: deb ht…...

CentOS 项目发出一篇奇怪的博文

导读最近&#xff0c;在红帽限制其 RHEL 源代码的访问之后&#xff0c;整个社区围绕这件事发生了很多事情。 CentOS 项目发出一篇奇怪的博文 周五&#xff0c;CentOS 项目董事会发出了一篇模糊不清的简短博文&#xff0c;文中称&#xff0c;“发展社区并让人们更容易做出贡献…...

【Mybatis-Plus】or拼接

Mybatis-Plus的or拼接是个坑&#xff1a; 这是需要的结果&#xff1a; queryWrapper.and(c->c.or(a->a.eq("qcs3.status", "SIGNING").eq("qcs.status", "SIGNING")).or(b->b.eq("qcs.status","INVALIDING&q…...

QT实战:5分钟搞定QChartView动态折线图(附完整代码)

QT实战&#xff1a;5分钟实现高性能动态折线图开发指南 在工业控制、金融分析、物联网监控等领域&#xff0c;实时数据可视化一直是开发者的核心需求。QT框架提供的QChart模块&#xff0c;以其高效的渲染性能和简洁的API设计&#xff0c;成为C开发者构建动态图表的首选方案。本…...

华硕梅林固件下,让HP1020打印机在Linux网络环境中重获新生

1. 为什么HP1020打印机在Linux网络环境中会"罢工"&#xff1f; 每次看到那台尘封已久的HP LaserJet 1020打印机&#xff0c;我都觉得特别可惜。这台老伙计在Windows系统下表现一直很稳定&#xff0c;但当我尝试把它接入刷了梅林固件的华硕路由器时&#xff0c;却遇到…...

AI-AGENT概念解析 - LLM任务训练

**问题&#xff1a;LLM大模型是否针对写作&#xff0c;做PPT&#xff0c;编写程序&#xff0c;拆解任务这些输入参数&#xff0c;用同一个大模型需要训练为不同的模型结构或参数化的权重矩阵去适应那些不同的提示词输入参数&#xff1f; 对于不同的任务类型&#xff08;写作、做…...

Rufus终极指南:轻松制作Windows 11启动盘,一键绕过TPM限制

Rufus终极指南&#xff1a;轻松制作Windows 11启动盘&#xff0c;一键绕过TPM限制 【免费下载链接】rufus The Reliable USB Formatting Utility 项目地址: https://gitcode.com/GitHub_Trending/ru/rufus 还在为Windows 11的TPM 2.0硬件要求而烦恼吗&#xff1f;你的旧…...

别再傻傻用远程桌面了!手把手教你用华为服务器自带的KVM工具(附初始IP和密码)

华为服务器KVM工具实战指南&#xff1a;解锁高效运维新姿势 第一次接触华为服务器时&#xff0c;我和大多数运维新手一样&#xff0c;本能地打开远程桌面连接工具&#xff0c;输入IP地址准备登录。直到某次机房网络故障&#xff0c;我才发现华为早已在服务器中内置了一把"…...

大麦抢票自动化工具:3分钟提升10倍成功率的技术秘籍

大麦抢票自动化工具&#xff1a;3分钟提升10倍成功率的技术秘籍 【免费下载链接】ticket-purchase 大麦自动抢票&#xff0c;支持人员、城市、日期场次、价格选择 项目地址: https://gitcode.com/GitHub_Trending/ti/ticket-purchase 你是否经历过这样的场景&#xff1f…...

OpenClaw技能扩展:基于百川2-13B开发自定义文件处理器

OpenClaw技能扩展&#xff1a;基于百川2-13B开发自定义文件处理器 1. 为什么需要自定义文件处理技能 上周我在整理项目文档时&#xff0c;发现一个重复性痛点&#xff1a;每天需要手动将同事发来的各种格式文件&#xff08;PDF、Word、Markdown&#xff09;按内容分类存储。当…...

CameraFileCopy:重新定义无网络文件传输的安卓应用

CameraFileCopy&#xff1a;重新定义无网络文件传输的安卓应用 【免费下载链接】cfc Demo/test android app for libcimbar. Copy files over the cell phone camera! 项目地址: https://gitcode.com/gh_mirrors/cfc/cfc 在移动设备普及的今天&#xff0c;我们依然经常面…...

OpenClaw调试技巧:ollama-QwQ-32B任务失败日志分析方法

OpenClaw调试技巧&#xff1a;ollama-QwQ-32B任务失败日志分析方法 1. 为什么需要关注OpenClaw任务失败日志 上周我在尝试用OpenClaw自动整理项目文档时&#xff0c;遇到了一个令人抓狂的问题&#xff1a;明明配置好了ollama-QwQ-32B模型&#xff0c;任务却总是莫名其妙地卡在…...

ORCAD TCL脚本菜单化加载与性能调优实践

1. ORCAD TCL脚本菜单化加载的必要性 作为一名在电子设计自动化领域摸爬滚打多年的工程师&#xff0c;我深刻理解ORCAD用户在使用TCL脚本时遇到的痛点。当你的脚本库逐渐壮大&#xff0c;每次启动ORCAD都要自动加载几十个脚本文件&#xff0c;那种等待的煎熬简直让人抓狂。我曾…...