C语言——分支语句 if、switch

本文介绍了C语言中的条件分支结构,包括if单分支、if...else双分支、elseif多分支以及switch语句的使用方法和执行流程。通过实例展示了如何根据条件执行不同的代码块,并强调了break在switch语句中的作用,以及如何处理多个if和else的匹配问题。
摘要由CSDN通过智能技术生成

前言

分支语句包括 if、switch

一、if 语句

通用形式

if(条件表达式)
{
	//语句;
}

执行过程:如果条件表达式的值为真(非0),则执行语句 1,否则不执行语句 1

例子:

//输入两个值,并判断最大值
#include<stdio.h>
int main()
{
    int a = 0;
    int b = 0;
    int max = 0;
    
    printf("请依次输入两个数:");
    scanf("%d %d", &a, &b);
    max = a;    //假设a为最大值
    
    if (b > max)
        max = b; //若b的值大于max的值,则将b的值赋给max,否则最大值为a
    
    printf("最大值为:%d", max);
    
    return 0;
}

二、if else 语句

通用形式

if(条件表达式)
{
    //语句1;
}
else
{
    //语句2;
}

​ 执行过程:如果条件表达式为真(非0),则执行语句 1;如果条件表达式为假或 0,则执行 else 后面的语句 2

例子:

//输入两个值,并判断最大值
#include<stdio.h>
int main()
{
    int a = 0;
    int b = 0;
    int max = 0;
    
    printf("请依次输入两个数:");
    scanf("%d %d", &a, &b);
    
    if (a < b)
        max = b;
    else
        max = a;
    
    printf("最大值为:%d", max);
    //若a小于b,将b的值赋给max后输出最大值,否则将a的值赋给max并输出
    
    return 0;
}

三、多重选择 else if

通用形式

if(条件表达式1)
{
    //语句1;
}
else if(条件表达式2)
{
    //语句2;
}
else if(条件表达式3)
{
    //语句3;
}
//......
else
{
    //语句n;
}

​ 执行过程:依次判断条件表达式的值,当某个值为真时,则执行相应的语句,然后跳出整个 if 语句之外,继续执行后面的程序;如果所有的表达式都为假,则执行语句n,然后执行后面的程序

例子:

//输入成绩分数(0~100分),并判断该成绩属于哪个等级
//成绩等级:90~100(A),80~90(B),70~80(C),60~70(D),0~60(不合格)
#include<stdio.h>
int main()
{
        int score = 0;
    
        printf("请输入成绩:");
        scanf("%d", &score);
    
        if (0 <= score && score <= 100)
        {
                if (90 <= score)         //已经包含了score <= 100
                        printf("等级:A\n");
                else if (80 <= score)    //else已经包含了score < 90
                        printf("等级:B\n");
                else if (70 <= score)                
                        printf("等级:C\n");
                else if (60 <= score)
                        printf("等级:D\n");
                else
                        printf("成绩不合格!!\n");
        }
        else
                printf("输入成绩有误!!\n");
    
        return 0;
}

实际上 else if 是 if else 语句的变式

例如,上面例子的程序段是下面代码的另一种写法:

if (0 <= score && score <= 100)
{
        if (90 <= score)
            printf("等级:A\n");
        else
            if (80 <= score)         
                printf("等级:B\n");
            else
                if (70 <= score)                
                    printf("等级:C\n");
                else
                    if (60 <= score)
                        printf("等级:D\n");
                    else
                        printf("成绩不合格!!\n");
}
else
	printf("输入成绩有误!!\n");

若程序中有多个if和else,编译器如何知道哪个if对应哪个else?

考虑如下程序段

if(num>0)
    if(num<100)
        printf("num在0~100的范围内\n");
else
    printf("num不在0~100的范围内\n");

​ 这时,else与第一个 if 还是第二个 if 匹配?答案是第二个,虽然书写的格式看起来是与第一个 if 匹配,但规则是,如果没有{},else 会与离它最近的 if 匹配,除非最近的 if 被大括号 {} 括起来

修改如下:

if(num>0)
{
    if(num<100)
        printf("num在0~100的范围内\n");
}
else
    printf("num不在0~100的范围内\n");

四、switch 语句

1.switch 用于多分支

通用形式

switch(整型表达式)//表达式不允许是浮点型
{
    case 常量表达式 1: 语句1(集合);
    case 常量表达式 2: 语句2(集合);
    //...
    case 常量表达式 n: 语句n(集合);
    default:语句 n + 1;//default:默认
}

​ 执行过程:首先计算表达式的值,与常量表达式进行比较,如果与其中一个常量表达式 i 的值相等,就执行其后的语句直到遇到 break 语句才结束 switch 语句,如果 case 后无 break 语句,则继续执行随后所有的 case 后的语句。如果没有找到与表达式的值相匹配的常量表达式,则执行 default 后的语句 n + 1

例子:

输入数字1-7,并输出显示对应的星期

源代码:

//输入数字1-7,并输出显示对应的星期
#include <stdio.h>

int main()
{
    int day = 0;

    do
    {
        printf("今天星期几:");
        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;
        case 0:printf("退出!\n"); break;
        default:printf("输入数据有误!!\n");
        }
        printf("\n");
    } while (day);

    return 0;
}

运行结果:

switch

注意

  • switch 后面括号中的表达式可以是整型、字符型、枚举型,不允许是浮点型
  • 在 case 后,允许有多个语句,可以不用{}括起来
  • 各 case 和 default 语句的先后顺序可以改变,不影响程序执行结果(default 通常放末尾)

2.跳转语句(break、continue、goto)

  1. break语句:会中止包含它的循环或 switch 语句的剩余部分,并执行跟在循环或 switch 后面的语句
  2. continue 语句:跳出本次循环,执行下一次循环
  3. goto 语句:使程序控制跳转至相应标签语句

3.如果 switch 语句中的 case 后没有用 break 来跳出循环

​ 如果 switch 语句中的 case 后没有用 break 来跳出循环,那么在执行对应的一个 case 后的语句后会接着执行紧跟其后的 case 语句,除非遇到 break 跳出 switch 语句或者执行完接下来的 switch 语句部分

4.合理使用 break 语句

​ 上面的例子改为:输入数字 1 - 7,并输出显示对应的星期是工作日还是休息日(定 1~5 为工作日,6、7 为休息日)

源代码:

//输入数字1-7,并输出显示对应的星期是工作日还是休息日(定1~5为工作日,6、7为休息日)
#include <stdio.h>
int main()
{
    int day = 0;
    printf("今天工作日还是休息日:");
    scanf("%d", &day);

    switch (day)
    {
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:printf("今天是工作日\n"); break;//输入1~5结果都是执行同一 printf 语句
    case 6:
    case 7:printf("今天是休息日\n"); break;//输入6、7结果都是执行同一 printf 语句
    default:printf("输入数据有误!!\n");
    }

    return 0;
}

运行结果:

switch-break

​ 在修改后的 switch 语句中,输入 1~4,进入 switch 语句后都会执行与之匹配的 case,直到执行完 case5 语句后的 printf 语句与 break 并跳出 switch 语句,也就是说输入 1~5 结果都是执行同一 printf 语句即打印输出“今天是工作日”,6~7 同理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

青春无限坑

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

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

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

打赏作者

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

抵扣说明:

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

余额充值