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

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

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

#include <stdio.h> void print_day(int day) { if(1==day) printf(“Monday\n”); else if(2==day) printf(“Tuesday\n”); // … else if(7==day) printf(“Sunday”); else printf(“error\n”); } int main() { print_day(2); return 0; }

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

switch(控制表达式) { case 常量表达式:语句序列 case 常量表达式:语句序列 default:语句序列 }

下面用 switch 语句解决上述问题,请看如下代码:

#include <stdio.h> void print_day(int day) { switch(day){ case 1: printf(“Monday\n”); break; case 2: printf(“Tuesday\n”); break; case 3: printf(“Wednesday\n”); break; case 4: printf(“Thursday\n”); break; case 5: printf(“Friday\n”); break; case 6: printf(“Saturday\n”); break; case 7: printf(“Sunday\n”); break; default: printf(“error\n”); break; } } int main() { print_day(2); return 0; }

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

使用switch语句要注意几点:

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

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

#include <stdio.h> void print_day(int day) { switch(day){ case 1: case 2: case 3: case 4: case 5: printf(“Weekday\n”); break; case 6: case 7: printf(“Weekend\n”); break; default: printf(“error\n”); break; } } int main() { print_day(2); return 0; }

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

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

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

声明:本站为非盈利性赞助网站,本站所有软件来自互联网,版权属原著所有,如有需要请购买正版。如有侵权,敬请来信联系我们,我们立即删除。