switch语句
1.一般形式
switch(表达式){
case 常量1:语句序列1;break;
case 常量2:语句序列2;break;
......
case 常量n:语句序列n;break;
default:语句序列n+1;
}
计算表达式的值,并取整,那表达式取证的值与常量n进行等量判断,如果两个值相等则执行语句序列n,并跳出switch结构(因为语句序列n后面有break语句,break语句:各语句序列最后的break语句,用于跳出switch语句),default(可写可不写)相当于if语句里的else语句,若表达式的值与所有常量均不相等,则执行语句序列n+1,因为default是switch语句的最后一个部分所以后面不用加break了。
实例
输入一个数字输出对应的周几
#include "stdio.h"
int main() {
int day;
scanf("%d", &day);
switch (day) {
case 1:
printf("周一!");
break;
case 2:
printf("周二!");
break;
case 3:
printf("周三!");
break;
case 4:
printf("周四!");
break;
case 5:
printf("周五!");
break;
case 6:
printf("周六!");
break;
case 7:
printf("周七!");
break;
default:
printf("输入有效数字!");
}
return 0;
}
执行结果:
如果不加break语句的执行结果:
2.省略式
case 常量1:语句序列1;break;
case 常量2:语句序列2;break;
case 常量3:语句序列3;break;
case 常量4:语句序列4;break;
如果语句序列1,语句序列2,语句序列3,语句序列4相等的话可以写成:
case 常量1:
case 常量2:
case 常量3:
case 常量4:语句序列4;break;
实例
输入月份,输出该月的天数
代码:
#include "stdio.h"
int main() {
int month, day;
printf("请输入月份:");
scanf("%d", &month);
switch (month) {
case 2:
day = 29;
break;
case 4:
case 6:
case 9:
case 11:
day = 30;
break;
default:
day = 31;
}
printf("第%d月有%d天", month, day);
return 0;
}
执行结果:
易错点:
1.case后面只能写成常量而不是范围也不能是小数不能包含变量,例如2~4,a~b,3.14,x+1等
2.case后面容易漏写break语句,如果没有加break语句,它就会把以下所有语句序列都执行一遍直到执行到break语句或default语句
三、if与switch语句混用
实例
输入年份和月份,输出该月的天数
代码:
#include "stdio.h"
int main() {
int year, month, day;
printf("请输入月份:");
scanf("%d%d", &year, &month);
switch (month) {
case 2:
day = 28;
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
day = day + 1;
}
break;
case 4:
case 6:
case 9:
case 11:
day = 30;
break;
default:
day = 31;
}
printf("这个月有%d天", day);
return 0;
}
执行结果:
四、总结
if语句的条件表达式比较直接,switch语句的表达式需要构造。switch的效率比if多,一般判断条件较多的时候用switch比如:分数,月份。较少的时候用if-else,switch只计算一次,if-else每一个条件都要计算。