C++ 条件判断与循环全解:从入门到避坑指南
在 C++ 编程学习中,条件判断与循环是构建程序逻辑的核心基础,也是算法竞赛入门的必备技能。本文基于系统的知识点梳理和 41 道 OJ 编程题实战经验,从语法细节、常见陷阱到优化技巧,全面解析 if-else、switch、while、for、do-while 等核心语法,帮助初学者快速掌握编程逻辑设计,稳步迈向算法竞赛进阶之路。
面向大一/大二初学者,带你稳扎稳打掌握
if与循环的正确打开方式!
一、条件判断:让程序学会 "做选择"
条件判断是程序根据不同场景执行不同逻辑的基础,核心包含 if-else 系列和 switch 语句,配合关系运算符与逻辑运算符,可实现复杂条件决策。
1.1 if-else 语句:灵活应对多场景判断
if-else 语句是最常用的条件判断结构,支持单分支、双分支和多分支嵌套,满足从简单到复杂的判断需求。
基本语法:
代码语言:javascript
AI代码解释
if (表达式) 语句;1.1.1 单分支 if
- 当表达式结果非 0(真)时执行语句,0(假)时跳过。例如判断一个数是否为奇数:
代码语言:javascript
AI代码解释
#include <iostream> using namespace std; int main() { int n = 0; cin >> n; if (n % 2 == 1) cout << n << "是奇数" << endl; return 0; }关键点:
- 表达式结果为非 0(真)就执行语句,0(假)则跳过。
if和else后不能加分号!- 如果要控制多条语句,必须加
{}!
💡初学易错:很多人写
if (x = 5)以为是比较,其实是赋值!永远记住:比较用==,赋值用=。
1.1.2 else 与嵌套 if:非此即彼的逻辑判断,例如判断成年与否:
代码语言:javascript
AI代码解释
if (age >= 18) { cout << "成年" << endl; cout << "可以谈恋爱了" << endl; } else { cout << "未成年" << endl; cout << "不能早恋" << endl; }1.1.3多分支嵌套 if-else:处理多重条件场景,例如判断数的正负:
代码语言:javascript
AI代码解释
#include <iostream> using namespace std; int main() { int n = 0; cin >> n; if (n > 0) cout << "positive" << endl; else if (n < 0) cout << "negative" << endl; else cout << "zero" << endl; return 0; }1.1.4 悬空 else(Dangling else)——高频陷阱!
代码语言:javascript
AI代码解释
if (a == 1) if (b == 2) cout << "hehe"; else cout << "haha"; // 这个 else 实际匹配的是内层 if!问题:当a != 1时,整个内层 if(含 else)都不执行,不会输出 "haha"!
✅解决方法:加花括号明确作用域!
代码语言:javascript
AI代码解释
if (a == 1) { if (b == 2) cout << "hehe"; } else { cout << "haha"; // 现在 else 明确属于外层 if }🙋心得:别依赖缩进!花括号{}是逻辑清晰的第一道防线。
1.2 switch 语句:高效处理多选项分支
switch 语句适用于判断条件为离散整型值的场景,结构清晰,可读性优于多层 else-if。
1.2.1 语法结构:
switch 后表达式必须为整型,case 后需跟整型常量,default 处理默认情况:
代码语言:javascript
AI代码解释
switch (表达式) { // 表达式必须是整型! case 常量1: 语句; break; case 常量2: 语句; break; default: 语句; break; }例如:判断星期几
代码语言:javascript
AI代码解释
#include <iostream> using namespace std; int main() { int day = 0; cin >> day; switch (day) { case 1: cout << "Monday" << endl; break; case 2: cout << "Tuesday" << endl; break; case 3: cout << "Wednesday" << endl; break; case 4: cout << "Thursday" << endl; break; case 5: cout << "Friday" << endl; break; case 6: cout << "Saturday" << endl; break; case 7: cout << "Sunday" << endl; break; default: cout << "input error!" << endl; break; } return 0; }1.2.2 穿透效应(Fall-through):漏写 break 的灾难!
代码语言:javascript
AI代码解释
switch (n % 3) { case 0: cout << "余0"; case 1: cout << "余1"; // 如果 n%3==0,会连续执行这里! case 2: cout << "余2"; }✅解决:每个case结尾加break!
1.2.3 多 case 共享逻辑
代码语言:javascript
AI代码解释
switch (day) { case 1: case 2: case 3: case 4: case 5: cout << "Workday"; break; case 6: case 7: cout << "Weekend"; break; default: cout << "input error!"; }✅建议:default放最后,处理非法输入。
核心技巧回顾:
- 每个 case 后需加
break,否则会触发 "穿透效应",执行后续 case 代码; - case 与 default 无固定顺序,但建议将 default 放在最后;
- 多 case 共享逻辑时,可省略中间 break
