C++重新入门-循环

目录

1.循环类型

while循环:

for循环

基于范围的for循环(C++11)

do...while 循环

2.循环控制语句

3.无限循环


有的时候,可能需要多次执行同一块代码。一般情况下,语句是顺序执行的:函数中的第一个语句先执行,接着是第二个语句,依此类推。

编程语言提供了允许更为复杂的执行路径的多种控制结构。

循环语句允许我们多次执行一个语句或语句组,下面是大多数编程语言中循环语句的一般形式:

1.循环类型

C++ 编程语言提供了以下几种循环类型。

while循环:

在C++中,while 循环是一种常见的控制流结构,用于重复执行一段代码,直到给定的条件为假为止。while 循环的语法如下:

while (condition) {// 在条件为真时执行的代码块
}

condition 是一个表达式,它会在每次循环迭代开始时被求值。只要 condition 的值为真(非零),循环中的代码块就会被执行。一旦 condition 的值为假(0),循环将终止,控制流将跳到循环之后的代码。

下面是一个简单的示例,展示了 while 循环的基本用法:

#include <iostream>int main() {int count = 0;while (count < 5) {std::cout << "Count: " << count << std::endl;count++;}std::cout << "Loop finished." << std::endl;return 0;
}

在这个示例中,while 循环重复执行了一个打印语句,直到 count 的值达到 5 为止。每次循环迭代时,count 的值都会增加,直到达到终止条件。

需要注意的是,如果 condition 初始值为假,循环中的代码块将不会被执行,例如:

#include <iostream>int main() {int count = 10;while (count < 5) {std::cout << "This won't be printed." << std::endl;count++;}std::cout << "Loop finished." << std::endl;return 0;
}

在这个示例中,count 的初始值为 10,因此 while 循环的条件 count < 5 为假,循环中的代码块不会执行,直接跳到循环之后的代码。

需要谨慎避免进入无限循环,即循环条件永远为真的情况,这将导致程序陷入无限循环中,永远无法终止。

for循环

for 循环是C++中另一种常见的循环结构,通常用于迭代固定次数的循环或者遍历容器等数据结构。for 循环的语法如下:

for (initialization; condition; update) {// 在条件为真时执行的代码块
}

其中:

  • initialization:循环开始前的初始化表达式,通常用于初始化计数器或声明迭代变量。
  • condition:循环迭代的条件表达式,类似于 while 循环的条件部分。
  • update:循环迭代后更新迭代变量的表达式。

 

for 循环会按照以下步骤执行:

  1. 执行 initialization 部分,通常用于初始化循环计数器或者迭代变量。
  2. 检查 condition 是否为真。如果为真,则执行循环中的代码块,然后执行 update 部分。
  3. 重复步骤2,直到 condition 为假,然后退出循环,执行循环后的代码。

下面是一个简单的示例,展示了 for 循环的基本用法:

#include <iostream>int main() {for (int i = 0; i < 5; i++) {std::cout << "Count: " << i << std::endl;}std::cout << "Loop finished." << std::endl;return 0;
}

在这个示例中,for 循环用于迭代从0到4的5个整数,并在每次迭代中打印当前的计数器值。循环终止条件是 i < 5,每次迭代后 i 的值会递增。

while 循环一样,for 循环也需要谨慎避免进入无限循环,确保循环条件能够在某个时刻变为假。

基于范围的for循环(C++11)

基于范围的 for 循环是 C++11 引入的一种循环结构,用于遍历容器中的元素或者其他可迭代对象的元素,语法简洁易读。使用基于范围的 for 循环可以更加方便地遍历数组、容器、字符串等数据结构,而不必关心索引或迭代器的细节。

基于范围的 for 循环的语法如下:

for (declaration : range) {// 在每次迭代中使用当前元素的代码
}

其中:

  • declaration:用于声明迭代变量的语句,通常是对应容器中元素类型的引用或者值的拷贝。
  • range:要遍历的范围,可以是数组、容器、字符串等。

 下面是一个简单的示例,展示了基于范围的 for 循环的用法:

#include <iostream>
#include <vector>int main() {std::vector<int> numbers = {1, 2, 3, 4, 5};// 使用基于范围的for循环遍历vector中的元素for (int num : numbers) {std::cout << num << " ";}std::cout << std::endl;std::string message = "Hello";// 使用基于范围的for循环遍历字符串中的字符for (char ch : message) {std::cout << ch << " ";}std::cout << std::endl;return 0;
}

在这个示例中,首先使用基于范围的 for 循环遍历了一个整型向量 numbers 中的元素,并打印每个元素的值。然后,使用相同的方法遍历了一个字符串 message 中的字符,并打印出来。

基于范围的 for 循环可以使代码更加简洁、清晰,并且避免了手动处理索引或迭代器的麻烦。

do...while 循环

do...while 循环是C++中的一种循环结构,与 while 循环类似,但在判断循环条件之前,先执行一次循环体。这意味着 do...while 循环至少会执行一次循环体,即使循环条件一开始就为假。

do...while 循环的语法如下:

do {// 循环体
} while (condition);

其中:

  • condition:循环条件,类似于 while 循环中的条件表达式。

下面是一个简单的示例,展示了 do...while 循环的用法:

#include <iostream>int main() {int count = 0;do {std::cout << "Count: " << count << std::endl;count++;} while (count < 5);std::cout << "Loop finished." << std::endl;return 0;
}

在这个示例中,do...while 循环会至少执行一次循环体,即使 count 的初始值大于或等于 5。循环体内部的 count++ 语句使得 count 每次循环迭代时增加,直到达到循环条件 count < 5 不成立为止。

需要注意的是,尽管 do...while 循环会至少执行一次循环体,但在编写代码时仍然需要谨慎考虑循环的逻辑,确保循环条件的正确性,以避免不必要的循环执行。

2.循环控制语句

循环控制语句是用于在循环执行过程中改变控制流程的语句。在C++中,有三种主要的循环控制语句:breakcontinuegoto

 breakbreak 语句用于立即终止循环,并跳出循环体。当执行 break 时,循环执行会立即停止,控制流将跳到循环之后的代码。

for (int i = 0; i < 10; i++) {if (i == 5) {break; // 当 i == 5 时,终止循环}std::cout << i << " ";
}

 

 continuecontinue 语句用于跳过当前循环迭代的剩余部分,立即进入下一次迭代。执行 continue 时,当前迭代中 continue 语句之后的代码将不再执行,直接进行下一次循环迭代。

for (int i = 0; i < 5; i++) {if (i == 2) {continue; // 当 i == 2 时,跳过本次迭代}std::cout << i << " ";
}

 

 gotogoto 语句允许直接跳转到程序中的标签位置。尽管 goto 语句在大多数情况下应该避免使用,因为它容易导致程序难以理解和维护,但在某些特殊情况下,它可能是一种有效的控制流程工具。

for (int i = 0; i < 5; i++) {if (i == 3) {goto endLoop; // 当 i == 3 时,跳转到标签 endLoop 处}std::cout << i << " ";
}
endLoop:
std::cout << "End of loop." << std::endl;

 3.无限循环

如果条件永远不为假,则循环将变成无限循环。for 循环在传统意义上可用于实现无限循环。由于构成循环的三个表达式中任何一个都不是必需的,您可以将某些条件表达式留空来构成一个无限循环。

#include <iostream>
using namespace std;int main ()
{for( ; ; ){printf("This loop will run forever.\n");}return 0;
}

当条件表达式不存在时,它被假设为真。您也可以设置一个初始值和增量表达式,但是一般情况下,C++ 程序员偏向于使用 for(;;) 结构来表示一个无限循环。 

注意:您可以按 Ctrl + C 键终止一个无限循环。

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

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

相关文章

AI:126-基于深度学习的人体情绪识别与分析

🚀点击这里跳转到本专栏,可查阅专栏顶置最新的指南宝典~ 🎉🎊🎉 你的技术旅程将在这里启航! 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 ✨✨✨ 每一个案例都附带有在本地跑过的关键代码,详细讲解供…

react函数组件中使用context

效果 1.在父组件中创建一个createcontext并将他导出 import React, { createContext } from react import Bpp from ./Bpp import Cpp from ./Cpp export let MyContext createContext(我是组件B) export let Ccontext createContext(我是组件C)export default function App…

使用client-only 解决组件不兼容SSR问题

目录 前言 一、解决方案 1.基于Nuxt 框架的SSR应用 2.基于vue2框架的应用 3.基于vue3框架的应用 二、总结 往期回顾 前言 最近在我的单页面SSR应用上开发JSON编辑器功能&#xff0c;在引入组件后直接客户端跳转OK&#xff0c;但是在直接加载服务端渲染的时候一直报这…

Netty应用(六) 之 异步 Channel

目录 12.Netty异步的相关概念 12.1 异步编程的概念 12.2 方式1&#xff1a;主线程阻塞&#xff0c;等待异步线程完成调用&#xff0c;然后主线程发起请求IO 12.3 方式2&#xff1a;主线程注册异步线程&#xff0c;异步线程去回调发起请求IO 12.4 细节注释 12.5 异步的好处…

HiveSQL——用户行为路径分析

注&#xff1a;参考文档&#xff1a; SQL之用户行为路径分析--HQL面试题46【拼多多面试题】_路径分析 sql-CSDN博客文章浏览阅读2k次&#xff0c;点赞6次&#xff0c;收藏19次。目录0 问题描述1 数据分析2 小结0 问题描述已知用户行为表 tracking_log&#xff0c; 大概字段有&…

2.12作业

程序代码&#xff1a; #include<stdlib.h> #include<string.h> #include<stdio.h>//递归实现n! int n(int element) {if(0element)return 1;return element*n(element-1); }//递归实现0-n的和 int sub_sum(int element) {if(0element)return 0;return eleme…

计算机二级C语言备考学习记录

一、C语言程序的结构 1.程序的构成&#xff0c;main函数和其他函数。 程序是由main函数和其他函数构成main作为主函数&#xff0c;一个C程序里只有一个main函数其他函数可以分为系统函数和用户函数&#xff0c;系统函数为编译系统提供&#xff0c;用户函数由用户自行编写 2.…

《动手学深度学习(PyTorch版)》笔记7.7

注&#xff1a;书中对代码的讲解并不详细&#xff0c;本文对很多细节做了详细注释。另外&#xff0c;书上的源代码是在Jupyter Notebook上运行的&#xff0c;较为分散&#xff0c;本文将代码集中起来&#xff0c;并加以完善&#xff0c;全部用vscode在python 3.9.18下测试通过&…

重温阿里云宝塔面板部署前后端项目

首先祝大家新年快乐啊&#xff01; 回到老家&#xff0c;便打算趁这一段空闲时间提升一下自己&#xff0c;重点是学习实践一下echarts相关内容&#xff0c;很多公司项目都需要实现可视化&#xff0c;所以在bilibili上找了黑马的一个教程开始学习&#xff0c;不同的是&#xff…

电子电器架构 —— 区域控制器是未来架构的正解吗?

电子电器架构 —— 区域控制器是未来架构的正解吗? 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师(Wechat:gongkenan2013)。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 本就是小人物,输了就是输了,不要在意别人怎么看自己。江湖一碗茶…

Linux(Ubuntu) 环境搭建:远程终端软件(MobeXterm)

一、MobaXterm下载地址 服务器的远程终端软件我选择的是&#xff1a;MobaXtermMobaXterm 官方网站下载地址&#xff1a;https://mobaxterm.mobatek.net/download.htmlMobaXterm 汉化版下载地址&#xff1a;https://github.com/RipplePiam/MobaXterm-Chinese-Simplified 二、官…

C# 字体大小的相关问题

设置字体大小无法这么写&#xff0c; button1.Font.Size 20&#xff1b; 这个是只读属性&#xff1b; 把字体大小改为16&#xff0c; button2.Font new Font(button2.Font.Name, 16); 程序运行的时候先看一下窗体和控件的默认字体尺寸&#xff0c;都是9&#xff1b;然后点b…

汽车出租管理系统

文章目录 汽车出租管理系统一、系统演示二、项目介绍三、系统部分功能截图四、部分代码展示五、底部获取项目源码&#xff08;9.9&#xffe5;带走&#xff09; 汽车出租管理系统 一、系统演示 汽车租赁系统 二、项目介绍 语言&#xff1a;java 框架&#xff1a;SpringBoot、…

Zabbix报警机制、配置钉钉机器人、自动发现、主动监控概述、配置主动监控、zabbix拓扑图、nginx监控实例

目录 配置告警 用户数超过50&#xff0c;发送告警邮件 实施 验证告警配置 配置钉钉机器人告警 创建钉钉机器人 编写脚本并测试 添加报警媒介类型 为用户添加报警媒介 创建触发器 创建动作 验证 自动发现 配置自动发现 主动监控 配置web2使用主动监控 修改配置文…

《统计学简易速速上手小册》第5章:回归分析(2024 最新版)

文章目录 5.1 线性回归基础5.1.1 基础知识5.1.2 主要案例&#xff1a;员工薪资预测5.1.3 拓展案例 1&#xff1a;广告支出与销售额关系5.1.4 拓展案例 2&#xff1a;房价与多个因素的关系 5.2 多元回归分析5.2.1 基础知识5.2.2 主要案例&#xff1a;企业收益与多因素关系分析5.…

Linux上MySQL安装部署

准备工作 在/opt/software目录下创建mysql目录用来存放MySQL安装包: 链接&#xff1a;https://pan.baidu.com/s/1pjc-w6MSNlpptUjsZXNEdQ?pwd6666 cd /opt/softwaremkdir mysql 将安装包上传到mysql目录 安装部署 &#xff08;1&#xff09;卸载MySQL依赖&#xff0c;虽…

Java图形化界面编程——弹球游戏 笔记

Java也可用于开发一些动画。所谓动画&#xff0c;就是间隔一定的时间(通常小于0 . 1秒 )重新绘制新的图像&#xff0c;两次绘制的图像之间差异较小&#xff0c;肉眼看起来就成了所谓的动画 。 ​ 为了实现间隔一定的时间就重新调用组件的 repaint()方法&#xff0c;可以借助于…

C++ 贪心 区间问题 区间分组

给定 N 个闭区间 [ai,bi] &#xff0c;请你将这些区间分成若干组&#xff0c;使得每组内部的区间两两之间&#xff08;包括端点&#xff09;没有交集&#xff0c;并使得组数尽可能小。 输出最小组数。 输入格式 第一行包含整数 N &#xff0c;表示区间数。 接下来 N 行&…

Linux cp命令注意事项

目录 一. 基本语法二. 文件复制到文件夹时的路径存在问题三. 文件复制到文件夹时&#xff0c;记得给文件夹路径加上/ 一. 基本语法 -r&#xff1a;递归地复制目录及其内容。-p&#xff1a;保留源文件或目录的属性&#xff08;包括权限、所有者、组、时间戳等&#xff09;。 c…

Hugging Face 刚刚推出了一款开源的 AI 助手制造工具,直接向 OpenAI 的定制 GPT 挑战

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…