为了账号安全,请及时绑定邮箱和手机立即绑定

switch语句与if-else语句的比较?

第一次代码:(带有明显的if-else语句思维,运行错误那是肯定的)

#include<stdio.h>
int main()
{
  int score = 87 ;
  switch(score)
  {
	case(score>=90 && score <= 100):
	printf("等级A\n");
    break;
	case(score>=80 && score < 90):
	printf("等级B\n");
    break;
	case(score>=60 && score < 80):
	printf("等级C\n");
    break;
	default:
	printf("等级D\n");
    break;
  }

  return 0;
}

第二次代码:(干脆尝试直接用if-else语句实现)

#include<stdio.h>
int main()
{
  int score = 87 ;
	if(score>=90 && score <= 100)
	{
	printf("等级A\n");
	}
    else if(score>=80 && score < 90)
	{
	printf("等级B\n");
	}
	else if(score>=60 && score < 80)
	{
	printf("等级C\n");
	}
	else
	{
	  printf("等级D\n");
	}
  return 0;
}

第三次代码:(题目想要的结果)

#include <stdio.h>
int main() 
{
    int score = 87; //考试分数为87分 
    score /= 10;
    switch(score)
    {
        case 10:
        case 9:
            printf("等级A");
            break;
        case 8:
            printf("等级B");
            break;           
        case 7:
        case 6: 
            printf("等级C");
            break;
        default:
            printf("等级D");
            break;    
    }
    return 0;
}

第一次是错的,属于逻辑混乱,就不说了。

想讨论一下对于这道题目而言,switch语句和if-else语句都可以实现,那么请问有没有孰优孰劣的区别?

正在回答

1 回答

switch语句的case后必须是整型的常量表达式,你写逻辑表达式就不合法。 你只能写成第三次代码的形式。

switch和if-else本身没有什么优劣之分,选择哪种形式可视情况而定:

有时你想要判断的变量值只是有限的几种值,那用switch就很符合直觉,读代码也很容易理解。而且在case条目很多时编译器会有额外的优化,这样会比if-else一步一步的判断的计算量小。

而有时你可以预知你要判断的变量是某个值的几率更大,就可以先把这种情况写到第一个if中,那么在大多数情况下只判断这一个if就可以得到结果了,这样写成if-else形式就比写成switch更好。

3 回复 有任何疑惑可以回复我~
#1

sanjiaofeng 提问者

非常感谢!
2015-07-04 回复 有任何疑惑可以回复我~
#2

sanjiaofeng 提问者

非常感谢! 您这么一解释,我就明白了switch语句跟if-else语句在使用时其实还是有区别的。 对于这道题而言或许没啥影响,但如果是比较复杂的情况或代码,可能这种差别就显现出来了吧。 之前主要是没注意到case后面常量表达式这个重要的概念。糊里糊涂的就开写了。
2015-07-04 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
C语言入门
  • 参与学习       926207    人
  • 解答问题       20797    个

C语言入门视频教程,带你进入编程世界的必修课-C语言

进入课程

switch语句与if-else语句的比较?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信