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

《 第三章-招式初成》 C++修炼生涯笔记(基础篇)程序流程结构

C++程序流程结构详解

一、选择结构

选择结构根据条件判断决定程序执行路径。

1. if 语句

语法形式说明执行条件
if (条件) {语句}单分支选择结构条件为真时执行
if (条件) {...} else {...}双分支选择结构条件为真/假分别执行不同语句
if (条件1) {...} else if (条件2) {...} else {...}多分支选择结构按顺序检查条件,执行第一个满足条件的语句块

示例代码

int score = 85;
if (score >= 90) {cout << "优秀" << endl;
} else if (score >= 80) {cout << "良好" << endl;  // 输出此项
} else if (score >= 60) {cout << "及格" << endl;
} else {cout << "不及格" << endl;
}

2. switch 语句

用于多分支选择,适合离散值判断

组件说明
switch (表达式)表达式必须是整型、枚举或字符类型
case 常量:匹配表达式结果的入口点
break;跳出switch结构(防止贯穿)
default:所有case都不匹配时执行的代码块

示例代码

char grade = 'B';
switch (grade) {case 'A': cout << "90-100分" << endl;break;case 'B': cout << "80-89分" << endl;  // 输出此项break;case 'C': cout << "70-79分" << endl;break;default:cout << "不及格" << endl;
}

注意:忘记break会导致"贯穿"现象,程序会继续执行后续case的语句。

二、循环结构

循环结构用于重复执行代码块。

1. while 循环

先判断条件,再执行循环体

语法特点
while (条件) {循环体}循环次数不确定时使用
可能一次都不执行

示例代码

int count = 0;
while (count < 5) {cout << count << " ";  // 输出:0 1 2 3 4count++;
}

2. do-while 循环

先执行一次循环体,再判断条件

语法特点
do {循环体} while (条件);至少执行一次循环体
结尾必须有分号

示例代码

int num = 10;
do {cout << num << " ";  // 输出:10num++;
} while (num < 5);  // 条件不满足但仍执行一次

3. for 循环

最常用的循环结构,包含初始化、条件判断和更新

语法组成部分
for (初始化; 条件; 更新) {循环体}初始化:循环前执行一次
条件:每次迭代前检查
更新:每次迭代后执行

示例代码

for (int i = 0; i < 5; i++) {cout << i << " ";  // 输出:0 1 2 3 4
}// 嵌套循环示例:打印九九乘法表
for (int i = 1; i <= 9; i++) {for (int j = 1; j <= i; j++) {cout << j << "×" << i << "=" << i*j << "\t";}cout << endl;
}

4. 范围-based for 循环 (C++11)

简化容器和数组的遍历

语法适用场景
for (元素类型 变量 : 容器) {循环体}遍历数组、vector、list等容器
只读访问
for (auto& 变量 : 容器) {循环体}可修改容器元素
自动类型推导

示例代码

vector<int> nums = {1, 2, 3, 4, 5};// 只读遍历
for (int num : nums) {cout << num << " ";  // 输出:1 2 3 4 5
}// 修改元素
for (auto& num : nums) {num *= 2;  // 每个元素乘以2
}

三、跳转语句

跳转语句用于改变程序执行流程。

1. break 语句

作用适用场景
终止当前循环while, do-while, for循环内部
跳出switch语句防止case贯穿

示例代码

// 在循环中遇到特定条件退出
for (int i = 0; i < 10; i++) {if (i == 5) {break;  // 当i=5时跳出循环}cout << i << " ";  // 输出:0 1 2 3 4
}

2. continue 语句

作用说明
跳过本次循环剩余代码直接进入下一次循环迭代
不影响循环控制变量更新for循环的"更新"部分仍会执行

示例代码

// 跳过奇数,只输出偶数
for (int i = 0; i < 10; i++) {if (i % 2 != 0) {continue;  // 跳过奇数}cout << i << " ";  // 输出:0 2 4 6 8
}

3. goto 语句

语法注意事项
goto 标签;无条件跳转到标签处
标签:定义跳转目标
慎用!会使程序结构混乱,难以维护

示例代码

int count = 0;START:  // 标签定义
cout << count << " ";
count++;if (count < 5) {goto START;  // 跳转到START标签
}
// 输出:0 1 2 3 4

4. return 语句

作用说明
从函数中退出可返回一个值(非void函数)
结束程序执行main函数中的return结束整个程序

示例代码

int add(int a, int b) {return a + b;  // 返回结果并退出函数
}int main() {int result = add(3, 4);  // result = 7return 0;  // 结束程序
}

四、流程控制综合示例

#include <iostream>
#include <vector>
using namespace std;int main() {// 选择结构示例int age = 25;if (age >= 18) {cout << "成年人" << endl;} else {cout << "未成年人" << endl;}// 循环结构示例vector<int> numbers = {10, 20, 30, 40, 50};int sum = 0;// 使用范围for循环计算总和for (int num : numbers) {sum += num;}cout << "总和: " << sum << endl;  // 输出: 总和: 150// 跳转语句示例cout << "查找第一个3的倍数: ";for (int i = 1; i <= 10; i++) {if (i % 3 == 0) {cout << i << endl;  // 输出: 3break;  // 找到后立即退出循环}}// continue示例: 跳过特定值cout << "1-10中非3的倍数: ";for (int i = 1; i <= 10; i++) {if (i % 3 == 0) {continue;  // 跳过3的倍数}cout << i << " ";  // 输出: 1 2 4 5 7 8 10}cout << endl;return 0;
}

运行结果:

成年人
总和: 150
查找第一个3的倍数: 3
1-10中非3的倍数: 1 2 4 5 7 8 10 

五、最佳实践与注意事项

  1. 选择结构

    • 简单条件用if-else,多离散值用switch
    • switch语句必须有break防止贯穿
    • 避免深层嵌套(超过3层考虑重构)
  2. 循环结构

    • 明确循环次数用for,不确定用while
    • 循环变量作用域最小化(C++99后for循环变量作用域在循环内)
    • 警惕死循环(确保循环条件会变为false)
  3. 跳转语句

    • 优先使用break/continue替代goto
    • break只能跳出一层循环(嵌套循环需使用标志变量)
    • continue不适用于switch语句
  4. 性能考量

    • 循环内避免重复计算(将不变计算提到循环外)
    • 减少循环内部的条件判断
    • 范围for循环比传统for循环更高效(编译器优化)
  5. 可读性建议

    • 复杂条件表达式用括号明确优先级
    • 循环体超过10行考虑提取为函数
    • 避免在循环体内修改循环计数器(for循环的"更新"部分除外)

掌握这些流程控制结构,能够构建逻辑清晰、高效可靠的C++程序,为后续学习面向对象和高级特性打下坚实基础。

相关文章:

  • HE023784R23B530 PP D113 B01-25-111000: AC 800PEC 静态励磁系统UNITROL 6000 X-power
  • 让高端装备“先跑起来”:虚拟仿真验证平台重塑研制流程
  • QT log4qt 无法生成日志到中文的路径中的解决方案
  • 鸿蒙app 开发中 如何 看 app 页面的ui结构
  • 信息学奥赛一本通 1543:【例 3】与众不同
  • mapbox进阶,切片网格生成实现
  • 洛谷 数楼梯 高精度
  • LangChain--(2)
  • 【Python系列】Python 中 yield 关键字
  • SpringCloudAlibaba怎么学?
  • Angular入门的环境准备步骤工作
  • 智能客服系统开发方案:RAG+多智能体技术实现
  • 【插件推荐】WebRTC Protect — 防止 IP 泄漏
  • Vite 及生态环境:新时代的构建工具
  • oceanbase导出导入数据csv
  • 基于 STM32 七段数码管显示模块详解
  • 圆与 π | 从几何之美到数学与物理的奇妙之旅
  • 快速解决软件测试的逻辑方法运用
  • 238. 除自身以外数组的乘积
  • Android 实体键盘 设置默认布局
  • wordpress响应式cms/惠州seo收费
  • 商务卫士包括网站建设/最简单的网页制作
  • 电子商务网站开发的说法/seo发包技术教程
  • 在线网站建设哪家好/seo在线工具
  • 做网站的技术要求高吗/直通车关键词怎么优化
  • 页网站设计/百度关键词推广一年多少钱