☀️光天化日学C语言☀️(28)- switch case 语句 | 小孩才做选择,成年人全都要!

🙉饭不食,水不饮,题必须刷🙉

C语言免费动漫教程,和我一起打卡!
🌞《光天化日学C语言》🌞

LeetCode 太难?先看简单题!
🧡《C语言入门100例》🧡

数据结构难?不存在的!
🌳《数据结构入门》🌳

LeetCode 太简单?算法学起来!
🌌《夜深人静写算法》🌌

一、前言

  本文作者是从 2007 年开始学 C语言 的,不久又接触了C++,基本就是 C/C++ 技术栈写了 14 年的样子,不算精通,但也算差强人意。著有《夜深人静写算法》系列,且承诺会持续更新,直到所有算法都学完。主要专攻 高中 OI 、大学 ACM、 职场 LeetCode 的全领域算法。由于文章中采用 C/C++ 的语法,于是就有不少读者朋友反馈语言层面就被劝退了,更何况是算法。
  于是,2021 年 06 月 12 日,《光天化日学C语言》 应运而生。这个系列文章主要服务于高中生、大学生以及职场上想入坑C语言的志同道合之人,希望能给祖国引入更多编程方面的人才,并且让自己的青春不留遗憾!
  这一章的主要内容是 一种分支选择,switch case 语句。

二、人物简介

  • 第一位登场的就是今后会一直教我们C语言的老师 —— 光天。
  • 第二位登场的则是今后会和大家一起学习C语言的没什么资质的小白程序猿 —— 化日。

三、分支语句

【例题1】根据输入的整型a,如果范围在 [ 1 , 6 ] [1, 6] [1,6],则输出它的英文形式(OneTwo、…),否则输出 Other

  • 可以利用 if else 语句轻松写出来,代码实现如下:
#include <stdio.h>

int main() {
    int a;
    scanf("%d", &a);
    if(a == 1) {
        printf("One\n"); 
    }else if(a == 2) {
        printf("Two\n"); 
    }else if(a == 3) {
        printf("Three\n"); 
    }else if(a == 4) {
        printf("Four\n"); 
    }else if(a == 5) {
        printf("Five\n"); 
    }else if(a == 6) {
        printf("Six\n"); 
    }else {
        printf("Other\n"); 
    }
    return 0;
}

四、switch case 语句

1、switch case 引例

  • 对于这种情况,我们可以利用 switch 语句来替代,实现如下:
#include <stdio.h>
int main() {
    int a;
    scanf("%d", &a);
    switch(a){
        case 1: 
            printf("One\n"); 
            break;
        case 2: 
            printf("Two\n"); 
            break;
        case 3: 
            printf("Three\n"); 
            break;
        case 4: 
            printf("Four\n"); 
            break;
        case 5: 
            printf("Five\n"); 
            break;
        case 6: 
            printf("Six\n"); 
            break;
        default:
            printf("Other\n");
            break;
    }
    return 0;
}

  • 修改后的代码实现如下:
#include <stdio.h>
int main() {
    int a;
    scanf("%d", &a);
    switch(a){
        case 1:  printf("One\n");   break;
        case 2:  printf("Two\n");   break;
        case 3:  printf("Three\n"); break;
        case 4:  printf("Four\n");  break;
        case 5:  printf("Five\n");  break;
        case 6:  printf("Six\n");   break;
        default: printf("Other\n"); break;
    }
    return 0;
}
  • 当然,这就是 代码规范 范畴的问题了,看团队里面怎么执行了,我这里就不多加讨论了。如果是个人代码,不打算给别人看,那当然怎么舒服怎么来。
  • 上面的代码,在进行相应的输入后,运行结果如下:
4↙
Four

2、switch case 用法

  • switch 是另外一种选择结构的语句,用来代替简单的、拥有多个分枝的 if else 语句,基本格式如下:
switch(表达式){
    case 整数1: 语句1;
    case 整数2: 语句2;
          ...
    case 整数n: 语句n;
    default: 语句n + 1;
}

对于 switch case 语句的执行过程,如下:
  1)首先,计算 表达式 的值,假设为 x x x
  2)然后,从第一个 case 开始,比较 x x x整数1 的值,如果相等,就执行冒号后面的所有语句,也就是从 语句1 一直执行到 语句n + 1,而不管后面的 case 是否匹配成功(这是平时开发的易错点,需要特别注意)。
  3)如果 x x x整数1 不相等,就跳过冒号后面的 语句1,继续比较第二个 case、第三个 case……,一旦发现和某个 整数 相等了,就会执行后面所有的语句。假设 x x x整数6 相等,那么就会从 语句6 一直执行到 语句n + 1
  4)如果直到最后一个 整数n 都没有找到相等的值,那么就执行 default 后的 语句n + 1

3、switch case 易错点

  • 当和某个 整数 匹配成功后,会执行该分支以及后面所有分支的语句。例如,如果写成下面的代码,那么,结果可能不是我们想要的:
#include <stdio.h>
int main(){
    int a;
    scanf("%d", &a);
    switch(a){
        case 1: printf("One\n");
        case 2: printf("Two\n");
        case 3: printf("Three\n");
        case 4: printf("Four\n");
        case 5: printf("Five\n");
        case 6: printf("Six\n");
        default:printf("Other\n");
    }
    return 0;
}

  • 运行结果如下:
3↙
Three
Four
Five
Six
Other
  • 输入3以后,程序发现和第 3 个分支匹配成功,于是就执行第 3 个分支以及后面的所有分支语句。这显然不是我们想要的结果,我们希望只执行第 3 个分支,而跳过后面的其他分支。
  • 为了达到这个目标,必须要在每个分支最后添加break;语句。

4、switch case 中的 break

  • break是 C语言 中的一个关键字,用于跳出 switch 语句。所谓 跳出,是指一旦遇到 break,就不再执行 switch 中的任何语句,包括当前分支中的语句和其他分支中的语句;也就是说,整个 switch 执行结束了,接着会执行整个 switch 后面的代码。
#include <stdio.h>
int main(){
    int a;
    scanf("%d", &a);
    switch(a){
        case 1: printf("One\n"); break;
        case 2: printf("Two\n"); break;
        case 3: printf("Three\n"); break;
        case 4: printf("Four\n"); break;
        case 5: printf("Five\n"); break;
        case 6: printf("Six\n"); break;
        default:printf("Other\n"); break;
    }
    return 0;
}
  • 得到运行结果如下:
3↙
Three
  • 由于 default 是最后一个分支,匹配后不会再执行其他分支,所以也可以不添加break;语句也可。

  • 关于break语句的更多内容,我会在后续讲 循环语句 时继续讲解。

5、switch case 语句中的 case 类型

  • case 后面跟的整数类型,必须是 整数 或者 常整表达式,如下:
#include <stdio.h>
int main(){
    int a;
    scanf("%d", &a);
    switch(a){ 
        case 1: printf("One\n"); break;          // (1) 
        case '2' - '0': printf("Two\n"); break;  // (2)
        case 1 + 1 + 1: printf("Three\n"); break;// (3)
        case 4.0: printf("Four\n"); break;       // (4)
        case a: printf("Five\n"); break;         // (5)
        case a + 1: printf("Six\n"); break;      // (6)
        default:printf("Other\n"); break;        
    }
    return 0;
}
  • ( 1 ) (1) (1) 正确,为整数;
  • ( 2 ) (2) (2) 正确,字符减法,得到整数;
  • ( 3 ) (3) (3) 正确,表达式结果为整数;
  • ( 4 ) (4) (4) 错误,结果为浮点数;
  • ( 5 ) (5) (5) 错误,结果为变量;
  • ( 6 ) (6) (6) 错误,结果为变量表达式;

通过这一章,我们学会了:
  switch case 语句的用法;

  • 希望对你有帮助哦 ~ 祝大家早日成为 C 语言大神!

课后习题


🙉饭不食,水不饮,题必须刷🙉

C语言免费动漫教程,和我一起打卡!
🌞《光天化日学C语言》🌞

LeetCode 太难?先看简单题!
🧡《C语言入门100例》🧡

数据结构难?不存在的!
🌳《数据结构入门》🌳

LeetCode 太简单?算法学起来!
🌌《夜深人静写算法》🌌
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

英雄哪里出来

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值