当前位置: 首页 > news >正文

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

目录

前言        

一、条件语句

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.lryc.cn/news/25478.html

相关文章:

  • ImportError: Can not find the shared library: libhdfs3.so解决方案
  • Qt插件开发总结5--主界面嵌入插件UI
  • 一些关于linux process 和python process的记录
  • 卡尔曼滤波——一种基于滤波的时序状态估计方法
  • 什么是X6CrMo17-1
  • 软件测试是个人就能做?恕我直言,你可能是个“纯粹”的测试工具人,BUG收集器
  • 递归算法(recursion algorithm)
  • VScode下 ESP32 下载程序
  • 黑苹果日历
  • python+pytest接口自动化框架(5)-requests发送post请求
  • Linux 进程:进程控制
  • 过滤器的创建和执行顺序
  • JDK1.8 ConcurrentHashMap
  • 参考 Promise/A+ 规范和测试用例手写 Promise
  • yolov5数据集制作
  • 主板EC程序烧写异常致无法点亮修复经验
  • 【Java爬取赛事网站】命令行输出(仅供学习)
  • redis主从复制原理
  • buu刷题(第一周)
  • 算法训练营 day62 单调栈 每日温度 下一个更大元素 I
  • ChIP-seq 分析:Peak 注释与可视化(9)
  • ABB机器人配置DeviceNet总线IO板以及信号分配的具体方法示例
  • 2023 年网络安全漏洞的主要原因
  • 剑指 Offer 34. 二叉树中和为某一值的路径
  • 2023前端vue面试题(边面边更)
  • webpack配置完全指南
  • juju创建lxd容器时如何使用本地镜像(by quqi99)
  • 后端程序员学习前端开发之第一步环境搭建
  • 【记录问题】RuntimeError:working outside of application context. Flask使用SQLAlchemy数据库
  • 自动化测试难点案例分析,其实自动化你用错方向还不如不用