C初阶(八)选择结构(分支结构)--if、else、switch

前言:

  • C语言是用来解决问题的,除了必要的数据输入与输出(见前文),还要有逻辑结构。其中基本可以归为三类:顺序结构、选择结构、循环结构。
  • 今天,杰哥提笔写的是关于选择结构(又叫"分支结构")的笔记。
  • 👉在本博文中,将有对 if 、else、switch使用场景的举例,还有 关键字 case 、break的使用。

一、if 、 else 引导的分支结构

1、单分支

场景示例:公司要么录用你,要么没有消息。(要么执行,要么不执行)👉

cs 复制代码
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
    int score = 0;
    scanf("%d",&score);
    if(score > 90)
    {
        printf("录用\n");
    }
    return 0;
}

2、双分支

场景示例1:

公司给大家都发奖金,要么多发,要么少发。(从两个执行的操作中选择一个执行)👉

cs 复制代码
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
    int score = 0;
    scanf("%d",&score);
    if(score > 90)
    {
        printf("多发奖金\n");
    }
    else
    {
        printf("少发奖金\n");
    }
    return 0;
}

场景示例2:

成年与未成年👉

tip:一条执行内容时可以不用花括号,多条执行内容时看情景判断是否用花括号,但从代码阅读的体验感来说,一般来说,我们加上花括号比较好。

cs 复制代码
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
    int age = 0;
    scanf("%d",&age);
    if(age >= 18)
    {
        printf("成年\n");
        printf("可以自己办银行卡\n");
    }
    else
    {
        printf("未成年\n");
    }
    return 0;
}

3、多分支

场景示例1:

成绩评级 ----> 60以下(不及格)、60~80(等级C)、80~90(等级B)、90~100(等级A)。👉

cs 复制代码
#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>
int main()
{
    int score = 0;
    scanf("%d",&score);
    if(score < 60)
    {
        printf("不及格\n");
    }
    else //此时前提变为score >= 60
    {
        if(score < 80)
        {
            printf("C\n");
        }
        else //此时前提变为score >= 80
        {
            if(score <90)
            {
                printf("B\n");
            }
            else //此时前提变为score >= 90
            {
                printf("A\n");
            }
        }
    }
	return 0;
}

但是,这样看着观感不好,这里我们可以写if - else 多重嵌套的省略版本。👉

cs 复制代码
#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>
int main()
{
    int score = 0;
    scanf("%d",&score);
    if(score < 60)
        printf("不及格\n");
    else if(score < 80)
        printf("C\n");
    else if(score <90)
        printf("B\n");
    else 
        printf("A\n");
	return 0;
}

如何理解if - else 嵌套中if和else的关系呢?解答如下:

场景示例2: 年龄段的判断👉

tip:以下执行内容为一条语句,可以省略花括号。

cs 复制代码
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
    int age = 0;
    scanf("%d", &age);
    if (age < 18)
    {
        printf("少年\n");
    }
    else if (age >= 18 && age < 30)
    {
        printf("青年\n");
    }
    else if (age >= 30 && age < 50)
    {
            printf("中年\n");
    }
    else if (age >= 50 && age < 80)
    {
        printf("老年\n");
    }
    else
    {
        printf("老寿星\n");
    }
    return 0;
}

二、switch 引导的分支结构

  • 关键字:case --- "事件",用于各情况的罗列;break --- 跳出switch 分支;default --- 提供一种处理意外情况的机制,确保在没有匹配的case情况下程序仍有相应的执行逻辑。
  • switch --- 作用:使多分支结构的可读性加强。
  • 注意:switch(input) --- 其中的input 只能为整型变量,不能是浮点型等。
  • 注意:case后的情况只能是"整型常量表达式",如:1、3+2
    场景示例:1---星期一 ······ 7---星期日👉

法一:if - else 嵌套 ---- 实现多分支

cs 复制代码
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
	int day = 0;
	scanf("%d", &day);
 
	if (1 == day)
		printf("星期一");
	else if (2 == day)
		printf("星期二");
	else if (3 == day)
		printf("星期三");
	else if (4 == day)
		printf("星期四");
	else if (5 == day)
		printf("星期五");
	else if (6 == day)
		printf("星期六");
	else if (7 == day)
		printf("星期日");
    else
        printf("输入错误\n");
	return 0;
}

法二:switch --- 实现多分支

可读性是不是比法一好呢?

cs 复制代码
#define _CRT_SECURE_NO_WARNINGS 1
#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;
    default:
        printf("输入错误\n");
        break;
    }
    return 0;
}

另外,switch还 可以这样用:

cs 复制代码
#define _CRT_SECURE_NO_WARNINGS 1
#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;
}

三、使用switch过程中容易发生的问题

注意不要漏掉*++break++* !!!!!

漏掉会怎么样呢?示例如下:👉

cs 复制代码
#define _CRT_SECURE_NO_WARNINGS 1
#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;
    default:
        printf("输入错误\n");
        break;
    }
    return 0;
}

输入:

cs 复制代码
输入 2

输出(结果):

cs 复制代码
星期二
星期三

分析:输入2后,case 2作为入口,开始进入执行,然而刹不住"车",直到遇到break才停止执行。

接着,看看以下这个会输出什么👉,答案见下节

cs 复制代码
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
    int n = 1;
    int m = 2;
    switch (n)
    {
    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;
}
相关推荐
就爱学编程34 分钟前
重生之我在异世界学编程之C语言小项目:通讯录
c语言·开发语言·数据结构·算法
北国无红豆1 小时前
【CAN总线】STM32的CAN外设
c语言·stm32·嵌入式硬件
单片机学习之路1 小时前
【C语言】结构
c语言·开发语言·stm32·单片机·51单片机
graceyun3 小时前
C语言初阶习题【9】数9的个数
c语言·开发语言
Schwertlilien4 小时前
图像处理-Ch5-图像复原与重建
c语言·开发语言·机器学习
程序员buddha6 小时前
C语言从入门到放弃教程
c语言·开发语言
AAA.建材批发刘哥10 小时前
Linux快速入门-Linux文件系统管理
linux·运维·服务器·c语言·学习方法
Kisorge11 小时前
【C语言】指针数组、数组指针、函数指针、指针函数、函数指针数组、回调函数
c语言·开发语言
爱吃西瓜的小菜鸡15 小时前
【C语言】判断回文
c语言·学习·算法
FeboReigns17 小时前
C++简明教程(文章要求学过一点C语言)(1)
c语言·开发语言·c++