C++重新入门-循环

news2024/12/25 13:52:56

目录

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.coloradmin.cn/o/1444099.html

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

相关文章

寒假 day10

1、请使用递归实现n! #include<stdio.h> #include<string.h> #include<stdlib.h>int fun(int m) {if(m0)return 1;else{return m*fun(m-1);} } int main(int argc, const char *argv[]) {int m;printf("please enter m:");scanf("%d",…

视觉SLAM十四讲学习笔记(二)三维空间刚体

哔哩哔哩课程连接&#xff1a;视觉SLAM十四讲ch3_哔哩哔哩_bilibili​ 目录 一、旋转矩阵 1 点、向量、坐标系 2 坐标系间的欧氏变换 3 变换矩阵与齐次坐标 二、实践&#xff1a;Eigen&#xff08;1&#xff09; 运行报错记录与解决 三、旋转向量和欧拉角 1 旋转向量 …

OpenCV-35 查找轮廓

一、 什么是图像轮廓 图像轮廓是具有相同颜色或灰度的连续点的曲线&#xff0c;轮廓在形状分析和物体的检测识别中很有用。 用于图形分析物体的识别和检测 注意点&#xff1a; 为了检测的准确性&#xff0c;需要先对图像进行二值化或Canny操作。画轮廓时会修改输入的图像&a…

fast.ai 深度学习笔记(六)

深度学习 2&#xff1a;第 2 部分第 12 课 原文&#xff1a;medium.com/hiromi_suenaga/deep-learning-2-part-2-lesson-12-215dfbf04a94 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 来自 fast.ai 课程的个人笔记。随着我继续复习课程以“真正”理解它&#xff0c;…

【EAI 016】VIMA: General Robot Manipulation with Multimodal Prompts

论文标题&#xff1a;VIMA: General Robot Manipulation with Multimodal Prompts 论文作者&#xff1a;Yunfan Jiang, Agrim Gupta, Zichen Zhang, Guanzhi Wang, Yongqiang Dou, Yanjun Chen, Li Fei-Fei, Anima Anandkumar, Yuke Zhu, Linxi Fan 作者单位&#xff1a;Stanfo…

什么是ROAS以及它如何衡量广告活动的有效性

有没有想过您的广告活动效果如何&#xff1f;想想 ROAS&#xff0c;即广告支出回报率。ROAS衡量的是每花一美元广告所产生的收入。虽然 ROAS 是一个强大的指标&#xff0c;可以为我们提供丰富的见解&#xff0c;但不应孤立地考虑它。本文将带你了解什么是 ROAS 以及它如何衡量广…

Qt中程序发布及常见问题

1、引言 当我们写好一个程序时通常需要发布给用户使用&#xff0c;那么在Qt中程序又是如何实现发布的呢&#xff0c;这里我就来浅谈一下qt中如何发布程序&#xff0c;以及发布程序时的常见问题。 2、发布过程 2.1、切换为release模式 当我们写qt程序时默认是debug模式&#x…

【制作100个unity游戏之23】实现类似七日杀、森林一样的生存游戏17(附项目源码)

本节最终效果演示 文章目录 本节最终效果演示系列目录前言制作木板UI直接复制和工具一样的即可检查背包是否有指定数量的空插槽 源码完结 系列目录 前言 欢迎来到【制作100个Unity游戏】系列&#xff01;本系列将引导您一步步学习如何使用Unity开发各种类型的游戏。在这第23篇…

解决Typora导出HTML不显示图片

解决Typora导出HTML不显示图片 产生原因 Typora导出HTML不显示图片&#xff0c;可能时图片存放在我们的硬盘中。 我们可以将markdown中的图片转化为base64格式&#xff0c;嵌入到html中。 解决步骤 首先&#xff0c;下载 TyporaToBase64.jar 密码:45jq 其次&#xff0c;将…

【数据库】索引的使用

【数据库】索引的使用 前言出发示例创建表Explain 查看sql执行计划where 查询解析无索引有索引 where oderBy 查询解析无索引有索引 总结 前言 在数据库设计过程中&#xff0c;常需要考虑性能&#xff0c;好的设计可以大大提高sql 语句的增删改查速度。在表的创建过程中&…

flask+python企业产品订单管理系统938re

在设计中采用“自下而上”的思想&#xff0c;在创新型产品提前购模块实现了个人中心、个体管理、发布企业管理、投资企业管理、项目分类管理、产品项目管理、个体投资管理、企业投资管理、个体订单管理、企业订单管理、系统管理等的功能性进行操作。最终&#xff0c;对基本系统…

Linux---网络基础

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

Java:JDK8新特性(Stream流)、File类、递归 --黑马笔记

一、JDK8新特性&#xff08;Stream流&#xff09; 接下来我们学习一个全新的知识&#xff0c;叫做Stream流&#xff08;也叫Stream API&#xff09;。它是从JDK8以后才有的一个新特性&#xff0c;是专业用于对集合或者数组进行便捷操作的。有多方便呢&#xff1f;我们用一个案…

Nginx实战:1-安装搭建

目录 前言 一、yum安装 二、编译安装 1.下载安装包 2.解压 3.生成makefile文件 4.编译 5.安装执行 6.执行命令软连接 7.Nginx命令 前言 nginx的安装有两种方式&#xff1a; 1、yum安装&#xff1a;安装快速&#xff0c;但是无法在安装的时候带上想要的第三方包 2、…

Kafka集群安装与部署

集群规划 准备工作 安装 安装包下载&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1BtSiaf1ptLKdJiA36CyxJg?pwd6666 Kafka安装与配置 1、上传并解压安装包 tar -zxvf kafka_2.12-3.3.1.tgz -C /opt/moudle/2、修改解压后的文件名称 mv kafka_2.12-3.3.1/ kafka…

华为数通方向HCIP-DataCom H12-821题库(单选题:461-480)

第461题 以下关于路由策略特点的描述,错误的是哪一项? A、能够修改路由属性,但是不能改变网络流量经过的路径 B、能通过控制路由器的路由表规模,来节约系统资源 C、能通过控制路由的接收、发布和引入,以提高网络的安全性 D、能通过修改路由属性,对网络数据流量可以合理规…

【计算机网络】进程通信

进程 process 客户和服务器进程 下载文件表示为客户 &#xff0c;上载文件的对等方表示为服务器进程与计算机网络之间的接口 套接字 socket 应用层与传输层之间的接口是建立网络应用程序的可编程接口 API进程寻址 为了标识接收进程 需要两种信息 主机的地址目的主机中的接收进程…

【C++】多态语法概念

目录 一、概念及定义二、虚函数重写的特例三、final和override四、抽象类 一、概念及定义 概念&#xff1a;在继承关系下的不同类&#xff0c;调用同一个函数&#xff0c;产生不同的行为&#xff0c;叫作多态。 图示&#xff1a; 定义&#xff1a;必须通过基类的指针或者引…

fast.ai 深度学习笔记(七)

深度学习 2&#xff1a;第 2 部分第 14 课 原文&#xff1a;medium.com/hiromi_suenaga/deep-learning-2-part-2-lesson-14-e0d23c7a0add 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 来自 fast.ai 课程的个人笔记。随着我继续复习课程以“真正”理解它&#xff0c;…

C++对象继承

继承概念&#xff1a; 首先引入一个生活例子&#xff0c;普通人是一个类对象&#xff0c;学生是一个类对象&#xff0c;普通人拥有的属性学生一定会有&#xff0c;学生拥有的属性普通人不一定有。类比一下&#xff0c;把普通人抽象为A对象&#xff0c;学生抽象为B对象&#xf…