第4章 第4节:switch语句(课件)-《C语言程序设计》(电子工业出版社)上好课

2026-04-30
| 48页
| 73人阅读
| 0人下载
精品

内容正文:

4.4节:switch语句 C语言程序设计 电子工业出版社 理解 switch 语句的基本语法结构和执行流程,掌握其核心逻辑 能够熟练运用 switch 语句编写代码,解决实际开发中的多分支选择问题 通过编程练习,培养严谨的逻辑思维能力和良好的代码规范意识 知识目标 能力目标 素养目标 01 01 01 学习目标 目录 Part 01 教学导入 Part 02 知识讲授 Part 03 师生互动 Part 04 课堂练习 Part 05 课堂小结 教学导入:一个复杂的判断问题 核心问题:成绩等级判定 需求:根据学生输入的成绩,自动输出对应的评价。 现有困境:if 语句的局限 挑战:如果仅使用基础的 if 语句实现,需要嵌套多层判断逻辑,代码结构会变得非常臃肿且不易维护。 教学导入:一个更简洁的解决方案 多分支选择的最优解 当面临超过 3 个分支的判断逻辑时,嵌套if-else语句会导致代码层级过深、阅读困难。而switch语句专为处理此类场景设计,让逻辑一目了然。 传统嵌套 if 的痛点 层层嵌套导致代码冗长,调试时需要反复缩进匹配,维护成本较高。 Switch 语句的优势 将分支条件集中展示,结构清晰扁平,一次条件判断即可直达对应逻辑。 多分支选择的形象化表达:如同路口的不同方向 知识讲授 switch语句和分支结构程序设计实例 switch语句 switch语句的应用 第一部分 switch语句 知识讲授 知识讲授 知识讲授:switch语句的一般形式 C语言标准语法结构 switch(表达式) { case 常量表达式1: 语句组1; case 常量表达式2: 语句组2; ... case 常量表达式n: 语句组n; default: 语句组n+1; } 结构核心说明 1. 关键字 switch 其后括号内是一个表达式,计算结果将作为判断依据。 2. 分支 case 每个 case 后跟一个常量表达式和冒号,匹配成功则执行后续语句组。 3. 默认 default 可选分支,当所有 case 都不匹配时执行。 💡 核心要点:switch 语句通过表达式的值匹配不同分支,实现多分支选择结构。 知识讲授:switch语句的执行过程 执行过程四步走 1. 计算表达式值 首先计算 switch 关键字后面括号内表达式的值,作为后续匹配的依据。 2. 依次匹配常量 将计算结果依次与各个 case 后面的常量表达式的值进行比较。 3. 执行匹配语句 若找到匹配值,执行该 case 后的语句组,直到遇到 break 或结构结束。 4. 执行默认分支 若未找到任何匹配值,则直接执行 default 后面的语句组。 💡 核心口诀:先求值,再匹配,匹配成功则执行,否则走默认。 知识讲授:break的作用 核心作用:用于跳出 switch 结构,防止程序执行时出现“贯穿”现象。 有 break 语句 (推荐) switch(grade) { case 'A': printf("85~100 ");break; case 'B': printf("70~84 ");break; } 执行匹配的 case 后,遇到 break 立即跳出 switch 结构,不会执行后续代码。 无 break 语句 (贯穿现象) switch(grade) { case 'A': printf("85~100 ");// 无break case 'B': printf("70~84 ");// 无break } 执行匹配的 case 后,会“贯穿”执行后续所有 case 的语句,直到 switch 结束。 重要提示:在实际开发中,除非有特殊的业务需求(如利用贯穿性),否则在每个 case 分支的末尾都应该加上 break 语句。 知识讲授:break的作用 switch 表达式 语句组1 break 语句组2 break 语句组n break 语句组n+1 break …… case E1 E2 En default 知识讲授:break的作用 switch 表达式 语句组1 语句组2 语句组n 语句组n+1 …… case E1 E2 En default 知识讲授:default子句的作用 可选的“兜底”机制 default子句是可选的,用于处理所有 case 都不匹配的情况,相当于 if-else 中的 else。 无匹配时的行为 如果没有 default 子句,且所有 case 都不匹配,程序将跳过 switch 块,不执行任何语句。 最佳实践建议 建议始终添加 default 子句来处理异常输入,增强程序的健壮性和容错能力。 程序文本 switch(grade) { case'A':// 匹配等级 A printf("优秀");break; case'B':// 匹配等级 B printf("良好");break; default:// 其他情况 printf("输入错误!"); } 知识讲授:使用switch语句的注意事项 类型匹配原则 switch 后面的表达式可以为任何类型,但必须与 case 后的常量表达式类型严格匹配。 在实际应用中,通常建议使用整型或字符型,以避免隐式转换带来的错误。 常量唯一性原则 每一个 case 后的常量表达式的值必须互不相同。 如果存在重复值,程序在编译或运行时会出现逻辑矛盾,导致无法确定正确的执行分支。 核心记忆:类型一致防报错,常量唯一防冲突。遵循这两个基本原则,能有效避免 switch 语句中 90% 的逻辑错误。 知识讲授:使用switch语句的注意事项 顺序无关性 ● 执行逻辑:case和default的出现顺序不影响执行结果。 ● 编码规范:为了可读性,通常将default分支放在最后。 省略花括号 ● 语法特性:case后的语句块可省略花括号 `{}`。 ● 执行行为:程序会自动顺序执行该case后的所有语句,直到遇到break。 核心提示 虽然顺序不影响结果,但合理的结构能降低维护成本;省略花括号虽然简洁,但需警惕“贯穿”效应(Fall-through),确保在需要时正确使用 break 语句退出分支。 知识讲授:使用switch语句的注意事项 多个case可以共用一组语句 当变量匹配多个case常量时,可共享同一段执行逻辑,避免代码冗余。 case 'A': case 'B': case 'C': printf(">60 "); break; // 当grade为'A'、'B'或'C'时执行此句 default子句可以省略 default子句是可选的。如果没有匹配的case常量,程序将不执行switch结构内的任何操作,直接跳出switch语句,继续执行后续代码。 背诵记忆 语法结构 switch(表达式){ case 常量: 语句; break; ... default: 语句; } 执行过程 1. 计算表达式的值 2. 匹配对应的 case 标签 3. 执行语句,遇到 break 则跳出 break 的作用 用于跳出 switch 结构。 防止程序继续执行后续的 case 语句,即防止“穿透”现象发生。 default 的作用 处理所有 case 都不匹配的情况。 相当于 if-else 结构中的 else 分支,提供默认行为。 核心知识点回顾:switch 语句的结构与执行逻辑 例题分析:问题描述 【例题】成绩等级判断 需求:按照考试成绩的等级输出百分制分数段,A等为85分以上,B等为70~84分,C等为60~69分,D等为60分以下,成绩的等级由键盘输入。 【代码逻辑分析】 输入处理:定义字符变量 grade,通过 scanf 获取用户输入。 分支判断:使用 switch(grade) 匹配不同等级,替代多层 if 嵌套。 执行逻辑:匹配 case 后输出分数段,通过 break 跳出,避免“贯穿”。 异常处理:default 分支捕获非 A-D 的错误输入。 核心知识点:switch 语句是处理多分支选择的高效方式,break 语句是确保分支唯一执行的关键。 例题分析:程序流程图 例题分析:程序代码 程序文本:成绩等级判断。 #include<stdio.h> main() { char grade; scanf("%c",&grade); switch(grade) { case'A':printf("85~100 ");break; case'B':printf("70~84 ");break; case'C':printf("60~69 ");break; case'D':printf("<60 ");break; default:printf("enter data error! "); } } 例题分析:运行结果 课堂问答 Q1:switch 后的表达式可以是什么类型? 答案:可以是整数类型(如 int)或字符类型(如 char)。 问题:如果 case 后没有 break 会怎样? 答案:程序会发生“穿透”,继续执行后续 case 的语句,直到遇到 break 或 switch 结束。 课堂练习 题目 编写程序,根据输入的数字(1-7),输出对应的星期几的英文名称。 例如:输入 1,输出 Monday;输入 7,输出 Sunday。 要求 请务必使用switch 语句来实现逻辑判断。 思考:如果输入的数字不在 1-7 范围内,程序应该如何处理? 课堂练习 程序文本 #include<stdio.h> main() { int day; printf("请输入数字(1-7): "); scanf("%d", &day); switch(day) { case 1: printf("Monday ");break; case 2: printf("Tuesday ");break; case 3: printf("Wednesday ");break; case 4: printf("Thursday ");break; case 5: printf("Friday ");break; case 6: printf("Saturday ");break; case 7: printf("Sunday ");break; default: printf("输入错误! "); } } 课堂练习 第二部分 知识讲授 switch语句的应用 知识讲授:switch语句的应用 题目描述:运费计算标准 s < 1000km:无优惠,单价6元/(t·km) 1000 ≤ s < 2000km:优惠5% 2000 ≤ s < 3000km:优惠8% 3000 ≤ s < 5000km:优惠10%;s ≥ 5000km:优惠12% 解题思路分析 计算整数 q = s / 1000,将连续距离转化为离散整数点 利用 switch 语句匹配 q 值,确定单价 p 的折扣系数 计算公式:总金额 t = p(折扣后) × 运量 w × 距离 s 知识讲授:switch语句的应用 g=s/1000 p=6 p=6*0.95 p=6*0.92 p*0.90 0 1 2 3 defalt 4 p*0.88 知识讲授:switch语句的应用 程序文本【4.7】为某运输公司编制计算运费的程序。 #include<stdio.h> main() { int s,w,g; float p,t; printf("请输入距离s和运量w的值: "); scanf("%d,%d",&s,&w); g=s/1000; switch(g) { case 0:p=6;break; case 1:p=6*0.95;break; case 2:p=6*0.92;break; case 3: case 4:p=6*0.90;break; default:p=6*0.88;break; } t=p*s*w; printf("单价p是%.3f 总价t是%.3f ",p,t); } 知识讲授:switch语句的应用 知识讲授:“switch” VS “if-else” 对比维度 switch 语句 if-else 语句 结构 结构清晰,代码简洁,适合处理固定值的多分支场景 逻辑灵活,适合处理复杂的、非等值的条件判断 可读性 分支点一目了然,代码维护成本低 多层嵌套时(if-else if-else)可读性较差,易出错 效率 通常更高,底层可能使用跳转表实现,时间复杂度低 需逐个判断条件,最坏情况下效率较低(如最后一个分支) 适用场景 单一变量的等值判断,分支数量较多时优势明显 范围判断、逻辑组合判断,或分支较少的简单场景 结论:根据具体场景选择合适的语句,switch适合处理等值的多分支,if-else适合处理复杂的条件判断。 知识讲授:常见错误与调试 忘记 break 语句 导致“贯穿”错误,程序不会跳出 switch,会继续执行后续的 case 语句。 case 标签非常量 case 后面必须是常量表达式(如数字、宏定义),不能使用变量。 表达式类型不匹配 switch 括号内的表达式类型必须与 case 后的常量类型一致(通常为整型或字符型)。 调试技巧:打印变量 在关键位置添加 printf 语句,打印变量值,观察程序执行流程和变量变化。 💡 核心提示:养成良好的编码习惯是避免错误的关键。编写 switch 语句时,建议先写好所有 case 和 break 结构,再填充具体逻辑。遇到逻辑错误时,善用“打印调试法”往往能快速定位问题。 背诵记忆 核心应用场景 菜单驱动程序设计 多分支等值判断逻辑 vs if-else 结构清晰,可读性强 跳转表机制,效率更高 if-else 更适合范围判断 避坑指南 遗漏 break 导致贯穿 case 标签必须是常量 表达式类型必须匹配 记忆口诀:等值判断选 switch,结构清晰效率高;勿忘 break 防贯穿,常量匹配要记牢。 例题分析 题目要求 编写程序,模拟一个简单的计算器,输入两个数字和一个运算符(+、-、*、/),输出运算结果。 思考提示:可以尝试使用switch 语句来处理不同的运算符分支逻辑。 例题分析 程序文本 #include<stdio.h> main() { float num1, num2, result; char op; scanf("%f %c %f", &num1, &op, &num2);// 输入运算数和运算符 switch(op) { case'+': result = num1 + num2;break; case'-': result = num1 - num2;break; case'*': result = num1 * num2;break; case'/': if(num2 != 0) {result = num1 / num2;break;} else{ printf("除数不能为零! ");return 1; } default: printf("无效的运算符! ");return 1; } printf("结果: %.2f ", result); } 例题分析 课堂问答 问题 switch语句和if-else语句在处理多分支时,哪种效率更高?为什么? 参考答案 通常switch语句效率更高。因为编译器可以为switch语句生成跳转表(jump table),根据表达式的值直接跳转到对应的case,而if-else语句需要逐个条件进行判断,在分支较多时效率较低。 课堂练习(一) 编程任务:设计简单的菜单程序 需求描述: 请编写一个控制台程序,提示用户选择计算类型: 选项 1:计算圆的面积- 提示用户输入半径,计算并输出面积 选项 2:计算矩形的面积- 提示用户输入长和宽,计算并输出面积 课堂练习(一) 程序文本 #include<stdio.h> #definePI3.14159 main() { int choice; float r, length, width, area; printf("请选择计算类型: 1. 计算圆的面积 2. 计算矩形的面积 请输入选项: "); scanf("%d", &choice); switch(choice) { case 1:printf("请输入圆的半径: "); scanf("%f", &r); area = PI * r * r; printf("圆的面积为: %.2f ", area);break; case 2:printf("请输入矩形的长和宽: "); scanf("%f %f", &length, &width); area = length * width; printf("矩形的面积为: %.2f ", area);break; default: printf("无效选择! "); } } 课堂练习(一) 课堂练习(二) 题目要求: 编写程序,根据输入的月份,判断该月份所属的季节。 季节划分规则: 春季 3月 - 5月 夏季 6月 - 8月 秋季 9月 - 11月 冬季 12月 - 2月 注意:冬季包含跨年度的月份(12月、1月、2月),在编写判断逻辑时需特别留意边界条件。 课堂练习(二) 程序文本 #include<stdio.h> main() { int month; printf("请输入月份(1-12): "); scanf("%d", &month); switch(month) { case 3: case 4: case 5: printf("春季 "); break; case 6: case 7: case 8: printf("夏季 "); break; case 9: case 10: case 11: printf("秋季 "); break; case 12: case 1: case 2: printf("冬季 "); break; default: printf("输入错误! "); } } 课堂练习(二) 课堂小结 核心语法结构 switch (表达式) { case 常量: 语句; break; ... default: 语句; } 关键执行要点 break:防止贯穿,跳出当前分支 default:处理表达式未匹配任何case的异常情况 唯一性:case后的常量值必须唯一且类型匹配 典型应用场景 菜单驱动:如控制台程序的功能选择界面 状态机:处理有限的离散状态跳转 等值判断:多分支的单一变量值比较 VS if-else 结构 switch优势:代码结构更清晰,常量分支跳转效率高 if-else优势:逻辑更灵活,适合范围判断或复杂条件 选择建议:等值判断用switch,范围/逻辑判断用if-else 课堂小结 课后任务 作业 1:计算器程序优化 完善课堂练习中的计算器程序,重点增加对除数为零的错误处理机制。当用户输入除数为零时,程序应捕获异常并提示用户重新输入,确保程序健壮性。 作业 2:月份天数计算程序 设计一个程序,接收用户输入的年份和月份作为参数,计算并输出该月的总天数。请特别注意处理闰年(Leap Year)的情况,确保2月份天数计算准确。 谢谢观看 THANKS $

资源预览图

第4章 第4节:switch语句(课件)-《C语言程序设计》(电子工业出版社)上好课
1
第4章 第4节:switch语句(课件)-《C语言程序设计》(电子工业出版社)上好课
2
第4章 第4节:switch语句(课件)-《C语言程序设计》(电子工业出版社)上好课
3
第4章 第4节:switch语句(课件)-《C语言程序设计》(电子工业出版社)上好课
4
第4章 第4节:switch语句(课件)-《C语言程序设计》(电子工业出版社)上好课
5
第4章 第4节:switch语句(课件)-《C语言程序设计》(电子工业出版社)上好课
6
所属专辑
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。