请提供您希望我摘要的内容,我会根据您给出的文本直接生成一段100-200字的摘要。
  1. C语言switch语句经典例题详解
  2. switch语句使用注意事项


C语言switch语句经典例题详解


C语言中的

switch

语句是一种多分支选择结构,常用于根据一个整型表达式的值,从多个代码块中选择一个执行,相比于多层

if-else

switch

结构更清晰、执行效率更高,初学者在使用时容易忽略

break

的作用、

default

的用法以及各

case

之间的关系,下面通过几个典型例题,帮助大家彻底掌握

switch

语句。

语句。

根据成绩输出等级(基本用法)

输入一个整数分数(0~100),按以下规则输出等级:

90~100 → A

80~89 → B

70~79 → C

60~69 → D

0~59 → E

其他输入 → 提示“无效分数”

代码逻辑描述

程序首先提示用户输入一个成绩,并将其存储到变量

score

中,通过

score / 10

将分数映射到0~10之间的整数段,例如78分对应7,然后使用

switch

对这个整数值进行判断:

对这个整数值进行判断:

  • 若值为10或9(对应90~100分),输出等级A。
  • 值为8时输出B;值为7时输出C;值为6时输出D。
  • 值为5、4、3、2、1、0时(对应0~59分)均输出E。
  • 其余情况(如输入100以上或负数)通过
  • default

    分支提示“无效分数”。

    分支提示“无效分数”。

    每个分支结束后都使用

    break

    防止穿透,多个连续的低分case共用最后一条输出语句,这称为“case穿透”的有意利用。

  • 防止穿透,多个连续的低分case共用最后一条输出语句,这称为“case穿透”的有意利用。
  • 解析

    • 利用整数除法将连续分数段映射到离散的case值,简化判断逻辑。
    • 多个case可以共用执行语句(如case 5到case 0),此时不需要在每个case后都写break,只需在最后一条语句后加break。
    • default分支处理所有未列出的情况。
    • 每个case后不要忘记break,否则会继续执行下一个case导致逻辑错误。

    简单计算器(使用char型表达式)

    输入两个整数和一个运算符(+、-、*、/),输出运算结果,注意除法分母不能为0。

    代码逻辑描述

    程序首先提示用户输入类似“3 + 5”的表达式,通过

    scanf

    依次读取两个整数和一个字符运算符,随后

    switch

    对运算符字符进行判断:

    对运算符字符进行判断:

    • 若为加号,输出两数相加的结果。
    • 若为减号,输出相减结果。
    • 若为乘号,输出相乘结果。
    • 若为除号,先判断除数是否为0:如果为0则输出错误信息,否则将整数转换为浮点数后相除,并保留两位小数输出。
    • 对于其他字符,在default分支提示“不支持的运算符”。

      每个case后都有break,避免穿透。

    解析

    • switch的表达式可以是字符(char类型),因为字符在内存中对应整型ASCII码,完全兼容。
    • 除法时注意类型转换,避免整数除法产生截断(例如3/2得到1而非1.5)。
    • 每个case内部可以包含复杂逻辑(如条件判断),但通常保持简洁。
    • 必须要有break,否则如果用户输入加号,执行完加法后还会继续执行后续减法的分支。

    月份天数判断(巧妙利用case穿透)

    输入一个月份(1~12)和一个年份,输出该月有多少天,需要考虑闰年情况(2月)。

    代码逻辑描述

    程序提示用户输入年份和月份,然后使用

    switch

    对月份进行判断:

    对月份进行判断:

    • 对于1、3、5、7、8、10、12月份,天数固定为31天。
    • 对于4、6、9、11月份,天数为30天。
    • 对于2月份,根据闰年规则判断:若年份能被4整除但不能被100整除,或者能被400整除,则该年为闰年,2月有29天,否则为28天。
    • 如果输入的月份不在1~12之间,则在default分支输出“无效月份”并提前结束程序。

      每个case后的break确保不穿透到后续分支,而相同天数的月份通过连续的case共享同一个赋值语句。

    解析

    • 利用case穿透将相同天数的月份合并,减少重复代码。
    • 2月单独处理,需要结合闰年条件进行判断。
    • default分支中使用提前退出语句,避免后续打印错误信息。

    枚举类型与switch(进阶)

    定义一周七天的枚举,输入数字1~7,输出对应的英文星期名。

    代码逻辑描述

    首先定义一个枚举类型

    Weekday

    ,手动指定MON=1,后续枚举常量TUE、WED等依次递增,主函数中提示用户输入一个数字,将其转换为枚举类型

    Weekday

    的变量,随后

    switch

    对该枚举变量进行判断:

    对该枚举变量进行判断:

    • 若为MON,输出"Monday"。
    • 若为TUE,输出"Tuesday"。
    • 依此类推,直到SUN输出"Sunday"。
    • 若输入数字超出1~7范围,default分支提示“无效输入”。

      每个case后均用break结束,避免穿透。

    解析

    • 使用枚举可以让case标签更直观(例如MON

      比数字1更有意义)。

    • 比数字1更有意义)。
    • 注意枚举常量的值默认从0开始,这里手动指定
    • MON=1

      ,使得数字1对应星期一。

    • ,使得数字1对应星期一。
    • switch的表达式可以是枚举类型,其本质仍然是整型。

    • switch语句使用注意事项

      1. 表达式必须是整型或字符型(如int

        char

        short

        enum

        等),浮点型和字符串不能用于switch表达式。

      2. 等),浮点型和字符串不能用于switch表达式。
      3. 每个case后一般要有break,否则会产生“穿透”现象,除非你有意利用这种特性。
      4. default分支可选,但建议加上,用于处理所有未匹配的情况,增加程序的健壮性。
      5. 多个case可共用执行语句,只需将连续的case写在一起,在最后一条执行语句后面加break即可。
      6. case标签必须是常量表达式,不能是变量,例如不能写成
      7. case x:

        ,其中x是变量。

      8. ,其中x是变量。

      9. 通过以上例题,相信你已经掌握了switch语句的典型应用场景,动手敲一遍代码,并尝试修改条件、增加新功能,才能真正融会贯通。

        include-switch游戏下载社区