9.选择结构 (switch)
约 2044 字大约 7 分钟
2025-02-05
一、开场:开启多分支选择之旅
标题:解锁多分支选择密码 - switch 语句探秘
副标题:为程序赋予多元决策能力
引入方式:展示一个简单的生活场景,比如在餐厅点餐,菜单上有多种菜品可供选择,顾客根据自己的喜好选择相应的菜品。提问学生如果用程序实现这个点餐过程,怎样让程序根据不同的选择做出不同的响应,从而引出 switch 语句,它就像餐厅的菜单,能让程序根据不同的条件做出不同的操作。
配图:选择一张展示餐厅菜单和顾客点餐的图片,或者用流程图表示多分支选择过程的图片,让学生对多分支选择有直观的感受。
二、switch 语句初相识
switch 语句的概念
讲解 switch 语句是一种多分支选择结构,用于根据一个表达式的值来选择执行多个分支中的一个。它适用于处理多个离散值的情况,使代码结构更加清晰,可读性更强。
举例说明,比如根据用户输入的数字 1 - 7,分别输出对应的星期一到星期日,用 switch 语句就可以很方便地实现。
switch 语句的语法
switch (表达式) {
case 常量表达式1:
// 当表达式的值等于常量表达式1时执行的代码
break;
case 常量表达式2:
// 当表达式的值等于常量表达式2时执行的代码
break;
...
default:
// 当表达式的值与所有case常量表达式都不匹配时执行的代码
break;
}
解释switch
后面括号中的 “表达式”,它的值必须是整型、字符型或枚举型。
每个case
后面的 “常量表达式” 是一个固定的值,用于与switch
表达式的值进行匹配。当switch
表达式的值与某个case
常量表达式的值相等时,就执行该case
后面的代码,直到遇到break
语句或者到达switch
语句的末尾。
default
分支是可选的,当switch
表达式的值与所有case
常量表达式都不匹配时,执行default
分支的代码。
代码示例 1:输出星期几
#include <iostream>
int main() {
int day;
std::cout << "请输入数字1 - 7: ";
std::cin >> day;
switch (day) {
case 1:
std::cout << "星期一" << std::endl;
break;
case 2:
std::cout << "星期二" << std::endl;
break;
case 3:
std::cout << "星期三" << std::endl;
break;
case 4:
std::cout << "星期四" << std::endl;
break;
case 5:
std::cout << "星期五" << std::endl;
break;
case 6:
std::cout << "星期六" << std::endl;
break;
case 7:
std::cout << "星期日" << std::endl;
break;
default:
std::cout << "输入的数字无效" << std::endl;
}
return 0;
}
逐行分析代码:
首先定义一个整型变量day
,用于存储用户输入的数字。
使用std::cout
输出提示信息,让用户输入数字 1 - 7,然后用std::cin
读取用户输入并存入day
。
使用switch
语句根据day
的值进行多分支选择,每个case
分支对应一个星期几的输出,default
分支处理输入无效的情况。
强调break
语句的重要性,如果没有break
语句,当某个case
分支匹配成功后,会继续执行后面所有case
分支的代码,直到遇到break
或者switch
结束。
三、switch 语句的进阶应用
多个 case 共用代码块
讲解在某些情况下,多个case
分支可以共用相同的代码块。例如,在判断一个成绩等级时,90 - 100 分为 A 等级,80 - 89 分为 B 等级,70 - 79 分为 C 等级,60 - 69 分为 D 等级,60 分以下为 E 等级。可以让 90 - 100 分的多个case
共用一个输出 A 等级的代码块。
代码示例:
#include <iostream>
int main() {
int score;
std::cout << "请输入学生的成绩: ";
std::cin >> score;
switch (score / 10) {
case 10:
case 9:
std::cout << "成绩等级为A" << std::endl;
break;
case 8:
std::cout << "成绩等级为B" << std::endl;
break;
case 7:
std::cout << "成绩等级为C" << std::endl;
break;
case 6:
std::cout << "成绩等级为D" << std::endl;
break;
default:
std::cout << "成绩等级为E" << std::endl;
}
return 0;
}
分析代码:通过score / 10
将成绩划分为不同的区间,10 和 9 对应的case
共用输出 A 等级的代码块,简化了代码结构。
switch 语句与枚举类型结合
介绍枚举类型是一种用户自定义的数据类型,用于定义一组命名的整型常量。将 switch 语句与枚举类型结合使用,可以使代码更加清晰和易读。
代码示例:
#include <iostream>
// 定义枚举类型表示季节
enum Season {
SPRING,
SUMMER,
AUTUMN,
WINTER
};
int main() {
Season season = SPRING; // 假设当前季节为春天
switch (season) {
case SPRING:
std::cout << "现在是春天" << std::endl;
break;
case SUMMER:
std::cout << "现在是夏天" << std::endl;
break;
case AUTUMN:
std::cout << "现在是秋天" << std::endl;
break;
case WINTER:
std::cout << "现在是冬天" << std::endl;
break;
}
return 0;
}
分析代码:定义了一个枚举类型Season
表示季节,在switch
语句中根据枚举值进行多分支选择,使代码更具语义化。
四、实践与巩固
练习题目
让学生编写一个程序,根据用户输入的月份(1 - 12),输出该月份所属的季节。要求使用 switch 语句实现,并且添加适当的注释。
给出一个包含 switch 语句的程序,其中存在一些错误,如case
常量表达式重复、缺少break
语句等,让学生找出错误并改正,同时添加注释说明修改的原因。
互动环节
开展小组竞赛,将学生分成小组,每个小组共同完成练习题目。完成后,每个小组推选一名代表进行代码展示和讲解,其他小组进行提问和评价,教师进行总结和点评,获胜小组可获得小奖品,如编程书籍、笔记本等。
进行情景模拟编程,教师给出一些生活中的多分支选择场景,如根据不同的天气选择不同的活动、根据不同的交通工具选择不同的出行路线等,让学生在规定时间内用 switch 语句编写代码实现,然后邀请学生上台分享自己的代码思路,增强学生的编程实践能力和表达能力。
五、回顾与总结
总结
回顾 switch 语句的概念、语法,包括switch
表达式、case
常量表达式、break
语句和default
分支的作用。
总结 switch 语句的进阶应用,如多个case
共用代码块以及与枚举类型结合使用的方法和优势。
强调在使用 switch 语句时需要注意的事项,如case
常量表达式的唯一性、break
语句的合理使用等,以及良好的代码编写习惯对程序正确性和可读性的重要性。
拓展
鼓励学生课后尝试编写更复杂的多分支选择程序,如实现一个简单的计算器程序,根据用户输入的运算符(加、减、乘、除等)进行相应的运算,使用 switch 语句处理不同的运算操作。
推荐一些编程学习资源,如在线编程社区(如 Stack Overflow、CSDN 等)、编程书籍(如《C++ Primer》《Effective C++》等),让学生可以在课后进一步学习和交流,深入了解 switch 语句在实际项目中的应用,拓宽编程视野,提升编程水平。
六、结束寄语
感谢语
感谢同学们在本节课的积极参与和认真学习,通过本节课的学习,大家对选择结构中的 switch 语句有了深入的理解和掌握。希望大家在今后的编程学习中,能够灵活运用 switch 语句解决各种多分支选择问题,不断提升自己的编程技能和逻辑思维能力。