C语言——分支语句

当谈论编程语言中的控制流语句时,C语言中的分支语句是一项基础而重要的主题。在本文中,我们将深入探讨C语言中的分支语句,包括if语句和switch语句的使用方法、示例以及它们之间的比较。此外,我们还将演示如何使用这些语句编写一个简单的程序。

前言

分支语句是编程中的关键组成部分,它们允许程序根据不同的条件执行不同的代码块。C语言提供了两种主要的分支语句:if语句和switch语句。这些语句使我们能够实现条件执行,根据特定情况来决定程序的行为。

if语句

基本使用

if语句是C语言中最基本的分支语句,用于在条件为真时执行一段代码。其基本语法如下:

if (判断条件)
{
    // 在条件为真时执行的代码
}

表达式成立(为真),则语句执行,表达式不成立(为假),则语句不执行 。在C语言中,0为假,非0表示真。因此,表达式的结果如果是0,则语句不执行,表达式的结果如果不是0,则语句执行。

#include <stdio.h>

int main() 
{
    int age = 0;
    scanf("%d", &age);

    if (age >= 18) 
    {
        printf("你已经成年了!\n");
    }
    return 0;
}

在这个示例中,先输入你的年龄,如果年龄大于或等于18岁,程序将输出"你已经成年了!"。

else if 和 else

if语句还可以与else if 和 else一起使用,以实现多条件分支。这允许程序根据不同的条件执行不同的代码块。

if (condition1) 
{
    // 当condition1为真时执行的代码
} 
else if (condition2) 
{
    // 当condition2为真时执行的代码
} 
else 
{
    // 所有条件都不满足时执行的代码
}

示例

#include <stdio.h>

int main() 
{
    int score = 85;

    if (score >= 90) 
    {
        printf("优秀成绩!\n");
    } 
    else if (score >= 70) 
    {
        printf("良好成绩!\n");
    } 
    else 
    {
        printf("需要努力了!\n");
    }

    return 0;
}

程序使用if语句进行多条件测试,按照以下方式执行:

  1. 首先,检查score >= 90是否为真。如果分数大于或等于90,将输出"优秀成绩!"。

  2. 如果第一个条件不满足,程序继续检查score >= 70是否为真。如果分数大于或等于70,将输出"良好成绩!"。

  3. 如果前两个条件都不满足,程序执行else块中的代码,输出"需要努力了!"。

悬空else问题

下面先举一个简单的例子:

#include <stdio.h>

int main() 
{
    int x = 0;
    int y = 1;  
    if (x == 1)
        if (y == 1)
            printf("Hello world!\n");
    else
        printf("Nice to meet you!\n");

    return 0;
}
程序运行的结果是什么呢?
对很多初学者来说,上来以判断 x 是 0,不等于 1 ,那就执行else 子句,打印“Nice to meet you!”
但是当你运行代码,输出的结果是:空白。

为什么呢?

这就是悬空 else 的问题,如果有多个 if 和 else ,可以记住:else 总是跟最接近 的 if 匹配。

上面的代码排版,让 else 和第⼀个 if 语句对齐,让我们以为 else 是和第一个if匹配的,当 if 语句不成立的时候,自然想到的就是执行 else 子句,打印 “Nice to meet you!” ,但实际上 else 是和第二个 if 进行匹配的,这样后边的 if...else 语句是嵌套在第⼀个 if 语句中的,如果第⼀个 if 语句就不成立,嵌套 if 和 else 就没机会执行了,最终啥都不打印。

修正后的代码:

#include <stdio.h>

int main() 
{
    int x = 0;
    int y = 1;  
    if (x == 1)
    {
        if (y == 1)
        {
            printf("Hello world!\n");
        }
    }
    else
    {
        printf("Nice to meet you!\n");
    }
    return 0;
}

运行实例:

只要带上适当的大括号,代码的逻辑就会更加的清晰。

switch语句

switch语句用于根据表达式的值选择不同的分支。它适用于在一个变量可以取多个值的情况。

基本使用

switch语句的基本语法如下:

switch (expression) 
{
    case value1:
        // 当expression等于value1时执行的代码
        break;
    case value2:
        // 当expression等于value2时执行的代码
        break;
    // 可以有更多的case分支
    default:
        // 如果expression不匹配任何case时执行的代码
}

示例

#include <stdio.h>

int main() 
{
    char grade = 'B';

    switch (grade) 
    {
        case 'A':
            printf("优秀成绩!\n");
            break;
        case 'B':
            printf("良好成绩!\n");
            break;
        case 'C':
            printf("中等成绩!\n");
            break;
        default:
            printf("需要努力了!\n");
    }

    return 0;
}
  • 我们首先定义了一个字符变量grade,并将其值设置为'B',代表成绩等级。

  • 使用switch语句对grade的值进行检查,按照以下方式执行:

    1. 如果grade的值等于'A',程序将输出"优秀成绩!"。

    2. 如果grade的值等于'B',程序将输出"良好成绩!"。

    3. 如果grade的值等于'C',程序将输出"中等成绩!"。

    4. 如果grade的值不匹配任何上述情况,程序将执行默认(default)分支,输出"需要努力了!"。

在这个示例中,由于grade的值为'B',它匹配了第二个case条件,因此程序执行第二个分支,输出"良好成绩!"。

if语句和switch语句的比较

if语句和switch语句都用于控制程序的分支流程,但它们在不同情况下更适合使用。

  • 使用if语句,当条件是多样化的,每个条件需要不同的判断和执行代码时。
  • 使用switch语句,当需要检查一个变量的不同取值,并且每个值需要执行不同的代码块时。

使用if和switch语句编写程序

#include <stdio.h>

int main() {
    int monthNumber;

    // 提示用户输入月份号码
    printf("请输入月份号码(1-12):");
    scanf("%d", &monthNumber);

    // 使用if语句根据月份号码输出月份名称
    if (monthNumber >= 1 && monthNumber <= 12) {
        if (monthNumber == 1) {
            printf("一月 (January)\n");
        } else if (monthNumber == 2) {
            printf("二月 (February)\n");
        } else if (monthNumber == 3) {
            printf("三月 (March)\n");
        } else if (monthNumber == 4) {
            printf("四月 (April)\n");
        } else if (monthNumber == 5) {
            printf("五月 (May)\n");
        } else if (monthNumber == 6) {
            printf("六月 (June)\n");
        } else if (monthNumber == 7) {
            printf("七月 (July)\n");
        } else if (monthNumber == 8) {
            printf("八月 (August)\n");
        } else if (monthNumber == 9) {
            printf("九月 (September)\n");
        } else if (monthNumber == 10) {
            printf("十月 (October)\n");
        } else if (monthNumber == 11) {
            printf("十一月 (November)\n");
        } else {
            printf("十二月 (December)\n");
        }
    } else {
        printf("无效的月份号码,请输入1-12之间的数字。\n");
    }

    // 使用switch语句输出月份名称
    printf("使用switch语句输出月份名称:\n");
    switch (monthNumber) {
        case 1:
            printf("一月 (January)\n");
            break;
        case 2:
            printf("二月 (February)\n");
            break;
        case 3:
            printf("三月 (March)\n");
            break;
        case 4:
            printf("四月 (April)\n");
            break;
        case 5:
            printf("五月 (May)\n");
            break;
        case 6:
            printf("六月 (June)\n");
            break;
        case 7:
            printf("七月 (July)\n");
            break;
        case 8:
            printf("八月 (August)\n");
            break;
        case 9:
            printf("九月 (September)\n");
            break;
        case 10:
            printf("十月 (October)\n");
            break;
        case 11:
            printf("十一月 (November)\n");
            break;
        case 12:
            printf("十二月 (December)\n");
            break;
        default:
            printf("无效的月份号码,请输入1-12之间的数字。\n");
            break;
    }

    return 0;
}

这个程序首先要求用户输入一个月份号码,然后使用if语句和switch语句分别根据月份号码输出对应的月份名称。在if语句中,我们使用多个if和else if语句来匹配不同的月份号码,然后输出相应的月份名称。在switch语句中,我们使用不同的case分支来匹配不同的月份号码,并输出对应的月份名称。如果输入的月份号码不在1到12之间,程序将输出"无效的月份号码"的消息。

结语

分支语句是C语言编程中的不可或缺的工具,它们使程序能够根据不同的条件做出不同的决策。if语句和switch语句分别适用于不同的情况,了解它们的用法和差异可以帮助您更好地编写C程序,实现所需的逻辑。无论您是初学者还是有经验的开发者,分支语句都是您的编程工具箱中必不可少的工具。希望本文对您有所帮助,欢迎继续学习和探索C语言的世界!

如果您想进一步了解C语言——循环语句,请访问:C语言——循环语句-CSDN博客

  • 12
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值