
课程目标
- 掌握if语句的基本用法
- 理解if-else和if-else if结构
- 学会使用嵌套if解决复杂问题
- 掌握switch语句的适用场景和用法
- 能够编写具有分支逻辑的程序
- 理解选择结构在问题解决中的应用
第一部分:if语句(40分钟)
1.1 什么是选择结构?
比喻: 就像生活中的"如果...就..."
- 如果下雨,就带伞
- 如果成绩及格,就通过考试
- 如果年龄够大,就可以看电影
1.2 基本的if语句
语法:
cpp
if (条件) {
// 条件为真时执行的代码
}
流程图:
plain
开始
↓
检查条件
↓
条件为真? → 是 → 执行代码块
↓否
继续后续代码
1.3 if语句示例
cpp
#include <iostream>
using namespace std;
int main() {
int score;
cout << "请输入你的考试成绩: ";
cin >> score;
// 基本的if语句
if (score >= 60) {
cout << "恭喜!你及格了!" << endl;
}
cout << "程序继续执行..." << endl;
return 0;
}
1.4 单行if语句
当只有一条语句时,可以省略大括号:
cpp
#include <iostream>
using namespace std;
int main() {
int age;
cout << "请输入你的年龄: ";
cin >> age;
// 单行if语句(不推荐初学者使用)
if (age >= 18)
cout << "你已经成年了!" << endl;
// 推荐始终使用大括号,即使只有一行代码
if (age < 18) {
cout << "你还是未成年人。" << endl;
}
return 0;
}
第二部分:if-else语句(40分钟)
2.1 if-else结构
语法:
cpp
if (条件) {
// 条件为真时执行的代码
} else {
// 条件为假时执行的代码
}
流程图:
plain
开始
↓
检查条件
↓
条件为真? → 是 → 执行if代码块
↓否
执行else代码块
↓
继续后续代码
2.2 if-else示例
cpp
#include <iostream>
using namespace std;
int main() {
int number;
cout << "请输入一个整数: ";
cin >> number;
// if-else语句
if (number % 2 == 0) {
cout << number << " 是偶数" << endl;
} else {
cout << number << " 是奇数" << endl;
}
return 0;
}
2.3 多个条件的判断
cpp
#include <iostream>
using namespace std;
int main() {
int score;
cout << "请输入考试成绩(0-100): ";
cin >> score;
// 检查输入有效性
if (score < 0 || score > 100) {
cout << "输入的成绩无效!" << endl;
} else {
if (score >= 60) {
cout << "恭喜!你及格了!" << endl;
} else {
cout << "很遗憾,你需要继续努力!" << endl;
}
}
return 0;
}
第三部分:if-else if-else语句(40分钟)
3.1 多分支选择结构
语法:
cpp
if (条件1) {
// 条件1为真时执行
} else if (条件2) {
// 条件2为真时执行
} else if (条件3) {
// 条件3为真时执行
} else {
// 所有条件都不满足时执行
}
3.2 成绩等级评定示例
cpp
#include <iostream>
using namespace std;
int main() {
int score;
cout << "请输入考试成绩(0-100): ";
cin >> score;
// if-else if-else 多分支
if (score >= 90) {
cout << "优秀!等级:A" << endl;
} else if (score >= 80) {
cout << "良好!等级:B" << endl;
} else if (score >= 70) {
cout << "中等!等级:C" << endl;
} else if (score >= 60) {
cout << "及格!等级:D" << endl;
} else {
cout << "不及格!等级:E" << endl;
}
return 0;
}
3.3 月份天数判断
cpp
#include <iostream>
using namespace std;
int main() {
int month, year;
cout << "请输入年份: ";
cin >> year;
cout << "请输入月份(1-12): ";
cin >> month;
// 多条件判断月份天数
if (month == 1 || month == 3 || month == 5 || month == 7 ||
month == 8 || month == 10 || month == 12) {
cout << "这个月有31天" << endl;
} else if (month == 4 || month == 6 || month == 9 || month == 11) {
cout << "这个月有30天" << endl;
} else if (month == 2) {
// 判断闰年
if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {
cout << "这是闰年,2月有29天" << endl;
} else {
cout << "这不是闰年,2月有28天" << endl;
}
} else {
cout << "输入的月份无效!" << endl;
}
return 0;
}
第四部分:嵌套if语句(30分钟)
4.1 什么是嵌套if?
在if语句内部再包含if语句
cpp
if (外层条件) {
if (内层条件) {
// 两个条件都满足时执行
}
}
4.2 嵌套if示例:游戏角色权限
cpp
#include <iostream>
using namespace std;
int main() {
int level;
bool hasSpecialItem;
string characterClass;
cout << "请输入角色等级: ";
cin >> level;
cout << "是否有特殊物品(1有/0没有): ";
cin >> hasSpecialItem;
cout << "请输入职业(战士/法师/牧师): ";
cin >> characterClass;
// 嵌套if语句
if (level >= 10) {
if (characterClass == "战士") {
cout << "你可以学习旋风斩技能!" << endl;
} else if (characterClass == "法师") {
cout << "你可以学习火球术技能!" << endl;
} else if (characterClass == "牧师") {
cout << "你可以学习治疗术技能!" << endl;
}
// 更深层的嵌套
if (level >= 20) {
if (hasSpecialItem) {
cout << "你可以进入隐藏副本!" << endl;
} else {
cout << "你需要特殊物品才能进入隐藏副本" << endl;
}
}
} else {
cout << "等级不足,请继续升级!" << endl;
}
return 0;
}
4.3 嵌套if的注意事项
避免过度嵌套:
cpp
// 不好的写法:嵌套太深
if (condition1) {
if (condition2) {
if (condition3) {
if (condition4) {
// 代码很难阅读
}
}
}
}
// 更好的写法:使用逻辑运算符组合条件
if (condition1 && condition2 && condition3 && condition4) {
// 代码清晰易读
}
第五部分:switch语句(40分钟)
5.1 switch语句的基本结构
适用于多个固定值的判断
语法:
cpp
switch (表达式) {
case 值1:
// 代码块1
break;
case 值2:
// 代码块2
break;
// ... 更多case
default:
// 默认代码块
}
5.2 switch示例:星期几判断
cpp
#include <iostream>
using namespace std;
int main() {
int day;
cout << "请输入星期几的数字(1-7): ";
cin >> day;
// switch语句
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;
}
return 0;
}
5.3 break的重要性
没有break会发生什么?
cpp
#include <iostream>
using namespace std;
int main() {
int option = 2;
cout << "选项: " << option << endl;
switch (option) {
case 1:
cout << "执行选项1" << endl;
// 注意:这里没有break!
case 2:
cout << "执行选项2" << endl;
// 注意:这里没有break!
case 3:
cout << "执行选项3" << endl;
break;
default:
cout << "默认选项" << endl;
}
// 输出:
// 执行选项2
// 执行选项3
return 0;
}
5.4 多个case共享代码
cpp
#include <iostream>
using namespace std;
int main() {
char grade;
cout << "请输入成绩等级(A/B/C/D/E): ";
cin >> grade;
// 多个case共享相同的代码
switch (grade) {
case 'A':
case 'B':
case 'C':
cout << "成绩合格!" << endl;
cout << "可以获得学分" << endl;
break;
case 'D':
cout << "成绩基本合格" << endl;
break;
case 'E':
cout << "成绩不合格" << endl;
cout << "需要补考" << endl;
break;
default:
cout << "无效的等级!" << endl;
}
return 0;
}
第六部分:综合应用示例(40分钟)
6.1 简易计算器(改进版)
cpp
#include <iostream>
using namespace std;
int main() {
double num1, num2, result;
char operation;
cout << "=== 简易计算器 ===" << endl;
cout << "请输入第一个数字: ";
cin >> num1;
cout << "请输入运算符 (+, -, *, /, %): ";
cin >> operation;
cout << "请输入第二个数字: ";
cin >> num2;
bool valid = true;
// 使用switch处理不同的运算符
switch (operation) {
case '+':
result = num1 + num2;
break;
case '-':
result = num1 - num2;
break;
case '*':
result = num1 * num2;
break;
case '/':
if (num2 != 0) {
result = num1 / num2;
} else {
cout << "错误:除数不能为0!" << endl;
valid = false;
}
break;
case '%':
// 取模运算需要整数
if (static_cast<int>(num2) != 0) {
result = static_cast<int>(num1) % static_cast<int>(num2);
} else {
cout << "错误:取模运算的除数不能为0!" << endl;
valid = false;
}
break;
default:
cout << "错误:不支持的运算符!" << endl;
valid = false;
}
if (valid) {
cout << "计算结果: " << num1 << " " << operation << " " << num2 << " = " << result << endl;
}
return 0;
}
6.2 学生奖学金评定系统
cpp
#include <iostream>
using namespace std;
int main() {
double gpa; // 平均绩点
int activities; // 参与活动数量
bool isLeader; // 是否是班干部
int leaderInput;
cout << "=== 奖学金评定系统 ===" << endl;
cout << "请输入平均绩点(0-4): ";
cin >> gpa;
cout << "请输入参与活动数量: ";
cin >> activities;
cout << "是否是班干部(1是/0否): ";
cin >> leaderInput;
isLeader = (leaderInput == 1);
// 多重条件判断
if (gpa >= 3.8) {
if (activities >= 5) {
if (isLeader) {
cout << "恭喜!你获得一等奖学金!" << endl;
} else {
cout << "恭喜!你获得二等奖学金!" << endl;
}
} else if (activities >= 3) {
cout << "恭喜!你获得三等奖学金!" << endl;
} else {
cout << "很遗憾,活动参与不足,无法获得奖学金。" << endl;
}
} else if (gpa >= 3.5) {
if (activities >= 3 && isLeader) {
cout << "恭喜!你获得三等奖学金!" << endl;
} else {
cout << "很遗憾,条件不满足,无法获得奖学金。" << endl;
}
} else {
cout << "很遗憾,绩点不满足奖学金要求。" << endl;
}
return 0;
}
6.3 石头剪刀布游戏
cpp
#include <iostream>
using namespace std;
int main() {
int playerChoice, computerChoice;
cout << "=== 石头剪刀布游戏 ===" << endl;
cout << "请选择:(1)石头 (2)剪刀 (3)布" << endl;
cout << "你的选择: ";
cin >> playerChoice;
// 简单的随机数生成(使用时间相关,这里简化用固定算法)
computerChoice = (playerChoice * 7 + 3) % 3 + 1;
cout << "电脑选择了: ";
switch (computerChoice) {
case 1: cout << "石头"; break;
case 2: cout << "剪刀"; break;
case 3: cout << "布"; break;
}
cout << endl;
cout << "你选择了: ";
switch (playerChoice) {
case 1: cout << "石头"; break;
case 2: cout << "剪刀"; break;
case 3: cout << "布"; break;
default: cout << "无效选择"; break;
}
cout << endl;
// 判断胜负
if (playerChoice == computerChoice) {
cout << "平局!" << endl;
} else if ((playerChoice == 1 && computerChoice == 2) ||
(playerChoice == 2 && computerChoice == 3) ||
(playerChoice == 3 && computerChoice == 1)) {
cout << "你赢了!" << endl;
} else if (playerChoice >= 1 && playerChoice <= 3) {
cout << "你输了!" << endl;
} else {
cout << "输入无效!" << endl;
}
return 0;
}
第七部分:选择结构的最佳实践(20分钟)
7.1 if vs switch 的选择
使用if的情况:
- 条件涉及范围判断(如 score > 60)
- 条件涉及多个变量的复杂逻辑
- 条件不是离散的固定值
使用switch的情况:
- 对单个变量的多个固定值进行判断
- 条件值是离散的(如1,2,3或'A','B','C')
- 代码需要更好的可读性
7.2 代码风格建议
良好的代码风格:
cpp
// 好的写法:清晰的缩进和括号
if (condition) {
// 代码
} else if (anotherCondition) {
// 代码
} else {
// 代码
}
// 不好的写法:混乱的格式
if(condition){
//代码}else{if(anotherCondition){
//代码}else{//代码}}
7.3 常见错误避免
常见错误1:赋值运算符误用
cpp
// 错误!
if (score = 60) { // 这是赋值,不是比较
cout << "及格" << endl;
}
// 正确
if (score == 60) { // 这是比较
cout << "及格" << endl;
}
常见错误2:缺少break
cpp
// 错误:忘记break
switch (day) {
case 1: cout << "周一";
case 2: cout << "周二"; // 会继续执行到这里
}
// 正确:记得break
switch (day) {
case 1:
cout << "周一";
break;
case 2:
cout << "周二";
break;
}
练习与作业
基础练习(必做)
练习1:年龄阶段判断
编写程序根据输入的年龄判断所属阶段:
- 0-2岁:婴儿
- 3-12岁:儿童
- 13-17岁:青少年
- 18-64岁:成人
- 65岁及以上:老年人
练习2:简单登录系统
创建一个用户名和密码验证系统:
- 预设用户名"admin",密码"123456"
- 用户输入用户名和密码
- 根据输入给出相应的提示信息
练习3:三角形类型判断(改进版)
输入三角形三条边,判断:
- 是否构成三角形(任意两边之和大于第三边)
- 等边三角形、等腰三角形、普通三角形
- 直角三角形(使用勾股定理)
挑战练习(选做)
挑战1:个人所得税计算器
根据收入计算个人所得税(使用中国的个税税率表):
- 不同收入区间适用不同税率
- 考虑起征点和速算扣除数
- 输出应缴税款和税后收入
挑战2:智能交通信号系统
模拟交通信号灯控制系统:
- 根据时间、车流量、紧急情况等条件
- 决定信号灯的变化
- 使用嵌套if处理复杂条件
挑战3:学生选课系统
实现一个简单的选课条件检查:
- 检查先修课程是否完成
- 检查时间冲突
- 检查人数是否已满
- 给出相应的提示信息
实验任务
任务1:if-else if-else 实验
测试以下代码,理解执行流程:
cpp
int x = 75;
if (x >= 90) {
cout << "A";
} else if (x >= 80) {
cout << "B";
} else if (x >= 70) {
cout << "C";
} else {
cout << "D";
}
// 改变x的值,观察输出变化
任务2:switch穿透实验
故意在switch语句中省略break,观察代码的执行顺序,理解break的重要性。
任务3:条件组合实验
测试复杂的条件组合:
cpp
int a = 5, b = 10, c = 15;
if (a > 3 && b < 20 || c == 15) {
// 这个条件会成立吗?
}
// 尝试不同的组合,验证你的理解
学习总结
今天学到了:
- ✅ if语句:基本的条件判断
- ✅ if-else语句:二选一的分支
- ✅ if-else if-else语句:多分支选择
- ✅ 嵌套if:在条件内部再进行条件判断
- ✅ switch语句:多固定值的选择结构
关键技能:
- 条件表达式编写:使用关系运算符和逻辑运算符
- 代码块组织:使用大括号明确代码范围
- 流程控制:让程序根据不同情况执行不同代码
- 错误处理:检查输入有效性并给出提示
下一课预告:
下一节课我们将学习程序流程控制:循环结构,包括for、while、do-while循环,让程序能够重复执行特定任务!