C if 语句

在 C 语言中,选择结构指的是根据 “条件判断” 来决定执行哪一段代码。选择结构有 3 种:单向选择、双向选择以及多向选择。但无论是哪一种,C 语言只会执行其中的一个分支。

在 C 语言中,选择结构共有两种方式:一种是 if 语句;另一种是 switch 语句。这一节我们先来介绍 if 语句。

C 语言 if 语句

在 C 语言中,单向选择使用的是 if 语句,其流程如下图所示。

C if 语句流程图

语法:

if (条件)
{
    ……
}

说明:

if 后面的 “条件” 一般是一个比较表达式。如果条件返回为真(即 1),就会执行 “{}” 内部的代码。如果条件返回为假(即 0),则会直接跳过 “{}” 内部的代码,然后再按照顺序去执行 “{}” 后面的代码。

由 “{}” 括起来的代码,我们又称为 “语句块”。语句块常用于选择结构、循环结构以及函数中,C 语言是把一个语句块看成是一个整体来执行。

需要特别说明的是,上面整一段代码又叫做 “if 语句”。对于语句来说,一般末尾处需要加上一个分号。但对于 C 语言来说,它会自动根据 “}” 来判断这是一条 if 语句,所以后面的分号可加可不加。

示例 1:使用 if 语句

#include <stdio.h>

int main(void)
{
    int score = 100;

    if (score > 60)
    {
        printf("那你很棒棒喔");
    }
    return 0;
}

运行结果如下。

那你很棒棒喔

分析:

由于变量 score 的值为 100,所以 score > 60 返回真(1),因此会执行 “{}” 内部的代码。需要说明的是,下面整一块其实是一条语句,也叫做 “if 语句”。

if (score > 60)
{
    printf("那你很棒棒喔");
}

有小伙伴就会问了:“既然这是一条语句,为什么语句里面还可以包含其他语句呢?” 比如上面的 printf("那你很棒棒喔"); 本身又是一条语句。其实这并不矛盾,if 语句不是普通语句,而是 “结构性语句”。像 if、whilefor 等结构性语句,它们的内部是可以包含其他语句的,然后它们本身整体又可以看成是一条语句。

如果 if 语句内部只有一条语句,此时我们是可以把 “{}” 省略掉的,但最后却需要加上一个分号才行。对于上面这个例子来说,下面 2 种方式是等价的。

// 方式 1
if (score > 60)
{
    printf("那你很棒棒喔");
}

// 方式 2
if (score > 60) printf("那你很棒棒喔");      // 这里的分号不能省略

如果 if 语句的内部有多条语句,那么我们必须要使用 “{}” 的,这一点小伙伴们要记住。

C 语言 if...else 语句

在 C 语言中,双向选择使用的是 if...else 语句,其流程如下图所示。

C if else 语句流程图

语法:

if (条件)
{
    ……
}
else
{
    ……
}

说明:

if...else 语句相对 if 语句来说,仅仅是多了一个选择。当条件返回为 “真(1)” 时,会执行 if 后面 “{}” 中的代码;当条件返回为 “假(0)” 时,会执行 else 后面 “{}” 中的代码。

示例 2:if...else 基本用法

#include <stdio.h>

int main(void)
{
    int score = 100;

    if (score < 60)
    {
        printf("补考!");
    }
    else
    {
        printf("通过!");
    }

    return 0;
}

运行结果如下。

通过!

分析:

由于变量 score 的值为 100,而 score < 60 返回假(0),因此会执行 else 后面 “{}” 中的代码。我们要注意一点,对于 if...else 来说,虽然后面分号可以省略,但是你非要加上分号的话,此时应该在 else 后面的 “{}” 末尾加上分号,而不是在 if 后面的 “{}” 末尾加上分号。

// 正确
if (score < 60)
{
    printf("补考!");
}
else
{
    printf("通过!");
};                        // 只需要一个分号就可以,加在这里

// 错误
if (score < 60)
{
    printf("补考!");
};                        // 这里不允许加上分号,加上之后 else 和 if 就不配对了
else
{
    printf("通过!");
};

C 语言 if...else if...else 语句

在 C 语言中,“多向选择” 指的是在双向选择的基础上增加多个选择分支。

语法:

if (条件 1)
{
    // 当条件 1 为 “真” 时执行的代码
}
else if (条件 2)
{
    // 当条件 2 为 “真” 时执行的代码
}
else
{
    // 当条件 1 和条件 2 都为 “假” 时执行的代码
}

说明:

多向选择语法看似很复杂,其实也是非常简单的,它只是在双向选择基础上再增加一个或多个选择分支罢了。小伙伴们对比一下这两个的语法格式就知道了。

示例 3:if...else if...else 基本用法

#include <stdio.h>

int main(void)
{
    int time = 21;

    if (time < 12)
    {
        printf("早上好");      // 如果时间小于 12,输出 “早上好”
    } 
    else if (time >=12 && time < 18)
    {
        printf("下午好");      // 如果时间大于等于 12 并且小于 18,输出 “下午好”
    }
    else
    {
        printf("晚上好");      // 如果上面两个条件都不符合,输出 “晚上好”
    }

    return 0;
}

运行结果如下。

晚上好

分析:

对于多向选择,我们会从第 1 个 if 开始判断,如果第 1 个 if 条件不满足,则判断第 2 个 if 条件……直到满足为止。一旦满足,就会退出整个 if 结构。

思考:对于上面例子来说,如果 time 变量的值不是定死的,而是由我们手动输入的,此时又应该怎么实现呢?

C 语言 if 语句的嵌套

在 C 语言中,if 语句是可以嵌套使用的,也就是 if 语句的内部还可以定义 if 语句。

语法:

if (条件 1)
{
    if (条件 2)
    {
        当条件 1 和条件 2 都为 “真” 时执行的代码
    }
    else
    {
        当条件 1 为 “真”、条件 2 为 “假” 时执行的代码
    }
}
else
{
    if (条件 2)
    {
        当条件 1 为 “假”、条件 2 为 “真” 时执行的代码
    }
    else
    {
        当条件 1 和条件 2 都为 “假” 时执行的代码
    }
}

说明:

对于 if 语句的嵌套,你只需要从外到内根据条件一个个去判断,就像剥洋葱一样简单(如下图所示)。C 语言是使用 “{}” 来表示哪一个代码块属于哪一个 if 或 else 的,所以你可以根据 “{}” 来判断哪两个 if 和 else 是一对的。

C if语句的嵌套

示例 4:if 语句的嵌套(1)

#include <stdio.h>
#include <string.h>

int main(void)
{
    char gender[] = "女";
    int height = 172;

    // 如果返回 0,表示内容相等
    if (strcmp(gender, "男") == 0)
    {
        if (height > 170)
        {
            printf("高个子男生");
        }
        else
        {
            printf("矮个子男生");
        }
    }
    else
    {
        if (height > 170)
        {
            printf("高个子女生");
        }
        else
        {
            printf("矮个子女生");
        }
    }

    return 0;
}

运行结果如下。

高个子女生

分析:

一个英文字符是占据 1 个字节,所以我们可以使用 char 类型来定义。但是一个中文字符是占据 2 个字节,我们无法使用 char 类型定义,而必须使用字符数组才行。char gender[] = "女"; 表示定义了一个字符串(即字符数组)。对于字符串,我们在后续章节会详细介绍,这里简单了解一下即可,不影响我们理解代码的意思。

在这个例子中,首先外层 if 语句的判断条件 gender == "男" 返回 “假(0)” ,因此会执行 else 语句。然后我们可以看到 else 语句内部还有一个 if 语句,这个内层 if 语句的判断条件 height > 170 返回 “真(1)” ,所以最终输出内容为 “高个子女生”。

示例 5:if 语句的嵌套(2)

#include <stdio.h>

int main(void)
{
    int x = 4;
    int y = 8;

    if (x < 5)
    {
        if (y < 5)
        {
            printf("x 小于 5,y 小于 5");
        }
        else
        {
            printf("x 小于 5,y 大于 5");
        }
    }
    else
    {
        if (y < 5)
        {
            printf("x 大于 5,y 小于 5");
        }
        else
        {
            printf("x 大于 5,y 大于 5");
        }
    }

    return 0;
}

运行结果如下。

x 小于 5,y 大于 5

上一篇: C 输入

下一篇: C switch 语句

给站长反馈

绿叶网正在不断完善中,小伙伴们如果发现任何问题,还望多多给站长反馈,谢谢!

邮箱:lvyenet@vip.qq.com

「绿叶网」服务号
绿叶网服务号放大
关注服务号,微信也能看教程。
绿叶网服务号