C++基础知识【3】控制语句

news2024/11/25 5:01:29

目录

前言        

一、条件语句

1.1、if 语句

1.2、if-else 语句

1.3、switch 语句

二、循环语句

2.1、while 循环

2.2、do-while 循环

2.3、for 循环

三、跳转语句

3.1、break语句

3.2、continue语句

3.3、goto语句

四、一些新特性

4.1、if 语句和 switch 语句支持初始化语句

4.2、for each 循环

4.3、if constexpr语句


前言        

        在C++中一般情况下是按顺序执行每条语句,控制语句则改变了程序的执行路径,适应更多场景下的不同的处理方式,使程序更加健壮。

        C++ 中的控制语句主要包括条件语句,循环语句和跳转语句。

一、条件语句

        条件语句根据表达式的值来执行不同分支的语句,主要有 if 语句、if-else 语句、switch 语句。

1.1、if 语句

        该语句用于条件判断,根据判断结果决定是否执行下面的代码块。

        if 语句的语法格式为:

if (expression) {
 // 当表达式为true时执行 
}

        示例:

int x = 10;
if (x > 5) {
    cout << "x is greater than 5" << endl;
}

1.2、if-else 语句

        该语句用于条件判断,根据判断结果执行不同的代码块。

        if-else 语句的语法格式为:

if (expression) {
    // 当表达式为真时执行的语句
} else {
    // 当表达式为假时执行的语句
}

示例:

int x = 3;
if (x > 5) {
    cout << "x is greater than 5" << endl;
} else {
    cout << "x is less than or equal to 5" << endl;
}

1.3、switch 语句

        switch 语句根据表达式的值选择执行哪个 case 分支,如果没有符合的分支则执行 default 分支。语法格式为:

switch(expression) {
case value1:
    // 当表达式的值等于 value1 时执行的语句
    break;
case value2:
    // 当表达式的值等于 value2 时执行的语句
    break;
    //...
default:
    // 当表达式的值与所有 case 的值都不匹配时执行的语句
}

示例:

int x = 2;
switch (x) {
case 1:
    cout << "x is 1" << endl;
    break;
case 2:
    cout << "x is 2" << endl;
    break;
default:
    cout << "x is neither 1 nor 2" << endl;
}

二、循环语句

        循环语句是执行重复操作的一种结构,主要有 while 循环、do-while 循环、for 循环。

2.1、while 循环

        该语句用于循环执行一段代码,只要条件为真就一直循环执行。

while (expression) {
    // 当表达式为真时执行的语句
}

        示例:

int x = 1;
while (x <= 5) {
    cout << x << endl;
    x++;
}

2.2、do-while 循环

        do-while 循环与 while 循环的区别在于先执行一次循环体然后再判断循环条件是否满足

        记住do{}while()必执行一次。

语法格式为:

do {
    // 执行循环体
} while (expression);

        示例:

int x = 1;
do {
    cout << x << endl;
    x++;
} while (x <= 5);

2.3、for 循环

        该语句用于循环执行一段代码,可以根据条件循环执行多次

        for 循环的语法格式为:

for (initialization; condition;update) {
    // 执行循环体
}
  • initialization:循环初始化部分,在第一次循环开始前执行一次,通常用于初始化计数器或声明循环变量。
  • condition:循环条件部分,每次循环前都会进行条件判断,如果条件为真,则执行循环体,否则退出循环。
  • update:循环更新部分,每次循环结束后执行一次,通常用于更新计数器或循环变量。

        示例:

for (int x = 1; x <= 5; x++) {
   cout << x << endl;
}

三、跳转语句

        跳转语句顾名思义就是程序执行到该语句是不再执行相邻的下一条语句,而是跳到指定的语句去执行。

        跳转语句包括break,continue和goto语句。

        在循环语句中,break 语句可以用来跳出循环,而 continue 语句可以用来跳过本次循环,直接进入下一次循环。

3.1、break语句

        通常用于终止当前的循环语句或者 switch 语句。当程序执行到 break 语句时,会立即跳出当前的循环或者 switch 语句,并开始执行后面的语句。

        循环中使用break语句实例:

#include <iostream>
int main() {
    int i;
    for (i = 1; i <= 10; i++) {
        if (i == 5) {
        break;
        }
        std::cout << i << std::endl;
    }
    std::cout << "Loop terminated." << std::endl;
    return 0;
}

        switch使用break语句实例:

#include <iostream>
int main() {
    int num = 2;
    switch (num) {
    case 1:
        std::cout << "The number is 1." << std::endl;
        break;
    case 2:
        std::cout << "The number is 2." << std::endl;
        break;
    case 3:
        std::cout << "The number is 3." << std::endl;
        break;
    default:
        std::cout << "The number is not 1, 2 or 3." << std::endl;
    break;
    }
    std::cout << "Switch terminated." << std::endl;
    return 0;
}

3.2、continue语句

        用于跳过循环体中的某些语句,继续执行循环的下一次迭代。当程序执行到 continue 语句时,它会跳过循环体中 continue 语句之后的代码,并开始下一次循环迭代。

实例:

#include <iostream>

int main() {
    int i = 1;
    while (i <= 10) {
        if (i == 5) {
            i++;
            continue;
        }
        std::cout << i << std::endl;
        i++;
    }
    return 0;
}

3.3、goto语句

        goto 语句可以让程序跳转到代码中的另一个位置继续执行,通常用于跳出多层循环或者从深层嵌套的代码块中快速返回。但是 goto 语句也容易导致代码结构复杂,难以维护和调试,所以在实际编程中应该慎用。

        实例:

#include <iostream>

int main() {
    int i, j;
    for (i = 0; i < 10; i++) {
        for (j = 0; j < 10; j++) {
            if (i == 5 && j == 5) {
                goto endloop;
            }
        }
    }
    std::cout << "Loop finished normally." << std::endl;
    return 0;

endloop:
    std::cout << "Loop terminated early." << std::endl;
    return 0;
}

        在这个示例代码中,goto 语句被用来跳出双重循环。当循环变量 i 和 j 的值都等于 5 时,程序跳转到标识符 endloop 所在的位置,执行 endloop: 标识的语句块。如果循环正常结束,程序将输出 Loop finished normally.。如果使用了 goto 语句跳出循环,程序将输出 Loop terminated early.。

四、一些新特性

        C++11以后引入了一些新的特性,使得控制语句更加丰富,简单,易用。下面简单说几个常用的新特性。

4.1、if 语句和 switch 语句支持初始化语句

        C++11 以后引入了 if 语句和 switch 语句支持初始化语句,可以在条件表达式之前定义变量并初始化。

例如:

if (int x = get_value(); x > 10) {
    // x 在这里可以使用
}

// 其中 get_value() 函数返回一个 int 值用于初始化变量 x,如果 x 的值大于 10,执行 if 语句中的语句块。

switch (int i = get_value(); i) { // 可以定义变量并初始化
    case 1:
        // 执行语句块
        break;
    default:
        // 执行语句块
        break;
}

4.2、for each 循环

        它可以遍历一个序列中的所有元素,将每个元素赋值给一个变量并执行一些操作。使用 for each 循环可以避免繁琐的迭代器操作,提高代码的可读性和可维护性

实例:

#include <iostream>

int main() {
    int arr[] = {1, 2, 3, 4, 5};
    for (int x : arr) {
        std::cout << x << std::endl;
    }
    return 0;
}

4.3、if constexpr语句

        if constexpr 是 C++17 中引入的一种新的条件语句,它可以用于编译时条件判断,并在编译时进行分支的选择,可以避免在运行时进行条件判断和分支选择,从而提高代码的执行效率和性能。

        if constexpr 的语法格式和普通的 if 语句类似,只是在 if 关键字后面加了一个 constexpr 关键字,用于指示编译器在编译时对条件进行求值,例如:

if constexpr (std::is_same_v<T, int>) {
    // 只有 T 是 int 类型时,才会执行这里的代码
    // 编译器会在编译时对条件进行求值
    // 如果 T 不是 int 类型,这里的代码会被编译器优化掉
}

        在上面的例子中,如果 T 类型是 int 类型,编译器会在编译时对条件进行求值,然后执行 if 语句中的代码;如果 T 类型不是 int 类型,编译器会在编译时将 if 语句中的代码优化掉。

        使用 if constexpr 可以避免在运行时进行条件判断和分支选择,从而提高代码的执行效率和性能,特别是在模板编程中,使用 if constexpr 可以更加方便地实现代码的条件分支。

        以上就是 C++ 中的控制语句。掌握好这些语句可以让你更灵活地控制程序的流程,实现更多的功能。

        有哪些地方写的不准确,或者不正确,又或者有什么疑问,可以随时跟我讨论。

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

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

相关文章

【数据结构与算法】图遍历算法 ( 深度优先搜索代码示例 )

文章目录一、深度优先搜索算法二、完整代码示例完整代码示例执行结果一、深度优先搜索算法 深度优先搜索算法步骤 : 将 深度优先搜索 算法步骤 转为代码 ; ① 访问初始结点 : 访问 初始结点 v , 并将该 初始结点 v 标记为 " 已访问 " ; 设置一个 访问标记 数组 , 数…

《C++ Primer》 第九章 顺序容器

《C Primer》 第九章 顺序容器 9.1 顺序容器概述 容器&#xff1a;特定类型对象的集合 顺序容器类型 vector 可变大小数组&#xff0c;支持快速随机访问&#xff0c;在尾部之外的位置插入或删除元素可能很慢deque 双端队列。支持快速随机访问。在头尾位置插入/删除速度很快…

【2022-09-14】米哈游秋招笔试三道编程题

第一题&#xff1a;最短子串 题目描述 米小游拿到了一个字符串&#xff0c;她想截取一个连续子串&#xff0c;使得该子串中包含至少k个连续的“mihoyo”。 你可以帮米小游求出最短的子串长度&#xff0c;以及对应的子串位置吗&#xff1f; 输入描述 第一行输入两个正整数n…

产品父子流程技术方案设计

产品父子流程技术方案设计 一、整体设计 根据业务需求分析&#xff0c;产品涉及法人代表及实控人风控决策流程调用&#xff0c;旨在降低风险&#xff0c;提高行内线上贷款业务风险决策的能力。 二、业务流程 1.业务流程图 2.交易流程 在授信交易切面入口处对法人代表及实控…

Spark性能优化三 checkpoint

&#xff08;一&#xff09;checkpoint介绍 checkpoint&#xff0c;是Spark提供的一个比较高级的功能。有时候&#xff0c;我们的Spark任务&#xff0c;比较复杂&#xff0c;从初始化RDD开始&#xff0c;到最后整个任务完成&#xff0c;有比较多的步骤&#xff0c;比如超过10个…

关于flex盒子padding-right/margin-right不生效

错误代码实例&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"width…

论文投稿指南——中文核心期刊推荐(科学、科学研究)

【前言】 &#x1f680; 想发论文怎么办&#xff1f;手把手教你论文如何投稿&#xff01;那么&#xff0c;首先要搞懂投稿目标——论文期刊 &#x1f384; 在期刊论文的分布中&#xff0c;存在一种普遍现象&#xff1a;即对于某一特定的学科或专业来说&#xff0c;少数期刊所含…

element input 输入框校验

element input 输入框校验 很久之前有写过一篇&#xff1a;element 输入框只可以输入正整数 在这里对它进行补充 校验input输入框是否符合 以下是常用的一些&#xff1a; 限制输入中文&#xff1a;/^[\u4e00-\u9fa5]$/ const checkName (rule, value, callback) > {if…

逆约瑟夫问题

约瑟夫问题可以说十分经典&#xff0c;其没有公式解也是广为人知的~ 目录 前言 一、约瑟夫问题与逆约瑟夫问题 1.约瑟夫问题 2.逆约瑟夫问题 二、思考与尝试&#xff08;显然有很多失败&#xff09; 问题分析 尝试一&#xff1a;递归/递推的尝试 尝试二&#xff1a;条件…

Doris入门篇-分区分桶实验

简介 测试分区分桶效果。 分区的基本操作 添加分区 ALTER TABLE v2x_olap_database.government_car ADD PARTITION p20221203 VALUES LESS THAN ("2022-12-04");动态分区表不能添加分区&#xff0c;需要转为手动分区表。 查看分区 show partitions from <表…

【深度估计】单目深度估计

文章目录什么是深度估计&#xff1f;什么是视差深度估计与三维重建单目深度估计研究历程单目深度估计方法传统方法基于线索线性透视聚焦/散焦度天气散射阴影纹理遮挡高度运动线索基于物体自身运动基于摄像机的运动基于机器学习参数学习方法开创性工作改进加入语义信息条件随机场…

《工业机器视觉检测123》(1.1) 目标检测样本类别不平衡的问题(持续更新...)

部分内容转载自&#xff1a;https://www.cnblogs.com/inchbyinch/p/12642760.html 参考分类任务中解决类别不平衡的办法&#xff1a; 1 什么是类别不平衡问题&#xff1f; 类别不平衡&#xff08;class-imbalance&#xff09;&#xff0c;也叫数据倾斜&#xff0c;数据不平衡…

Tomcat面试问题总结

1.Tomcat是什么&#xff1f;Tomcat 服务器Apache软件基金会项目中的一个核心项目&#xff0c;是一个免费的开放源代码的Web 应用服务器&#xff0c;属于轻量级应用服务器&#xff0c;在中小型系统和并发访问用户不是很多的场合下被普遍使用&#xff0c;是开发和调试JSP 程序的首…

EasyCVR视频融合平台的视频处理与AI智能分析流程实操案例介绍

EasyCVR基于云边端一体化架构&#xff0c;能支持海量视频的轻量化接入与汇聚管理。在视频能力上&#xff0c;可提供视频监控直播、视频轮播、视频录像、云存储、回放与检索、智能告警、服务器集群、语音对讲、云台控制、电子地图、平台级联等。 除了视频能力之外&#xff0c;将…

浅谈设备防漏扫

场景描述 随着社会的信息化&#xff0c;互联网安全被国家越来越重视&#xff0c;漏洞扫描&#xff08;简称漏扫&#xff09;业务也在被规范列入企事业单位的信息安全的标准中。 从安全角度来看&#xff0c;漏扫本身是为用户的用网安全做保障&#xff0c;避免木马、病毒等通过…

vue中点击空白处改变dom状态实现显隐,监听dom(addEventListener)

需求来源&#xff1a;点击铃铛之后弹出右侧抽屉&#xff0c;实现文件下载 现在是点击小铃铛出现弹框没问题&#xff0c;点击关闭图标关闭弹框也没问题&#xff0c;但是点击空白区域消失不了&#xff0c;这个时候需要dom监听属性document.addEventListener来实现需求了 主要是用…

c++学习笔记之基础

目录前言零碎知识点C核心内存分区引用函数类和对象对象的初始化和清理构造函数和析构函数构造函数的分类和调用拷贝构造函数的调用时机深拷贝与浅拷贝初始化列表类对象作为类的成员静态成员C对象模型和this指针成员变量和成员函数分开存储this指针空指针访问成员函数const修饰成…

IDEA2022 配置spark开发环境

本人强烈建议在 linux环境下 学习 spark&#xff01;&#xff01;&#xff01; Introduction Apache Spark是一个快速且通用的分布式计算引擎&#xff0c;可以在大规模数据集上进行高效的数据处理&#xff0c;包括数据转换、数据清洗、机器学习等。在本文中&#xff0c;我们将…

NDK C++ map容器

map容器// TODO map容器 #include <iostream> #include <map>using namespace std;int main() {// TODO map<int, string>按key值排序&#xff0c;同一个key不可以重复插入map<int, string> map1;map1.insert(pair<int, string>(1, "111&qu…

ChatGPT没有API?OpenAI官方API带你起飞

目录ChatGPT没有API&#xff1f;OpenAI官方API带你起飞安装 OpenAI 的 API 库包装个函数包装个UIChatGPT没有API&#xff1f;OpenAI官方API带你起飞 前段时间ChatGPT爆火&#xff0c;OpenAI 的 GPT API也被大家疯狂调用&#xff0c; 但其实这个API是基于GPT3的&#xff0c;和基…