IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> [详解C语言]一文带你玩转选择(分支)结构 -> 正文阅读

[C++知识库][详解C语言]一文带你玩转选择(分支)结构

为什么要学习选择结构

大家都知道,程序是为了解决生活中的问题,而生活中处处是选择,例如:
image.pngimage.png

对于这种我只想说

image.png

好了,话不多说,进入正题

image.png

到了现在这个年纪,这个选择早就已经过去,很不幸,我选的是右边这个,如果有初高中的同学看到此篇文章,此路不通。
生活处处是选择,所以在程序中要有对应的结构来实现,这便是今天的主角。
选择结构分为两种实现,各有特点 if else / switch case

if else 详解

1.将上图用代码实现

#include <stdio.h>

int main(void){
   
    int input = 0;
    //好好学习输入1  天天打游戏输入2
    
    printf("好好学习输入1 \n 天天打游戏输入2");
    scanf("%d",&input);
    if(1 == input){
        printf("上岸985/211);
    }else{
        printf("大专/普通本科");
    }
    
    return 0;
}

解析: 这就是最简单的if - else 结构, if 一个分支 ,else 一个分支, 只会走其中一条路线

2.注意事项 : else匹配问题 —> 悬空else

话不多说,直接上代码

#include <stdio.h>

int main(void){
    int a = 2;
    int b = 3;
    int c = 4;
    if(a > b)
        if(b < c){
            printf(" b < c ");
        }
    else{
        printf(" 呵呵 ");
    }
    
    return 0;
}

上述代码,大家认为的运行结果是什么呢?
打印 b< c?
还是只打印 呵呵

可能出乎你的意料,看结果
image.png

结果什么也没有打印

解析: else是和它离的最近的if匹配的,并且此if没有被其他else匹配
可能大家还没有理解,把代码缩进一下就明白了
image.png
else和这个if相结合,因为a>b为假,所以什么也不输出

3.典型案例 : 输入年龄,判断状态

eg: 18岁以下为少年 ,18~35为青年 , 35~60中年 60以上为老年
输入年龄,输出状态

#include <stdio.h>

int main(void){
    int age = 0;
    scanf("%d",&age);
    if(age <= 18)
        printf("少年);
    else if(age > 18 && age <= 35)  //可以直接写成这样( age <= 35) 读者可以自行琢磨
        printf("青年");
    else if(age > 35 && age <= 60)
        printf("中年");
    else 
        printf("老年");
    
    return 0;
}

简单看出,if - else 结构适合范围类型的选择

如果有这样一个案例 :

如果输入1 表示星期1 , 2 表示星期二 …1 -7 输出 星期一-七

我们当然可以使用if-else来实现
image.png

有没有觉得简单而又冗余的逻辑,一篇有一篇,这只是7个,如果更复杂的呢?

所以让我们来看一下 swith -case 结构

switch-case详解

1.将if-else结尾的需求用switch-case实现

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

看起来是不是好多了,swith-case 更适合于处理具体数据的选择,

2.switch-case注意事项

让我们来看看switch的注意事项吧

2.1 switch后边的括号只能是 整形表达式(包括短整/长整) 或者 字符型

image.png

这是一个最基本的switch结构
1.switch是把括号中变量的值(即1处) 去下边case所列举的值去匹配
如果成功匹配,执行3处的语句
如果匹配不上,那就成顺序结构 ,啥也不干

case后必须是整型常量表达式
image.png

2.设想一下: 如果可以为浮点型的话
那么,3.14 可以匹配的有: 3.140 , 3.1400 , 3.14000…
故只能为整形或字符型

这就有人问了,为什么可以是字符型呢?
字符型在内存中以ASCII码的形式存储,简单来说,就是一个字符对应一个数字
所以说,字符可以说是特殊的整形

2.2switch中的default

image.png

这段代码中,如果输入不是 a / b ,那产生的结果是什么呢
显然,default代表默认,意味着如果所有的case子句都匹配不上的话,就执行default下的语句

注意: 与default的位置无关,default子句可以放在开头,或者case子句之间,也可以是结尾

2.3 break

在前边的switch-case子句中,基本都出现的break子句,为什么呢

再匹配到一个case子句执行完了,如果不执行break,会继续向下执行,直到碰到break或者到结尾才会跳出
image.png

这个代码就可以看出,我输入的是a ,但是 把下面所有的结果都输出来了,这是一个非常要注意的地方
一定要添加break子句

case后边的值决定从哪里进去,而break决定从哪里出去

我们有时可以利用这个小技巧

eg: 判断小写字母是否为元音字母

int main(void) {
    char ch = getchar();
    switch (ch) {
        case 'a': 
        case 'e':
        case 'i':
        case 'o':
        case 'u':
            printf("是元音字母");
            break;
        default:
            printf("不是元音字母 ");
    }
    return 0;
}

多个值为一个处理结果的时候,可以起到很大的帮助

switch-case嵌套

#include <stdio.h>
int main() {
    int m = 1;
    int n = 3;
    switch (m) {
        case 1:
            m++;
        case 2:
            n++;
        case 3:
            switch (n)
            {//switch允许嵌套使用
            case 1:
                n++;
            case 2:
                m++;
                n++;
                break;
            }
        case 4:
            m++;
            break;
        default:
            break;
    }
    printf("m = %d, n = %d\n", m, n);
    return 0;

}

大家可以计算一下这个,学校一般爱考这种题,注意是否有break就可以

总结

接下来我们使用 if - else 和switch-case 实现同一个案例

输入整数分数,60分 以下不及格,60-70 及格 70 -80 80-90 良好 90-100优秀

使用if-else实现

#include <stdio.h>
int main(void) {
    int score = 0;
    scanf("%d", &score);
    if (score < 60)
        printf("不及格");
    else  if (score < 70)
        printf("及格");
    else  if (score < 80)
        printf("中等");
    else  if (score < 90)
        printf("良好");
    else
        printf("优秀");
    return 0;
}

使用switch-case实现

int main(void) {
    int score = 0;
    scanf("%d", &score);
    switch (score / 10) {
        case 1:
        case 2:
        case 3:
        case 4:
        case 5:
            print("不及格");
            break;
        case 6:
            printf("及格");
            break;
        case 7:
            printf("中等");
            break;
        case 8:
            printf("良好");
            break;
        case 9:
        case 10:
            printf("优秀");
        }
    return 0;
}

综上

以上对比显而易见,并无优劣,各有千秋,谁好用用谁
个人观点如下

  1. 碰到范围类型的选择,优先考虑 if-else
  2. 碰到具体数据的选择,优先考虑switch-case,switch-case最大缺陷是只能整型

注:

  • 本文所有见解,为本人拙见,如有误导,请多指教
  • 如果对您有所帮助,点赞支持一下
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-07-20 18:34:21  更:2022-07-20 18:35:34 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 13:49:55-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码