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 
        五、最佳实践与注意事项
- 
选择结构
- 简单条件用if-else,多离散值用switch
 - switch语句必须有break防止贯穿
 - 避免深层嵌套(超过3层考虑重构)
 
 - 
循环结构
- 明确循环次数用for,不确定用while
 - 循环变量作用域最小化(C++99后for循环变量作用域在循环内)
 - 警惕死循环(确保循环条件会变为false)
 
 - 
跳转语句
- 优先使用break/continue替代goto
 - break只能跳出一层循环(嵌套循环需使用标志变量)
 - continue不适用于switch语句
 
 - 
性能考量
- 循环内避免重复计算(将不变计算提到循环外)
 - 减少循环内部的条件判断
 - 范围for循环比传统for循环更高效(编译器优化)
 
 - 
可读性建议
- 复杂条件表达式用括号明确优先级
 - 循环体超过10行考虑提取为函数
 - 避免在循环体内修改循环计数器(for循环的"更新"部分除外)
 
 
掌握这些流程控制结构,能够构建逻辑清晰、高效可靠的C++程序,为后续学习面向对象和高级特性打下坚实基础。