6

c语言入门8,它是if/else语句的亲戚,switch语句介绍

 4 years ago
source link: https://blog.popkx.com/introduction-to-c-language-8-it-is-a-relative-of-if-else-statement-switch-statement-introduction/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

c语言入门8,它是if/else语句的亲戚,switch语句介绍

发表于 2018-11-08 08:11:16   |   已被 访问: 365 次   |   分类于:   C语言   |   暂无评论

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

bffa80c18f584fde9b86ca73a4def62d.png

输入 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;
}
669080af98fe24e1bbc69325279d9f98.png

以上代码很好的解决了问题,不过用 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 分支。

bda361bd68efcb1c6851ecdc4867399a.png

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

a6cd1ef4134fbe94e6d5d027c84c5a39.png

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

阅读更多:   C语言


Recommend

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK