c语言入门第8节,switch语句介绍

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

image

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

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

#include 
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;
}
image

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

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

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

#include 

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 分支。


image

使用switch语句要注意几点:

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

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

#include 

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”(周末)。

image

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

你可能感兴趣的:(c语言入门第8节,switch语句介绍)