前言
C语言中的switch语句可以实现的代码,那么用if-else if语句同样也可以实现相同的代码,但是两种语句也有区别,接下来会先介绍两种语句的基本语法,然后具体分析它们的区别和联系。
一、switch语句的基本语法
switch(表达式){
case 值1:
语句体1;
break;
case 值2:
语句体2;
break;
...
default:
语句体n;
break;
}
以上是switch语句执行的流程图一共分3步去执行:
第一步:先得到表达式的结果(这个结果指的是什么接下来会在switch语句的细节里提到)。
第二步:把第一步得到的结果与case后面的值进行直接匹配(而不是依次对比),如果有结果与case后的值相同,电脑就会执行这个相应case的代码;如果没有与结果匹配的,电脑就会执行default后面的值。
第三步:电脑执行switch语句从与结果匹配的case后代码开始或从default开始,知道遇到第一个break才会停止执行。
#include "stdio.h"
int main()
{
int number;
printf("欢迎在线上办理预订车票的相关业务\n");
printf("请输入0~9中的一个数字:\n");
printf("1 预定车票\n2 车票改签\n3 退票\n4 退出业务\n");
scanf("%d",&number);
switch(number){
case 1:
printf("你可以选择预定以下的车票");
break;
case 2:
printf("你需要重新选择车票");
break;
case 3:
printf("请慎重考虑再决定是否退票");
break;
case 4: /*选择输入4~9都是退出业务办理*/
default:
printf("欢迎下次光临");
break;
}
return 0;
}
switch语句的细节
1.表达式的结果只能是字符 或 整数中的一种类型,否则在编译器中会被报错就无法执行switch语句了。
2.所有case后面的值都不能重复而且每个case后面只能跟一个值。
3.case后面只能是字符或整型的字面量(字面量就是常量,即case后面直接加 字符 或 整数)。
4.default可以写在switch语句的任何位置,因为只有表达式的结果没有直接匹配到有相应的case后才会执行default后面的代码。
5.case有穿透能力(化简switch语句的方法):但是“穿透”的方向只能是向下(当多个case后面或几个case和default的值虽然不同但是它们后面的代码相同时,可以省略前面case后面的代码,只是保留最后一个有相同代码的case后的或default那部分,也会使switch语句的执行达到相同的效果)。
6.case 值 和 default 加冒号(:)。
7.switch语句用一个花括号包起来{ },在其中遇到第一个break则switch语句结束,但如果除了该switch语句的{ }以外的代码那么也会同时被电脑执行。
#include "stdio.h"
int main()
{
int num;
printf("请输入一个数字:\n");
scanf("%d",&num);
switch(num){
case 1:
printf("你输入了1\n");
break;
case 2:
printf("你输入了2\n");
break;
default:
printf("无法识别出你输入的数字\n");
break;
}
printf("我会执行@——@!");
return 0;
}
二.if-else if的基本语法
大家可以看这篇文章:python与c语言的if语句联系与不同添加链接描述
三.两者的联系与不同
1.联系
switch语句可以实现的,也可以使用if-else if语句实现,两者使用场景有相同的.
2.不同
switch语句:是根据switch后面表达式得到的结果与case后面的值直接匹配然后执行相应代码,若没有case与之对应就执行default的代码,可以概括为精准寻找,但是它是针对有限的case。
/*switch语句实现四季的判断*/
#include "stdio.h"
int main()
{int num;
printf("请输入1~12的整数:\n");
scanf("%d",&num);
switch(num){
case 1: /*此处使用了case的穿透*/
case 2:
printf("这是冬季");
break;
case 3:
case 4:
case 5:
printf("这是春季");
break;
case 6:
case 7:
case 8:
printf("这是夏季");
break;
case 9:
case 10:
case 11:
printf("这是秋季");
break;
case 12:
printf("这是冬季");
break;
}
return 0;
}
if-else if语句:根据if之前给的条件按照从上到下的顺序依次匹配,没有符合的if和else if就会执行else的代码,可以概括为大范围寻找,但是if语句可以是对一个范围(可以多个)。
那么switch语句会比if-else if语句的执行效率更高(即相同意思的代码前者执行时间更少)
#include "stdio.h"
int main()
{
int num;
printf("请输入1~12的整数:\n");
scanf("%d",&num);
if(num==1||num==2||num==12){
printf("这是冬季");
}
else if(num==3||num==4||num==5){
printf("这是春季");
}
else if(num==6||num==7||num==8){
printf("这是夏季");
}
else if(num==9||num==10||num==11){
printf("这是秋季");
}
return 0;
}
总结
switch语句在表达式结果(10个左右)有限时使用效率比使用if语句高,建议使用switch语句(switch语句编译时间更短);但是其表达式结果变多了,建议使用if语句更方便代码呈现。
感谢大家读到这里,要是大家有什么意见可以在评论区里提出来,我会积极听取的,我们一起加油!最后我有句很喜欢名言分享给大家:再长的路,一步步也能走完;再短的路,不迈开双脚也无法到达。——汪国真