老师说,C语言中的switch和if语句是等价的,能举例子说说吗

更新时间:02-10 教程 由 心蛊 分享

谢邀。

严格来说,C语言中的switch语句和if语句并不总是完全等价,使用switch语句实际上是有一定限制的。

下文将举例子解释

相信题主已经对if/else以及布尔代数有了比较深入的认识,可以对现实世界中的复杂问题,分情况处理了。事实上,在C语言中,还有一种分支语句,就是switch语句,在介绍它之前,先来考虑这个问题:

输入1-7七个数,程序要对应着分别打印出Monday-Sunday(星期一到星期天)。

这样的问题,用if/else语句非常容易解决,请看如下代码:

以上代码很好的解决了问题,不过使用C语言中的switch语句也是能够非常简单的解决问题,switch语句可以产生具有多个分支的控制流程,它的格式是:

知道了C语言switch语句的格式后,使用它重写上述代码就简单了,请看:

上面的例子我们传给print_day的参数是2,所以从“情况2”(case2)处开始执行,然后打印“Tuesday”,接着break。break是C语言中的关键字,它的作用是挑出整个switch语句块。C语言规定各case的常量表达式必须互不相同,各case均不等于常量表达式,则进入default分支。

使用switch语句要注意几点

case后面跟的必须是常量表达式,因为这个值必须在编译时计算出来。case后面跟的常量表达式的值必须是整型,因为浮点型是不能精确比较相等不相等的,整型或字符型则可以,这是由不同类型数据的存储方式决定的。进入case后如果没有遇到break语句就会一直往下执行,后面其它case或default下面的语句也会被执行到,直到遇到break,或者执行到整个switch语句块的末尾。

通常每个case后面都要加上break语句,但有时候故意不加break来利用这个特性,例如:

这样一来,输入1-5都会输出“Weekday”(工作日),输入6、7则会输出“Weekend”(周末)。

switch语句不是必不可缺的,显然可以用一组if..elseif…elseif…else代替,但是一方面用switch语句会使代码更清晰,另一方面,有时候编译器会对switch语句进行整体优化,使它比等价的if/else语句所生成的目标代码效率更高。

另外,由于switch语句的case后要求是常数,限制了其使用范围,所以要用其替换

if...else

语句,需要保证if的条件是常数表达式。如果条件表达式很难写成常数表达式,switch语句就很难使用了。

不过工具是死的,人是活的,switch语句和if语句各有优缺点,只要掌握了,我们应该总是能够根据实际条件灵活的写代码的。

欢迎在评论区一起讨论,质疑。文章都是手打原创,每天最浅显的介绍C语言、linux等嵌入式开发,喜欢我的文章就关注一波吧,可以看到最新更新和之前的文章哦。

声明:关于《老师说,C语言中的switch和if语句是等价的,能举例子说说吗》以上内容仅供参考,若您的权利被侵害,请联系13825271@qq.com
本文网址:http://www.25820.com/tutorial/14_2276965.html