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

前言:

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

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

1、单分支 

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

#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:

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

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

#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)。👉 

#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 多重嵌套的省略版本。👉

#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:以下执行内容为一条语句,可以省略花括号。

#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 嵌套 ---- 实现多分支 

#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 --- 实现多分支

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

#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还 可以这样用:

#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 !!!!! 

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

#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;
}

输入: 

输入 2

输出(结果): 

星期二
星期三

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

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

#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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值