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