谈一谈if..else和switch的区别

今天偶然看了一下逻辑结构的一些常见模式,发现了对于同一个判断中,既可以使用if…else语句也可以使用switch语句,对比了一下发现两者之间还是有很明显的区别的
先附上一个简单的代码判断成绩分级:
首先是if…else:

#include
int main(void)
{
char score;
scanf("%c",&score);
switch(score){
case  'A':
printf("excellent\n");
break;
case 'B':
printf("good\n");
break;
case 'C' :
printf("pass");
break;
default:
printf("fail\n");
}
return 0;
}

对于switch语句来说,起实际是使用一个跳转表实现分支结构,不需要一次进行比较每一个所需要的条件。进行比较的次数为1.
但是对于if…else语句来说:

#include
int main(void)
{
int score;
scanf("%d",&score);
if(score<60)  printf("fail\n");
else if(score<80)  printf("pass");
else if(score<90)     printf("good\n");
else if(score<=100)   printf("excellent\n");
else printf("input error");
}

很明显对于if else语句,最少的比较次数为1,跟switch相比,在时间方面,switch语句的执行速度比if else要快,但是在程序执行占用的空间方面,switch语句需要一张跳转表来维护。这个跳转,表的本质是一个拥有标号的数组,需要额外的存储空间,if else语句的空间效率更好一点。switch是一个很典型的空间换时间的例子。但是switch只能判断是一个指定值的数据,而不能对一个区间中的数据进行判断。这时候选择if…else语句是一个很好的选择。
谈一谈if..else和switch的区别_第1张图片
对于这两种语句都是对程序结构进行控制的控制结构。如何合理使用一些控制结构对于我们的程序执行效率会有明显的提升,那么如何进行优化控制结构呢,我将会在下一篇中介绍一下我对优化控制结构的看法。

你可能感兴趣的:(谈一谈if..else和switch的区别)