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

C++程序流程结构详解

一、选择结构

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

1. if 语句

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

示例代码

cpp 复制代码
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都不匹配时执行的代码块

示例代码

cpp 复制代码
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 (条件) {循环体} 循环次数不确定时使用 可能一次都不执行

示例代码

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

2. do-while 循环

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

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

示例代码

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

3. for 循环

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

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

示例代码

cpp 复制代码
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& 变量 : 容器) {循环体} 可修改容器元素 自动类型推导

示例代码

cpp 复制代码
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贯穿

示例代码

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

2. continue 语句

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

示例代码

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

3. goto 语句

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

示例代码

cpp 复制代码
int count = 0;

START:  // 标签定义
cout << count << " ";
count++;

if (count < 5) {
    goto START;  // 跳转到START标签
}
// 输出:0 1 2 3 4

4. return 语句

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

示例代码

cpp 复制代码
int add(int a, int b) {
    return a + b;  // 返回结果并退出函数
}

int main() {
    int result = add(3, 4);  // result = 7
    return 0;  // 结束程序
}

四、流程控制综合示例

cpp 复制代码
#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;  // 输出: 3
            break;  // 找到后立即退出循环
        }
    }

    // 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;
}

运行结果:

cpp 复制代码
成年人
总和: 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++程序,为后续学习面向对象和高级特性打下坚实基础。

相关推荐
小慧102412 分钟前
2.1话题发布
linux·ros
愚润求学44 分钟前
【递归、搜索与回溯】FloodFill算法(一)
c++·算法·leetcode
呆呆的小草1 小时前
Cesium距离测量、角度测量、面积测量
开发语言·前端·javascript
夜影风1 小时前
Linux系统中自签名HTTPS证书
linux·运维·https
uyeonashi1 小时前
【QT系统相关】QT文件
开发语言·c++·qt·学习
wb1891 小时前
流编辑器sed
运维·笔记·ubuntu·云计算
冬天vs不冷2 小时前
Java分层开发必知:PO、BO、DTO、VO、POJO概念详解
java·开发语言
sunny-ll2 小时前
【C++】详解vector二维数组的全部操作(超细图例解析!!!)
c语言·开发语言·c++·算法·面试
成工小白2 小时前
【Linux】C语言模拟实现shell命令行(程序替换原理)
linux·运维·服务器
猎人everest3 小时前
Django的HelloWorld程序
开发语言·python·django