前言

大家好,我是泺喜科教小鱼老师。大家在用多层if else if做多等值判断时,代码会越写越长、可读性极差。本节课我们学习switch 多分支语句,专门解决「单一变量匹配固定常量」的场景,代码更简洁、逻辑更清晰。本文适配小学 5-6 年级编程课堂,完整还原 90-120 分钟授课流程,包含课前回顾、语法精讲、4 大实战项目、课堂练习题、课后挑战,学生可自学巩固。

一、课程基础信息

  1. 核心学习目标
    1. 熟练掌握 switch 完整语法格式,分清各组成部分作用
    2. 掌握 switch 表达式支持的数据类型(int、char 字符)
    3. 吃透 break 关键字,理解 case 穿透现象与规避方法
    4. 认识字符 char 类型,学会字符常量匹配
    5. 能独立完成四则运算、成绩分级、月份天数、星期判断、一年第天数 5 个实战项目
  2. 前置知识:if 多分支、常量 const、闰年判断、基础四则运算

二、课前重点回顾

正式讲 switch 前,先用 4 道复习题巩固上节课内容,同时引出本节课字符知识点:

  1. 多分支 if-else if 标准语法是什么?
  2. 输入三个数字,如何用分支求出最大值?
  3. C++ 定义常量的关键字是?(答案:const
  4. 闰年完整判断条件?(能被 4 整除且不能被 100 整除,或能被 400 整除)

课堂实操:复盘旧项目【四则运算】

先用 if 多分支完成简易计算器,运行后让学生发现痛点:运算符判断分支过多,代码臃肿。同时引入新数据类型:char 字符,单个字母、+ - * /都属于字符常量,为 switch 字符匹配做铺垫。

三、新知探索:switch 语句核心讲解

3.1 为什么有 if,还要学 switch?

  • if 适用:范围判断、多条件组合(分数区间、大小比较)
  • switch 适用:单一变量 == 固定常量(运算符、月份、星期、等级)优势:分支越多,代码越简洁,逻辑分层一目了然,适合菜单类、选项类程序。

3.2 switch 标准语法模板

switch(表达式)
{
    case 常量1:
        执行代码;
        break; // 跳出switch,防止穿透
    case 常量2:
        执行代码;
        break;
    // 可写多个case
    default: // 所有case都不匹配时执行(可选,建议必写)
        兜底代码;
        break;
}

3.3 语法重难点拆解

  1. switch (表达式) 限制表达式只能是整型 int、字符 char,不能是小数、区间、变量;
  2. case 后面必须是常量不能写变量、区间(如case xcase 60~90均报错);多个 case 可共用同一组代码;
  3. break 是重中之重缺少 break 会出现case 穿透:匹配对应 case 后,会继续执行下方所有 case 代码,造成逻辑错误;仅有意合并分支时可省略;
  4. default 默认分支类似 if 最后的 else,处理输入非法值,放在任意位置都生效,建议写在最后。

3.4 实战 1:优化【四则运算计算器】

用 switch+char 字符改写之前 if 版本计算器,直观感受代码简化效果。

#include <iostream>
using namespace std;
int main()
{
    int a,b;
    char op;
    cout<<"输入数字1、运算符、数字2:";
    cin>>a>>op>>b;
    switch(op)
    {
        case '+':
            cout<<a+b;
            break;
        case '-':
            cout<<a-b;
            break;
        case '*':
            cout<<a*b;
            break;
        case '/':
            if(b==0) cout<<"除数不能为0";
            else cout<<a/b;
            break;
        default:
            cout<<"运算符输入错误";
    }
    return 0;
}

讲解要点:

  • char 类型存储加减乘除符号,case 直接匹配字符常量;
  • 每个运算符分支后必须加 break;
  • default 拦截非法符号。

3.5 两大综合项目实战

项目 1:成绩等级划分

需求:输入 0-100 分数,90-100 输出 A,80-89 输出 B,70-79 输出 C,60-69 输出 D,低于 60 输出 E。思路:分数除以 10 取整,用 switch 匹配十位数字,利用 case 穿透合并相同等级。

#include <iostream>
using namespace std;
int main()
{
    int score;
    cin>>score;
    switch(score/10)
    {
        case 10:
        case 9:
            cout<<"等级A";
            break;
        case 8:
            cout<<"等级B";
            break;
        case 7:
            cout<<"等级C";
            break;
        case 6:
            cout<<"等级D";
            break;
        default:
            cout<<"等级E";
    }
    return 0;
}
项目 2:输入年月,输出当月天数(本课重点强化)

需求:1、3、5、7、8、10、12 月 31 天;4、6、9、11 月 30 天;2 月分闰年 29、平年 28。核心:多 case 共用代码,switch 嵌套 if 判断闰年。

#include <iostream>
using namespace std;
int main()
{
    int year,month,day;
    cin>>year>>month;
    switch(month)
    {
        case 1:case 3:case 5:case 7:case 8:case 10:case 12:
            day=31;
            break;
        case 4:case 6:case 9:case 11:
            day=30;
            break;
        case 2:
            // 闰年判断
            if((year%4==0&&year%100!=0)||year%400==0)
                day=29;
            else day=28;
            break;
        default:
            cout<<"月份非法";
            return 0;
    }
    cout<<"当月天数:"<<day;
    return 0;
}

四、课堂强化练习

学完案例后分层练习,巩固语法、排查易错点:

练习 1:读程序写运行结果

给出 3 段缺少 break、多 case 合并、无 default 的 switch 代码,让学生手动推演输出,理解穿透现象。示例错题:

int x=2;
switch(x)
{
    case 1:cout<<"一";
    case 2:cout<<"二";
    case 3:cout<<"三";
    break;
}

答案:二三(无 break 发生穿透)

练习 2:综合编程题【今天星期几】

题目:输入数字 1-7,分别输出周一到周日;输入其他数字提示输入错误。参考核心代码:

int week;
cin>>week;
switch(week)
{
    case 1:cout<<"星期一";break;
    case 2:cout<<"星期二";break;
    case 3:cout<<"星期三";break;
    case 4:cout<<"星期四";break;
    case 5:cout<<"星期五";break;
    case 6:cout<<"星期六";break;
    case 7:cout<<"星期日";break;
    default:cout<<"星期数字只能1-7";
}

练习 3:选择题专项

典型考题:switch 表达式不能使用以下哪种类型?A.int B.char C.double 答案:C

五、课堂知识总结

  1. 核心概念梳理
    • switch:等值多分支语句,替代多层 if-else if;
    • break:终止当前 case,防止穿透,绝大多数场景必须写;
    • char 字符:单个符号、字母,可作为 switch 匹配值;
    • default:兜底分支,处理非法输入。
  2. 适用场景区分
    • switch:固定数值 / 字符匹配(月份、星期、运算符、菜单)
    • if:区间判断、多条件组合(分数、大小比较)
  3. 课堂互动:让学生自主分享本节课学会的知识点,朗读 switch、case、break、char 等专业单词,理解词义。

六、课后挑战作业

挑战项目:输入年月日,计算这是一年的第几天

解题思路:

  1. switch 匹配月份,累加前面所有月份总天数;
  2. 判断闰年,2 月后总天数 + 1;
  3. 最后加上当月日期。核心代码片段:

int y,m,d,sum=0;
cin>>y>>m>>d;
switch(m)
{
    case 12:sum+=30;
    case 11:sum+=31;
    case 10:sum+=30;
    case 9:sum+=31;
    case 8:sum+=31;
    case 7:sum+=30;
    case 6:sum+=31;
    case 5:sum+=30;
    case 4:sum+=31;
    case 3:sum+=28;
    case 2:sum+=31;
    case 1:sum+=0;break;
}
// 闰年修正
if(m>2&&((y%4==0&&y%100!=0)||y%400==0)) sum++;
sum+=d;
cout<<"本年第"<<sum<<"天";

拓展思考:本题刻意利用 case 穿透简化累加,体会穿透的合理使用场景。

七、本节课易错点汇总(学生必看)

  1. 漏写 break,引发 case 穿透,输出多余内容;
  2. case 后写变量、小数、区间,编译报错;
  3. switch 表达式使用 float/double 浮点类型;
  4. 忘记写 default,非法输入无提示;
  5. 字符匹配时漏写单引号' '
  6. 月份天数、闰年逻辑混淆。

八、写在最后

switch 是信奥基础分支必考知识点,等值判断场景优先使用。本节课由浅入深,从计算器到日期计算,贴合小学生认知逻辑,课堂练习 + 课后挑战双重巩固。初学建议先规范书写每个 case 的 break,熟练后再灵活运用 case 穿透简化代码。

更多推荐