C语言中的switch语句是一种多分支选择结构,用于根据整型、字符型或枚举型表达式的值,跳转到对应的case分支执行,常替代冗长的if-else链,其基本语法为:switch(表达式) { case 常量1: 语句; break; case 常量2: 语句; break; ... default: 语句; },每个case后必须有break跳出,否则会发生“穿透”(依次执行后续语句),default可省略,用于处理所有不匹配的情况,例题:输入数字1~7,输出对应星期(如1为Monday);输入成绩等级'A'~'E',输出评语,注意switch不支持浮点型和字符串,且case后必须是常量表达式,合理使用switch可使代码清晰、高效。
,每个case后必须有break跳出,否则会发生“穿透”(依次执行后续语句),default可省略,用于处理所有不匹配的情况,例题:输入数字1~7,输出对应星期(如1为Monday);输入成绩等级'A'~'E',输出评语,注意switch不支持浮点型和字符串,且case后必须是常量表达式,合理使用switch可使代码清晰、高效。在C语言中,
switch语句是一种多分支选择结构,它能够根据某个表达式的值,将程序的执行流程跳转到与之匹配的
case标签处,相比于冗长的
if-else if链条,
switch在处理多个固定整型或字符型常量时更加清晰、高效,本文将通过几个典型例题,带你全面掌握
switch的用法与细节。
的用法与细节。
switch语句的基本语法
switch语句的结构如下:首先是一个整型表达式(或可隐式转换为整型的类型,比如
char或
enum,但不支持浮点数和字符串),其后用花括号包裹多个
case分支,每个
case后面必须是编译时就能确定的常量表达式,且不能重复,当表达式的值与某个
case的常量相等时,程序跳转到该
case后的语句执行,如果使用
break关键字,执行完该分支后就会跳出整个
switch结构;如果没有
break,会发生“贯穿”(fall-through),即继续执行下一个
case的代码,直到遇到
break或
switch结束。
default分支是可选的,当所有
case都不匹配时执行,习惯上放在最后,但位置其实可以任意。
都不匹配时执行,习惯上放在最后,但位置其实可以任意。
例题精讲
例题1:根据考试成绩输出等级
要求输入0~100的整数成绩,按规则输出等级:90~100为优秀(A),80~89为良好(B),70~79为中等(C),60~69为及格(D),0~59为不及格(E)。
解法思路:利用整除10的思想将分数区间压缩到0~10之间,分数85除以10得到8,然后通过
switch匹配整数8即可,实现时先检查输入有效性,若成绩在0~100之间,则计算
grade = score / 10;然后使用
switch(grade),其中
case 10和
case 9合并为同一个输出“A(优秀)”;
case 8输出“B(良好)”;
case 7输出“C(中等)”;
case 6输出“D(及格)”;其余情况(即0~5)全部由
default处理,输出“E(不及格)”,每个分支末尾都加上
break,防止贯穿。
,防止贯穿。
运行示例:
请输入成绩(0-100):85等级:B(良好)
要点:
case 10和
case 9共用同一个代码块,这正是“贯穿”的合理利用,用
default处理0~59的情况,避免了逐个列出0到5的所有
case,使代码简洁高效。
,使代码简洁高效。
例题2:根据月份判断天数(不考虑闰年)
输入一个月份(1~12),输出该月的天数,其中2月按28天计算。
解法思路:将月份分为三类:31天的月份(1、3、5、7、8、10、12)、30天的月份(4、6、9、11)以及2月,使用
switch(month),将31天的多个
case合并,输出“某月有31天”;30天的合并输出“某月有30天”;2月单独输出“2月有28天”,如果输入不在1~12之间,由
default提示“输入的月份无效”。
提示“输入的月份无效”。
运行示例:
请输入月份(1-12):55月有31天
要点:再次运用多个
case合并的技巧,使代码简洁易读,注意月份输入无效时的容错处理。
合并的技巧,使代码简洁易读,注意月份输入无效时的容错处理。
例题3:简易计算器(菜单选择)
输入两个整数和一个运算符(+、-、*、/),输出运算结果;若输入无效运算符,给出提示;若除法除数为0,则报错。
解法思路:先定义两个
double类型的变量存放操作数,一个
char变量存放运算符,通过
switch(op)匹配四种运算符,在加法分支中直接计算并输出;减法、乘法类似;除法分支需要额外判断除数是否为0,若为0则输出错误信息,否则计算结果,最后用
default处理无效运算符的情况,所有分支均以
break结束,避免贯穿。
结束,避免贯穿。
运行示例:
请输入表达式(如 3 + 5):10 / 310.00 / 3.00 = 3.33
要点:
switch的表达式可以是
char类型,因为字符在C语言中本质上是整型,在除法分支中,必须额外处理除数为0的异常,体现了编程中的健壮性思想。
类型,因为字符在C语言中本质上是整型,在除法分支中,必须额外处理除数为0的异常,体现了编程中的健壮性思想。
switch使用注意事项
case后必须是常量表达式:不能是变量,例如 case x:(x是变量)是错误的。
(x是变量)是错误的。 不要忘记break:漏写 break会导致“贯穿”,除非你有意利用这一特性(如例题1和例题2中的合并写法)。
会导致“贯穿”,除非你有意利用这一特性(如例题1和例题2中的合并写法)。 default可选:当所有 case都不匹配时,如果没有
default,则
switch什么都不执行。
什么都不执行。 case标签顺序不重要:但为了提高可读性,建议按逻辑顺序排列(如数字从小到大,或按功能分组)。 switch只能用于等值判断:它不能像 if-else那样进行范围比较,需要借助除法、映射等技巧将范围转化为离散值(如例题1)。
那样进行范围比较,需要借助除法、映射等技巧将范围转化为离散值(如例题1)。 嵌套switch:可以在一个 case中再嵌套一个
switch,但应避免过度嵌套,以免影响代码可读性。
,但应避免过度嵌套,以免影响代码可读性。 switch是C语言中重要的控制语句,特别适合处理多个离散值的分支逻辑,通过以上三个典型例题,你应该掌握了:
是C语言中重要的控制语句,特别适合处理多个离散值的分支逻辑,通过以上三个典型例题,你应该掌握了:
基本的 switch结构
结构 利用“贯穿”合并多个 case处理默认情况的 default结合整数除法进行范围映射 尝试自己动手编写类似代码,并探索更多应用场景(如字符菜单、枚举状态机等),你就能熟练掌握
switch的精髓。
的精髓。
C语言中switch语句用法详解及例题
- THE END -

