第二种分支语句:switch语句

我们在前面已经说过了分支结构中的if语句,今天我们再来介绍C语言中的最后一种分支语句:switch。这个switch和前面的if将有一些不同之处,请大家一定要注意噢。

switch

这是一种特殊形式的if……else结构,用于判断条件有多个结果的情况,将之前的else if变得更简单、易用、可读性更好的形式。

switch(expression)
{
    case value1:statement
    case value2:statement
    default:statement
}

上面代码中,根据switch后面括号中的表达式expression不同的值,执行相应的case分支,而value1和value2代表的就是整型常量表达式,如果switch后面括号中的表达式结果就不是case后面的整型常量表达式,则执行default分支。

也就是说,如果switch()里面的表达式结果可以和case后面的值相对应,则从那个case一一往下执行,直到default,然后退出。

举个例子:我们用手机充电器一般更喜欢用手机原本自带的充电器,因为用的可以和手机插口对应上,只要用上那个原本的充电器便一直使用,直到找不到了,然后使用替换的充电器,所以default在这里面就是一个替代品。case和default只会执行其中一种。

划重点了!!!

switch后的expression必须是整型表达式,如2+1,5-2,'b'-'a','9'-'7',

case后的值,必须是整型常量表达式,如5,4

这里可能会有疑问,为什么英文也可以是整型表达式。而且数字也加了单引号,因为这里用到了字符,给一个字母或数字加上单引号(‘’)之后,它便是一个字符,而字符在计算机中的数据是以ASCII编码存储的,如果有需要,可以移步我们第一节的内容。

https://blog.csdn.net/zjajaaa/article/details/133952058

所以当字符之间运算时,它便是ASCII编码之间的运算,即字符之间的运算表达式也是整型表达式。

if语句和switch语句的对比

练习:输入任意一个整数值,计算除3之后的余数。

如果使用if语句完成,如下:

#include <stdio.h>
int main()
{
    int n = 0;
    scanf("%d",&n);
    if(n%3 == 0)
        printf("整除,余数为0\n");
    else if(n%3 == 1)
        printf("余数是1\n");
    else
        printf("余数是2\n");
    return 0;
}

如果使用switch语句改写,可以是这样子:

#include <stdio.h>
int main()
{
    int n = 0;
    scanf("%d",&n);
    switch(n%3)
    {
    case 0:
        printf("整除,余数为0\n");
        break;
    case 1:
        printf("余数是1\n");
        break;
    case 2:
        printf("余数是2\n");
        break;                        
    }
    return 0;
}

注意:

case和后边的数字之间必须有空格,例如:case 0

每一个case语句中的代码执行完成后,需要加上break,才能跳出这个switch

 上面代码中,如果n=3,则3%3,得0,然后输出case 0下的“整除,余数为0”,然后由于break的原因,使得当前代码提前结束,否则便会执行到最后。

我们可以再来详细介绍一下,如果没有break,会发生什么呢?

switch语句中的break

例如:

#include <stdio.h>
int main()
{
    int n = 0;
    scanf("%d",&n);
    switch(n%3)
    {
    case 0:
        printf("整除,余数为0\n");
    case 1:
        printf("余数是1\n");
    case 2:
        printf("余数是2\n");                      
    }
    return 0;
}

结果:

3

整除,余数为0

余数是1

余数是2

 当我们输入3之后,3%3结果为0,然后先执行第一个case,然后逐个开始往下执行,直到结束。所以由此可见switch语句也有分支效果,当我们想要在switch执行过程中退出该语句,就需要在想要停止的case后面加一个break,就如同上面的两串代码。

所以switch语句中break是非常重要的。能实现真正的分支效果。

难道每个switch都要用到break吗?这就要根据实际情况来看了。

例如:

练习:

输⼊⼀个1~7的数字,打印对应的星期⼏

例如:

输⼊:1 输出:星期⼀

输⼊:2 输出:星期⼆

输⼊:3 输出:星期三

输⼊:4 输出:星期四

输⼊:5 输出:星期五

输⼊:6 输出:星期六

输⼊:7 输出:星期天

#include <stdio.h>
int main()
{
    int day = 0;
    scanf("%d",&day);
    switch(day)
    {
    case 1:
        printf("星期一\n");
        break;
    case 2:
        printf("星期二\n");
        break;
    case 3:
        printf("星期三\n");
        break;
    case 4:
        printf("星期四\n");
        break;   
    case 5:
        printf("星期五\n");
        break;   
    case 6:
        printf("星期六\n");
        break;   
    case 7:
        printf("星期天\n");
        break;   
    }
    return 0;
}

 如果需求发生变化,变为:

输⼊1-5,输出的是“⼯作⽇”;

输⼊6-7,输出“休息⽇”

参考代码如下:

#include <stdio.h>
int main()
{
    int day = 0;
    scanf("%d",&day);
    switch(day)
    {
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
        printf("工作日\n");
        break;
    case 6:
    case 7:
        printf("休息日\n");
        break;
    }
    return 0;
}

 这时候,就有人要问了,如果输入8呢,输入9呢?

这时候,我们就要用到我们刚刚提到的替代品default了。

我们将default加入上面的代码,我们可以这样进行:

#include <stdio.h>
int main()
{
    int day = 0;
    scanf("%d",&day);
    switch(day)
    {
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
        printf("工作日\n");
        break;
    case 6:
    case 7:
        printf("休息日\n");
        break;
    default:
        printf("输入错误\n");
        break;
    }
    return 0;
}

如果我们输入的不是1~7,便会执行default语句,然后结束。

最后我们可以看到我们上面的代码都是整整齐齐的从case 1 到case 7 ,再到default,可能有人又问了,这个代码是对这个格式有要求吗?

其实是没有的,case 5 也可以在case 1上面,default也可以在case 1上面,不会影响代码的运行过程。上面这样写,是为了代码的美观和方便自己阅读。毕竟谁都不希望自己写的代码乱七八糟的……

今天的内容到这里就结束了,如果各位有什么疑问,可以在评论区留言或者私信噢。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值