请提供您希望我摘要的内容,我会根据您给出的文本直接生成一段100-200字的摘要。
- C语言switch语句经典例题详解
- 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对这个整数值进行判断:
对这个整数值进行判断:
default分支提示“无效分数”。
分支提示“无效分数”。
每个分支结束后都使用
break防止穿透,多个连续的低分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开始,这里手动指定
- ,使得数字1对应星期一。
- switch的表达式可以是枚举类型,其本质仍然是整型。
- 表达式必须是整型或字符型(如
int、
char、
short、
enum等),浮点型和字符串不能用于switch表达式。
- 等),浮点型和字符串不能用于switch表达式。
- 每个case后一般要有break,否则会产生“穿透”现象,除非你有意利用这种特性。
- default分支可选,但建议加上,用于处理所有未匹配的情况,增加程序的健壮性。
- 多个case可共用执行语句,只需将连续的case写在一起,在最后一条执行语句后面加break即可。
- case标签必须是常量表达式,不能是变量,例如不能写成
- ,其中x是变量。
MON=1,使得数字1对应星期一。
switch语句使用注意事项
case x:,其中x是变量。
通过以上例题,相信你已经掌握了switch语句的典型应用场景,动手敲一遍代码,并尝试修改条件、增加新功能,才能真正融会贯通。

