C++ 程序流程控制详解:选择与循环结构实战
C++ 程序的执行并非总是线性的,而是通过特定的流程结构来组织逻辑。掌握程序流程结构是编写任何复杂算法的基础,它决定了代码在不同条件下的执行路径与重复次数。本文将重点讲解 C++ 中的两大核心流程:选择结构(决定何时做)和循环结构(决定重复做),并配合典型代码示例进行剖析。
1. 选择结构
选择结构用于根据条件的真假来决定执行哪一段代码块。在 C++ 中,主要包括单行/多行 if 语句、嵌套 if、三目运算符以及 switch 开关语句。
第1步:使用 if 语句进行条件判断
目的: 实现基础的二选一或多路分枝逻辑。
入口: 标准输入输出库 <iostream>。
动作: 通过 if (条件) 测试布尔表达式。
参数: 括号内必须为整型或浮点型比较表达式。
完成状态: 满足条件时执行大括号内的代码块。
#include<iostream>
using namespace std;
int main() {
// 用户输入分数,若大于600则判定为考上一本
int score = 0;
cout << "请输入一个分数:" << endl;
cin >> score;
// 单行 if 判断
if (score > 600) {
cout << "恭喜您考上了一本大学";
}
return 0;
}
若需处理不满足条件的情况,使用 if...else:
#include<iostream>
using namespace std;
int main() {
int score = 0;
cout << "请输入一个分数:" << endl;
cin >> score;
// 多路分支:一本、二本、三本或落榜
if (score > 600)
{
cout << "恭喜您考上了一本大学!";
}
else if (score > 500)
{
cout << "恭喜您考上了二本大学!";
}
else if (score > 400)
{
cout << "恭喜您考上了三本大学!";
}
else
{
cout << "未考上本科";
}
return 0;
}
第2步:使用嵌套 if 处理多重逻辑
目的: 解决需要层层筛选的复杂判断问题。
入口: 逻辑运算符 &&、|| 或缩进的代码块。
动作: 将另一个 if 语句置于前一个 if 的分支内部。
完成状态: 能够处理多维度(如闰年判断、最大值查找)的逻辑组合。
案例:闰年判断
闰年的定义要求:能被 4 整除且不能被 100 整除;或者能被 400 整除。
#include<iostream>
using namespace std;
int main() {
int year;
cin >> year;
// 逻辑运算符优先级:&& 高于 ||
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
{
cout << "闰年" << endl;
}
else
{
cout << "不是闰年" << endl;
}
return 0;
}
第3步:使用三目运算符简化简短判断
目的: 用一行代码替代简单的 if...else 赋值操作。
语法: 表达式1 ? 表达式2 : 表达式3。
说明: 若表达式1为真,返回表达式2的结果;否则返回表达式3的结果。
特性: C++ 中三目运算符返回的是变量本身,支持链式赋值。
#include<iostream>
using namespace std;
int main() {
int a = 10, b = 0, c;
// 找出较大值赋给 c
c = (a > b ? a : b);
cout << "Max=" << c << endl;
// C++ 特性:可直接对结果赋值
(a > b ? a : b) = 100;
cout << "A=" << a << endl;
return 0;
}
第4步:使用 switch 处理离散值匹配
目的: 当判断条件是多个固定的整数或字符值时使用,比多级 if 更清晰高效。
限制: 仅支持整型或字符型,不支持区间判断(如 80-90 分段)。
注意: case 标签后若无 break,程序将继续执行下一个 case 的代码(穿透现象)。
#include<iostream>
using namespace std;
int main() {
int score;
cout << "请给电影评分(0-10):" << endl;
cin >> score;
switch (score) {
case 10:
case 9:
cout << "您认为是经典电影" << endl;
break;
case 8:
case 7:
cout << "您认为是电影非常好" << endl;
break;
default:
cout << "一般或较差" << endl;
}
return 0;
}
2. 循环结构
循环结构用于让代码块重复执行。C++ 提供了 while、do...while 和 for 三种主要循环方式,并提供了跳出或终止循环的控制指令。
第1步:使用 while 循环执行已知次数的迭代
目的: 先判断条件,若满足则进入循环体。
入口: while (条件)。
风险: 务必在循环体内修改计数器,否则可能导致死循环。
案例:猜数字游戏
系统生成随机数,玩家持续猜测直到猜中。
#include<iostream>
#include<ctime>
using namespace std;
int main() {
// 添加随机数种子
srand((unsigned int)time(NULL));
int num = rand() % 100 + 1;
int val;
while (true) { // 无限循环,直到 break
cin >> val;
if (val > num)
cout << "猜测过大!" << endl;
else if (val < num)
cout << "猜测过小!" << endl;
else {
cout << "猜对啦!" << endl;
break; // 退出循环
}
}
return 0;
}
第2步:使用 do...while 确保至少执行一次
目的: 无论条件是否满足,循环体至少执行一次。适用于“先执行后检查”的场景。
#include<iostream>
using namespace std;
int main() {
int num = 100;
do {
int a = num % 10; // 个位
int b = num / 10 % 10; // 十位
int c = num / 100; // 百位
if (num == a*a*a+b*b*b+c*c*c)
cout << num << " 是水仙花数" << endl;
num++;
} while (num < 1000);
return 0;
}
第3步:使用 for 循环处理结构化计数
目的: 最适合处理初始化、条件判断和更新都在同一行声明的循环。
#include<iostream>
using namespace std;
int main() {
// 1~100 敲桌子游戏:逢7或含7敲击
for (int i = 1; i <= 100; i++) {
if (i%7==0 || i%10==7 || i/10%10==7) {
cout << "敲桌子!" << endl;
}
else {
cout << i << endl;
}
}
return 0;
}
3. 循环控制与嵌套
第1步:精准控制循环流向
- break: 直接终止整个循环,跳出到循环体外。
- continue: 跳过本次循环剩余的代码,进入下一次迭代的条件判断。
- goto: 跳转到指定标签位置。虽功能强大但易导致代码混乱,现代编程中通常不推荐使用,除非在极特殊的底层操作中。
第2步:使用循环嵌套解决多维打印
目的: 利用外层循环控制行数,内层循环控制每行的内容(如空格、星号)。
案例:打印三角形
#include<iostream>
using namespace std;
int main() {
for (int i = 1; i <= 5; i++) { // 外层控制行数
// 内层控制空格
for (int j = 1; j <= 5 - i; j++)
cout << " ";
// 内层控制星号数量
for (int k = 1; k <= 2 * i - 1; k++)
cout << "*";
cout << endl;
}
return 0;
}
第3步:二维矩阵逻辑应用
在打印完整的矩形星图或乘法口诀表时,通常需要两个独立的内层循环或一个联合遍历。乘法口诀表的打印正是利用了 j <= i 的条件截断,形成了独特的梯形结构。
总结
C++ 的流程控制是构建软件逻辑骨架的关键。选择结构帮助你分流业务逻辑,循环结构处理重复性计算任务。在实际开发中,合理搭配 if/switch 和 for/while,并配合 break 与 continue,能显著提升代码的执行效率与可读性。以上就是 C++ 程序流程结构的详细内容,更多关于 C++ 基础入门的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













