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 键终止一个无限循环。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用Flash download tool进行ESP32固件烧录

背景 为方便分发固件&#xff0c;可在任意电脑上安装烧录软件&#xff0c;直接将固件烧录进 烧录内容 查看vscode上platformio的烧录过程 Writing at 0x00000000... (100 %) Wrote 15104 bytes (10401 compressed) at 0x00000000 in 0.4 seconds (effective 281.3 kbit/s).…

【Spring源码分析】Spring的启动流程源码解析

阅读此需阅读下面这些博客先【Spring源码分析】Bean的元数据和一些Spring的工具【Spring源码分析】BeanFactory系列接口解读【Spring源码分析】执行流程之非懒加载单例Bean的实例化逻辑【Spring源码分析】从源码角度去熟悉依赖注入&#xff08;一&#xff09;【Spring源码分析】…

【Linux环境基础开发工具的使用(yum、vim、gcc、g++、gdb、make/Makefile)】

Linux环境基础开发工具的使用yum、vim、gcc、g、gdb、make/Makefile Linux软件包管理器- yumLinux下安装软件的方式认识yum查找软件包安装软件如何实现本地机器和云服务器之间的文件互传卸载软件 Linux编辑器 - vimvim的基本概念vim下各模式的切换vim命令模式各命令汇总vim底行…

openresty (nginx)快速开始

文章目录 一、什么是openresty&#xff1f;二、openresty编译安装1. 编译安装命令1.1 编译完成后路径1.2 常用编译选项解释 2. nginx配置文件配置2.1 nginx.conf模板 3. nginx常见配置一个站点配置多个域名nginx配置中location匹配规则 三、OpenResty工作原理OpenResty工作原理…

实现自定义标记

实现自定义标记 问题陈述 New Tech Book的高级管理层决定在其用JSP设计的应用程序的所有页面上显示版权信息。它们还要去如何向应用程序中添加JSP页面,可以重用显示版本信息的代码。公司的软件开发人员Jerry Smith决定用自定义标记来创建应用程序的这一部分。 解决方案 要解…

【数学建模】【2024年】【第40届】【MCM/ICM】【D题 五大湖的水位控制问题】【解题思路】

一、题目 &#xff08;一&#xff09; 赛题原文 2024 ICM Problem D: Great Lakes Water Problem Background The Great Lakes of the United States and Canada are the largest group of freshwater lakes in the world. The five lakes and connecting waterways const…

社区团购系统-UMLChina建模知识竞赛第5赛季第6轮

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 参考潘加宇在《软件方法》和UMLChina公众号文章中发表的内容作答。在本文下留言回答。 只要最先答对前3题&#xff0c;即可获得本轮优胜。 如果有第4题&#xff0c;第4题为附加题&am…

SpringBoot3整合Knife4j

前置&#xff1a; 官网&#xff1a;快速开始 | Knife4j gitee&#xff1a;swagger-bootstrap-ui-demo: knife4j 以及swagger-bootstrap-ui 集成框架示例项目 - Gitee.com 1.依赖引入&#xff1a; ps&#xff1a;json处理需要引入相关包 <dependency><groupId>c…

sqli-labs-master靶场训练笔记(54-65|决战紫禁之巓)

2024.2.5 level-54 1、先判断类型和闭合类型 ?id1/0 #正常 证明不是数字型 ?id1 #错误 ?id1 -- a #正常 判断是 闭合 2、 判断列数 这里需要运气&#xff0c;但是根据前面50多关的经验直接猜测是3列 ?id-1 union select 1,2,3 -- a 3、爆表名&#xf…

leetcode:131.分割回文串

树形结构&#xff1a; 切割到字符串的尾部&#xff0c;就是叶子节点。 回溯算法三部曲&#xff1a; 1.递归的参数和返回值&#xff1a; 参数字符串s和startIndex切割线 2.确定终止条件&#xff1a; 当分割线到字符串末尾时到叶子节点&#xff0c;一种方案出现 3.单层搜索…

真、开源LLM-OLMo

论文&#xff1a;https://arxiv.org/pdf/2402.00838.pdf Weights https://huggingface.co/allenai/OLMo-7B Code https://github.com/allenai/OLMo Data https://huggingface.co/datasets/allenai/dolma Evaluation https://github.com/allenai/OLMo-Eval Adaptation http…

行业科普应用分享 | 用于安全和安保的仪器仪表

【前言】 物联网带来了对安全和安保的新要求。利用物联网&#xff0c;运营商可以从复杂和分布式的装置中获益。此外&#xff0c;自主系统在现代工业的运作中正变得越来越重要。 从制造业到农业&#xff0c;这些远程操作需要仪器提供持续监测&#xff0c;以提供安全和保障。这…

记录一次centos 使用selenium运行环境

这里写自定义目录标题 宝塔面板 安装 selenium安装google-chrome 宝塔面板 安装 selenium 安装google-chrome yum install https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm 查看chrome版本 google-chrome --version 下载对应chrome版本的chro…

uniapp微信小程序开发踩坑日记:Pinia持久化

如果你使用过Pinia&#xff0c;那你应该知道Pinia持久化插件&#xff1a;https://prazdevs.github.io/pinia-plugin-persistedstate/zh/ 但由于官方文档提供的说明并不是针对小程序开发&#xff0c;所以我们在使用这个插件实现uniapp小程序开发中Pinia持久化会出现问题 我在C…

java学习07---综合练习

飞机票 1.需求: 机票价格按照淡季旺季、头等舱和经济舱收费、输入机票原价、月份和头等舱或经济舱。 按照如下规则计算机票价格&#xff1a;旺季&#xff08;5-10月&#xff09;头等舱9折&#xff0c;经济舱8.5折&#xff0c;淡季&#xff08;11月到来年4月&#xff09;头等舱7…

人力资源智能化管理项目(day05:角色管理)

学习源码可以看我的个人前端学习笔记 (github.com):qdxzw/humanResourceIntelligentManagementProject 搭建页面结构 分页组件&#xff1a;设置layout&#xff0c;表示需要显示的内容&#xff0c;用逗号分隔&#xff0c;布局元素会依次显示。prev表示上一页&#xff0c;next为…

Ps:统计

Ps菜单&#xff1a;文件/脚本/统计 Scripts/Statistics 统计 Statistics脚本命令提供了一种高效的方法来处理和分析大量图像&#xff0c;使用户能够自动执行复杂的图像分析任务&#xff0c;并在多个图像间应用统计学方法。这个功能极大地扩展了 Photoshop 在科学研究、图像编辑…

ThreeDPose

还没跑: GitHub - moshoeu/ThreeDPoseModelDriver: 用3DPose骨骼位置驱动人形模型动画 GitHub - Doggerlas/3DPoseTracker: unity练手项目 https://github.com/digital-standard/ThreeDPoseTracker GitHub - xerifg/Real-time-3DposeTracking-Unity3D-UnityChan: capture hum…

Acwing 5469. 有效点对【正难则反+巧妙选择根节点】

原题链接&#xff1a;https://www.acwing.com/problem/content/5472/ 题目描述&#xff1a; 给定一个 n 个节点的无向树&#xff0c;节点编号 1∼n。 树上有两个不同的特殊点 x,y&#xff0c;对于树中的每一个点对 (u,v)(u≠v)&#xff0c;如果从 u 到 v 的最短路径需要经过…

C语言分钟计算

一.题目描述 给你同一天的两个时间(24小时制),求这两个时间内有多少分钟,保证第一个时间在第二个时间之前. 二.输入描述 输入两行,每行包括两个整数表示小时和分钟. 三.输出描述 输出分钟数. 四.示例 输入 10 10 11 05 输出 55 五.代码