📖 学习信息
学习课程:黑马 C++ 零基础入门教程
本日学习:C++ 程序流程结构之选择语句包含:if 语句(三种形式 + 嵌套)、switch 语句、穿透特性、if 与 switch 对比、综合实战案例
一、前言
程序默认执行顺序是从上到下依次执行(顺序结构),但实际开发中经常需要根据不同条件执行不同代码,这就需要选择结构。选择结构是程序逻辑控制的核心,后续所有复杂逻辑(循环、函数、算法)都建立在它的基础上,必须彻底掌握。
二、if 语句(最常用)
if 语句通过判断条件的真假,决定是否执行某段代码,共有三种基础形式和一种嵌套用法。
1. 单行 if 语句
语法:
if (条件表达式) {
// 条件为真时执行的代码
}
执行逻辑:条件为真(非 0)→ 执行大括号内代码;条件为假(0)→ 跳过不执行。
示例:判断一个数是否为正数
#include <iostream>
using namespace std;
int main()
{
int num;
cout << "请输入一个整数:";
cin >> num;
// 单行if:只有条件满足时才执行
if (num > 0) {
cout << num << " 是正数" << endl;
}
return 0;
}
2. if-else 语句(二选一)
语法:
if (条件表达式) {
// 条件为真时执行
} else {
// 条件为假时执行
}
执行逻辑:条件真执行 if 块,条件假执行 else 块,二者必执行其一。
示例:判断一个数是奇数还是偶数
int main()
{
int num;
cout << "请输入一个整数:";
cin >> num;
if (num % 2 == 0) {
cout << num << " 是偶数" << endl;
} else {
cout << num << " 是奇数" << endl;
}
return 0;
}
3. if-else if-else 语句(多条件多选一)
语法:
if (条件1) {
// 条件1为真执行
} else if (条件2) {
// 条件2为真执行
} else if (条件3) {
// 条件3为真执行
} else {
// 所有条件都为假时执行
}
执行逻辑:从上到下依次判断条件,第一个满足的条件对应的代码块执行,执行后直接跳出整个 if 结构。
示例:根据分数判断成绩等级
int main()
{
int score;
cout << "请输入考试分数(0-100):";
cin >> score;
if (score >= 90 && score <= 100) {
cout << "优秀" << endl;
} else if (score >= 80) {
cout << "良好" << endl;
} else if (score >= 60) {
cout << "及格" << endl;
} else {
cout << "不及格" << endl;
}
return 0;
}
4. if 嵌套(高级用法)
if 语句内部可以再嵌套 if 语句,用于处理更复杂的多条件判断。
示例:判断闰年
闰年规则:能被 4 整除但不能被 100 整除,或者能被 400 整除
int main()
{
int year;
cout << "请输入年份:";
cin >> year;
if (year % 4 == 0) {
if (year % 100 == 0) {
if (year % 400 == 0) {
cout << year << " 是闰年" << endl;
} else {
cout << year << " 不是闰年" << endl;
}
} else {
cout << year << " 是闰年" << endl;
}
} else {
cout << year << " 不是闰年" << endl;
}
return 0;
}
三、switch 语句
switch 语句用于多分支等值判断,相比 if-else if 结构更简洁、执行效率更高。
1. 基础语法
switch (表达式) {
case 常量1:
// 表达式等于常量1时执行
break;
case 常量2:
// 表达式等于常量2时执行
break;
default:
// 所有case都不匹配时执行
break;
}
2. 核心规则(必记)
- switch 后的表达式只能是整型或字符型(不能是浮点型、字符串)
- case 后面必须跟常量表达式(不能是变量)
break用于跳出 switch 结构,没有 break 会发生穿透现象default可选,用于处理所有 case 都不匹配的情况
示例:根据数字输出对应的星期几
int main()
{
int day;
cout << "请输入数字(1-7):";
cin >> day;
switch (day) {
case 1:
cout << "星期一" << endl;
break;
case 2:
cout << "星期二" << endl;
break;
case 3:
cout << "星期三" << endl;
break;
case 4:
cout << "星期四" << endl;
break;
case 5:
cout << "星期五" << endl;
break;
case 6:
cout << "星期六" << endl;
break;
case 7:
cout << "星期日" << endl;
break;
default:
cout << "输入错误,请输入1-7之间的数字" << endl;
break;
}
return 0;
}
3. switch 高级用法:穿透特性
如果某个 case 后面没有写 break,程序会继续执行下一个 case 的代码,直到遇到 break 或 switch 结束。合理利用穿透可以简化代码。
示例:根据月份判断所属季节
int main()
{
int month;
cout << "请输入月份(1-12):";
cin >> month;
switch (month) {
// 3-5月:春季(多个case共用一个代码块)
case 3:
case 4:
case 5:
cout << "春季" << endl;
break;
// 6-8月:夏季
case 6:
case 7:
case 8:
cout << "夏季" << endl;
break;
// 9-11月:秋季
case 9:
case 10:
case 11:
cout << "秋季" << endl;
break;
// 12-2月:冬季
case 12:
case 1:
case 2:
cout << "冬季" << endl;
break;
default:
cout << "输入错误" << endl;
break;
}
return 0;
}
四、if 与 switch 对比
表格
| 对比项 | if 语句 | switch 语句 |
|---|---|---|
| 适用场景 | 区间判断、复杂条件判断 | 等值判断、多分支固定值判断 |
| 表达式类型 | 任意布尔表达式 | 只能是整型、字符型 |
| 代码可读性 | 多条件时较繁琐 | 多等值判断时更清晰 |
| 执行效率 | 多条件时依次判断,效率较低 | 直接跳转对应 case,效率更高 |
选择建议:
- 区间判断、复杂逻辑判断 → 用 if
- 固定值的多分支判断 → 用 switch
五、常见错误与避坑点
- if 后面多写分号
// 错误写法:分号会导致if语句提前结束
if (num > 0); {
cout << "正数" << endl;
}
// 正确写法:去掉分号
if (num > 0) {
cout << "正数" << endl;
}
- switch 忘记写 break
// 错误:没有break,会执行case 2和case 3的代码
case 1:
cout << "1" << endl;
case 2:
cout << "2" << endl;
break;
- case 后面用变量
int a = 10;
// 错误:case后面必须是常量
case a:
cout << "10" << endl;
break;
- 条件判断用赋值运算符
=
// 错误:这是赋值操作,不是判断相等,条件永远为真
if (num = 10) {
cout << "等于10" << endl;
}
// 正确写法:用 ==
if (num == 10) {
cout << "等于10" << endl;
}
六、综合实战案例:简易计算器
结合选择语句和运算符,实现一个支持加减乘除的简易计算器:
#include <iostream>
using namespace std;
int main()
{
double num1, num2;
char op;
cout << "请输入第一个数:";
cin >> num1;
cout << "请输入运算符(+、-、*、/):";
cin >> op;
cout << "请输入第二个数:";
cin >> num2;
switch (op) {
case '+':
cout << num1 << " + " << num2 << " = " << num1 + num2 << endl;
break;
case '-':
cout << num1 << " - " << num2 << " = " << num1 - num2 << endl;
break;
case '*':
cout << num1 << " * " << num2 << " = " << num1 * num2 << endl;
break;
case '/':
if (num2 == 0) {
cout << "错误:除数不能为0" << endl;
} else {
cout << num1 << " / " << num2 << " = " << num1 / num2 << endl;
}
break;
default:
cout << "错误:无效的运算符" << endl;
break;
}
return 0;
}
七、今日学习总结
-
if 语句三种形式:
- 单行 if:单条件判断
- if-else:二选一判断
- if-else if-else:多条件多选一
-
if 嵌套:处理复杂的多层条件判断
-
switch 语句:
- 适用于多分支等值判断
- 核心规则:表达式只能是整型 / 字符型,case 后跟常量
- 穿透特性:合理利用可简化代码
-
if vs switch:区间用 if,等值用 switch
-
避坑重点:if 后不加分号、switch 记得写 break、判断相等用 ==
✍️ 下节预告
下一篇将学习 C++ 循环结构:while 循环、do-while 循环、for 循环,以及循环嵌套、break 和 continue 语句,继续夯实程序流程控制基础。