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://xiahunao.cn/news/2779198.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

《零基础实践深度学习》基于线性回归实现波士顿房价预测任务1.3.3

1.3.3 基于线性回归实现波士顿房价预测任务 深度学习不仅实现了模型的端到端学习&#xff0c;还推动了人工智能进入工业大生产阶段&#xff0c;产生了标准化、自动化和模块化的通用框架。不同场景的深度学习模型具备一定的通用性&#xff0c;五个步骤即可完成模型的构建和训练&…

vs2019 - signtool签名和验签的手工操作

文章目录 vs2019 - signtool签名和验签的手工操作概述笔记导入根证书时间戳服务器的选择code sign - 签名文件在代码签名(code sign)前后的区别签名后, 查看属性, 是正常的.用signtool命令行进行验签移除签名END vs2019 - signtool签名和验签的手工操作 概述 signtool是进行c…

linux优化空间完全卸载mysql——centos7.9

文章目录 ⭐前言⭐linux命令使用&#x1f496; 基础命令&#x1f496; 内存优化&#x1f496; 完全删除mysql ⭐结束 ⭐前言 大家好&#xff0c;我是yma16&#xff0c;linux优化空间&完全卸载mysql——centos7.9。 linux内存分配 在Linux中&#xff0c;内存分配是通过几种…

Linux---网络基础

计算机中的常见概念 协议&#xff08;Protocol&#xff09;&#xff1a; 协议是计算机网络中用于通信的规则和约定的集合。它规定了数据传输的格式、序列、错误检测和纠正方法等。常见的网络协议包括TCP/IP、HTTP、FTP等。 IP地址&#xff08;IP Address&#xff09;&#xf…

Python3集合 set 心得

Python3集合 set 心得 本文是个人在学习中的一些心得&#xff0c;不能保证文中的内容准确&#xff0c;欢迎大家批评指正。 集合 set 是Python中的一种数据容器&#xff0c;集合有2种定义方式。 1、花括号 {} &#xff0c;花括号内加入集合的元素&#xff0c;元素之间用逗号 …

通过Dynamo删除Revit中族参数探究

起因是这样的&#xff0c;有位同事想在项目中直接删除revit族的参数&#xff0c;而不打开族&#xff0c;避免因为重载族&#xff0c;造成一些管件连接断开&#xff0c;于是就有了下面这些研究&#xff0c;当然是因为我没办法实现这个想法&#xff0c;所以这次可以分享下研究的过…

linux系统定时任务管理

crontab使用 一、crontab简介 crontab 这个指令所设置的工作将会循环的一直进行下去&#xff01;可循环的时间为分钟、小时、每周、每月或每年等。crontab 除了可以使用指令执行外&#xff0c;亦可编辑 /etc/crontab 来支持。 至于让 crontab 可以生效的服务则是 crond 这个服…

39 MDK 的编译过程及文件类型全解

文章目录 39.1 编译过程39.1.1 编译过程简介 39.2 程序的组成、存储与运行39.3 编译工具链39.3.1 MDK编译文件39.3.2 设置环境变量39.3.3 运行39.3.4 armcc、armasm 及 armlink39.3.4.1 armcc39.3.4.2 查询具体的MDK编译选项的具体信息39.3.4.3 armasm39.3.4.4 armlink39.3.4.5…

“OLED屏幕,色彩绚丽,画面清晰,让每一帧都生动无比。“#IIC协议【上】

"OLED屏幕&#xff0c;色彩绚丽&#xff0c;画面清晰&#xff0c;让每一帧都生动无比。"#IIC协议【上】 前言预备知识1.IIC协议初识1.1 IIC协议概述1.2 IIC协议的特点1.3 IIC协议的构成 2. IIC起始信号和终止信号2.1起始型号和终止信号时序图分析2.2起始信号函数和终…

JAVA学习笔记9

1.Java API 文档 1.java类的组织形式 2.字符类型(char) 1.基本介绍 ​ *字符类型可以表示单个字符&#xff0c;字符类型是char&#xff0c;char是两个字节&#xff08;可以存放汉字&#xff09;&#xff0c;多个字符我们用字符串String ​ eg:char c1 ‘a’; ​ char c2…

【Android】使用Android Studio运行Hello World项目

文章目录 1. JDK的安装与配置2. Android Studio的安装3. 运行Hello World项目3.1 新建项目3.2 修改项目配置3.2.1 修改UI界面3.2.2 配置 Android SDK 3.3 添加并运行虚拟设备3.4 运行项目 1. JDK的安装与配置 想要使用Android Studio&#xff0c;必须先配置Java环境&#xff0…

vue3初识

目录 一、前言二、主观感受三、vue3初探 原文以及该系列教程文章后续可点击这里查看&#xff1a;vue初识 一、前言 Vue.js是一款流行的前端框架&#xff0c;最初由尤雨溪&#xff08;Evan You&#xff09;于2014年创建&#xff0c;非常的年轻。官网为vue3&#xff0c; 但要注…

Learn LaTeX 015 - LaTex Typeset 抄录

https://www.douyin.com/user/self?modal_id7306721102380764453&showTabpost GitHub address: https://github.com/yasenstar/learn_latex Gitee address: https://gitee.com/yasenstar/learn_latex

windows 查看磁盘空间 treesizefree

https://downloads.jam-software.de/treesize_free/TreeSizeFreeSetup.exe

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

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

清空队列的方法

注意&#xff1a;C中的队列queue自身不支持clear操作&#xff0c;但双端队列deque是支持clear操作的。 方法一&#xff1a;直接用空的队列对象赋值 代码&#xff1a; queue<int> q; qqueue<int>(); 方法二&#xff1a;遍历出队列 代码&#xff1a; while(!q…

C#系列-使用 Minio 做图片服务器实现图片上传 和下载(13)

1、Minio 服务器下载和安装 要在本地安装和运行 MinIO 服务器&#xff0c;你可以按照以下 步骤进行操作&#xff1a; 1. 访问 MinIO 的官方网站&#xff1a;https://min.io/&#xff0c;然后 点击页面上的”Download”按钮。 2. 在下载页面上&#xff0c;选择适合你操作系统的 …

AJ-Report 【开源的一个BI平台】

AJ-Report是全开源的一个BI平台&#xff0c;酷炫大屏展示&#xff0c;能随时随地掌控业务动态&#xff0c;让每个决策都有数据支撑。     多数据源支持&#xff0c;内置mysql、elasticsearch、kudu驱动&#xff0c;支持自定义数据集省去数据接口开发&#xff0c;目前已支持30…

【JS逆向六】(下)逆向解密某网站返回的密文的值 仅供学习

逆向日期&#xff1a;2024.02.07 使用工具&#xff1a;Node.js 文章全程已做去敏处理&#xff01;&#xff01;&#xff01; 【需要做的可联系我】 可使用AES进行解密处理&#xff08;直接解密即可&#xff09;&#xff1a;在线AES加解密工具 1、打开某某网站(请使用文章开头的…

2024年1月23日 Go生态洞察:开发者对Go的反馈分享

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a;…