首页 > 编程笔记 > C语言笔记 阅读:11

C语言if else分支语句的用法(非常详细)

日常生活中,为了使交通畅通有序,一般会在路口设立交通信号灯。信号灯为绿色时,车辆可以行驶通过;信号灯为红色时,车辆就要停止行驶。可见,信号灯给出了信号,人们通过不同的信号进行判断,然后根据判断的结果进行相应的操作。

在 C语言程序中,要想完成这样的判断操作,利用的就是 if 语句。if 语句的功能就像路口的信号灯一样,通过判断不同的条件,决定是否进行操作。

程序开发中,会遇到许多类似于红绿灯这样的“决策”,可将其简化成对某个“条件”的检验,进而转换为判断某个表达式的值是真还是假,最后根据真假情况选择性地执行后续的操作。除了没有任何返回值的函数和返回无法判断真假的结构函数,几乎所有表达式的返回值都可以判断真假。

C语言中的 if 语句有 if、if…else 和 else if 这 3 种形式,下面介绍每种形式的具体使用方式。

C语言if语句

if 语句的一般形式如下:
if(表达式)  语句
其中,括号中的表达式就是要进行判断的条件,语句则是要执行的对应操作。如果 if 判断括号中的表达式为真(非 0),就执行后面的语句;如果为假(0),则不执行后面的语句。

if 语句的执行流程图如下图所示。


图 1 if语句的执行流程图

例如下面的代码:
if(iNum) printf("The truevalue");
上述代码中,如果变量 iNum 的值为真,则执行后面的 printf() 输入语句;如果变量 iNum 的值为假,则不执行后面的 printf() 语句。

用 if 语句解决红绿灯问题时,可以约定信号灯为 1 表示绿灯,则判断代码为:
if(iSignal==1) printf("the Signal Light is%d:",iSignal);
上述代码中,首先判断表达式“iSignal==1”是否成立,如果条件成立,那么判断结果是真值,执行后面的输出语句;如果条件不成立,那么判断结果为假值,不执行后面的输出语句。

前面两处示例代码中,if 后的执行部分都只有一条语句。如果有两条语句,又该怎么办呢?这时可以使用大括号,使之成为语句块。例如:
#include <stdio.h>

int main() {
    int iSignal = 1; // 假设信号灯的状态为1
    if(iSignal == 1) {
        printf("the Signal Light is %d.\n", iSignal);
        printf("Cars can run");
    }
    return 0;
}
将执行的语句都放在大括号中,这样当 if 语句判断条件为真时,语句块内的内容将会全部被执行。使用这种方式的好处是可以规范、清晰地表达出 if 语句所包含的范围。建议大家在使用 if 语句时,都使用大括号将执行语句包括在内。

注意,if 语句的括号后一定不要加英文分号(;),否则将编译报错。例如:
if(i > 100) ;
{
    sum = i + 5000;
    printf("%d\n", sum);
}
如果已经报错,可根据错误提示,找到差错并修改代码。

此外,选择结构处理问题一定要把条件描述清楚,例如下面的语句是错误的:
if(i/6< >0) {...}

【实例 1】使用 if 语句模拟打卡签到。模拟打卡签到,要使用 if 语句判断工位号和密码。如果工位号是 13,同时密码是 111,则通过 printf() 函数提示“谢谢,已签到”。
#include <stdio.h>

int main() {
    int loc, ser; /* 定义变量 loc 表示工位号,ser 表示密码 */
    printf("请输入工位号、密码:"); /* 提示信息 */
    scanf("%d,%d", &loc, &ser); /* 输入工位号和密码 */
    if(loc == 13 && ser == 1111) /* 判断输入是否相同 */
        printf("谢谢,已签到\n");
    return 0;
}
1) 程序中为了模拟打卡签到,要根据工位号和密码情况进行判断,这样就需要两个变量分别表示工位号和密码。在程序代码中,定义变量 loc 表示工位号,ser 表示密码。

2) 输出提示信息,提醒用户输入 loc、ser 变量的值。此时用键盘输入“13,111”,表示工位号是 13,密码是 111。

3) 使用 if 语句判断,如果为真,则表示签到成功;如果为假,则表示签到不成功。因为输入的变量 loc 的值为 13,ser 的值是 111,表达式 loc==13&&ser==111 的条件成立,因此判断的结果为真值,从而执行 if 语句后面大括号中的语句。

执行程序,输出结果为:

请输入工位号、密码:13,1111
谢谢,已签到


if 语句可以多次使用,使得程序能根据不同的分支条件给出相应的操作。例如在上面的实例例中,虽然使用 if 语句对输入的 loc、ser 变量进行了判断,但是只给出了判断正确,也就是 loc 等于 13、ser 等于 111 时执行的操作,并没有给出判断错误时对应的操作。为了保证在用户输入错误的工位号、密码时,程序也能做出反应,需要再使用一次 if 语句。

现在对实例 1 进行完善。在程序中再添加一次 if 语句,对打卡签到失败的情况进行判断,并且在条件成立时给出相应操作。
#include <stdio.h>

int main() {
    int loc, ser; /* 定义变量 loc 为工位号,ser 为密码 */
    printf("请输入工位号、密码: "); /* 提示信息提示 */
    scanf("%d,%d", &loc, &ser); /* 输入工位号和密码 */
    if(loc == 138 && ser == 1111) /* 判断输入是否相同 */
        printf("谢谢,已签到\n"); /* 输出签到成功 */
    if(loc != 138 || ser != 1111) /* 判断输入是否不相同 */
        printf("对不起,工位号或密码有错误\n"); /* 输出错误信息 */
    return 0;
}
1) 在实例 1 的基础上进行修改,完善程序的功能。在代码中添加一个 if 判断语句,用来表示当 loc!=13&&ser!=111 时要进行的相应操作。

2) 从程序的开始处来分析整个程序的运行过程。使用 scanf() 函数输入数据,这次用户输入的是“12、123”,表示工位号是 12,密码是 123。

3) 程序继续执行,第一个 if 语句判断 loc==13&&ser==111 是否为真,如果判断的结果为真,则说明签到成功。因为 loc 的值是 12,ser 的值是 123,所以判断的结果为假,不会执行第一个 printf() 语句中的内容。

4) 接下来是新添加的 if 语句,在其中判断 loc!=13&&ser!=111 是否为真,如果判断成立为真,则表示签到不成功。因为输入的值为 12、123,所以 loc!=13&&ser!=111 条件成立,执行第二个 printf() 语句内容。

运行程序,结果为:

请输入工位号、密码: 12,123
对不起,工位号或密码有错误


初学编程的人在程序中使用 if 语句时,常常会将下面的两个判断弄混:
if(value) { ... }      /* 判断变量值是否为真 */
if(value == 0) { ... }  /* 判断表达式的值是否为真 */
这两行代码中都有 value 变量,value 值虽然相同,但是判断的结果却不同。第 1 行代码判断的是 value 的值是否为真,第 2 行代码判断的是 value==0 这个表达式是否成立。

假定其中 value 的值为 0,那么在第一个 if 语句中,value 值为 0 即说明判断的结果为假,所以不会执行 if 后的语句。在第二个 if 语句中,判断的是 value 是否等于 0,因为设定 value 的值为 0,所以表达式成立,那么判断的结果就为真,执行 if 后的语句。

C语言if else语句

if 语句只给出了条件为真时要执行某个操作,并未给出条件为假时具体要干什么。如果想在条件为假时执行另外一段代码,需要利用 if else 语句来完成,其一般形式如下:
if(表达式)
{
   语句块 1;
}
else
{
   语句块 2; 
}

if else语句的执行流程如下图所示:


图 2 if else语句的执行流程图

在 if 后的括号中判断表达式的结果,如果判断的结果为真值,则执行 if 后的语句块内容;如果判断的结果为假值,则执行 else 后的语句块内容。也就是说,当 if 语句检验的条件为假时,就执行 else 后面的语句或者语句块。

例如:
if(value) {
   printf("the value is true\n");
} else {
   printf("the value is false\n");
}

注意,else 语句必须跟在一个 if 语句的后面,不能独立使用。


【实例 2】使用 if else 语句判断用户输入的数值。输入的数字为 0,表示条件为假;输入的数字为非 0,表示条件为真。
#include <stdio.h>

int main() {
    int iNumber; /* 定义变量 */
    printf("Enter a number\n"); /* 显示提示信息 */
    scanf("%d", &iNumber); /* 输入数字 */
    if(iNumber) /* 判断变量的值 */
    {
        printf("the value is true and the number is: %d\n", iNumber); /* 判断为真时执行输出 */
    }
    else {
        printf("the value is false and the number is: %d\n", iNumber); /* 判断为假时执行输出 */
    }
    return 0;
}
1) 程序中定义变量 iNumber 用来保存用户输入的数据,然后通过 if else 语句判断变量的值。

2) 用户输入数据的值为0,if语句判断iNumber变量,此时也就是判断输入的数值。因为0表示的是假,所以不会执行if后面紧跟着的语句块,而会执行else后面语句块中的操作,显示一条信息并将数值进行输出。

3) 从程序的运行结果也可以看出,当if语句检验的条件为假时,就执行else后面的语句或者语句块。

运行程序,结果为:
Enter a number
0
the value is false and the number is: 0

if else 语句也可以用来判断表达式,根据表达式的结果选择不同的操作。例如,某公司的薪酬设计如下:工龄在 5 年以上,工资=基本工资+全勤奖+2倍的全勤奖;否则,工资=基本工资+全勤奖。用 if else 语句判断并计算工资,具体代码如下:
#include <stdio.h>

int main() {
    int year, sal = 5000, bon = 300; /* 定义变量表示年数、基本工资和全勤奖 */
    printf("请输入您的工龄:"); /* 提示信息提示 */
    scanf("%d", &year); /* 输入工作年数 */
    if(year > 5) /* 如果工作年数在 5 年以上 */
        printf("您的工资为:%d\n", sal + bon + 2 * bon); /* 计算并输出工资 */
    else /* 否则,工作年数在 5 年以下 */
        printf("您的工资为:%d\n", sal + bon);
    return 0;
}
1) 在程序运行过程中,利用 printf() 函数先显示一条信息,提示用户输入一个数据,例如输入 3。这个数据的数值由变量 year 保存。

2) if 语句判断表达式 year>5 的真假:
运行程序,结果为;

请输入您的工龄:3
您的工资为:5300

注意,在使用 if 语句比较浮点数时,不要使用浮点值,这样就会导致实际结果的偏差,因为浮点值属于近似值。

C语言else if语句

利用 if 和 else 关键字的组合,可以实现 else if 语句。该语句可对一系列互斥的条件进行检验,从而解决较复杂的判断和决策问题。

else if语句的一般形式如下:
if(表达式 1) {
    语句块 1
} else if(表达式 2) {
    语句块 2
} else if(表达式 3) {
    语句块 3
}
...
else if(表达式 m) {
    语句块 m
} else {
    语句块 n
}
else if 语句的执行流程如下图所示:


图 3 else if语句的执行流程图

首先对 if 语句中的表达式 1 进行判断,如果结果为真值,则执行后面跟着的语句块 1,然后跳过 else if 语句和 else 语句,如果结果为假,那么判断 else if 语句中的表达式 2,如果表达式 2 为真值,那么执行语句块 2 而不会执行后面 else if 的判断或者 else 语句。当所有的判断都不成立,也就是都为假值时,执行 else 后的语句块 n。

使用多个 else if 语句时,要格外注意下方的复合语句(即语句块)部分,大括号一定要保证成对匹配。

【实例 4】利用选择结构设计一个程序,使其能计算如下分段函数:


当输入 x 值时,计算显示 y 值。具体实现代码如下:
#include <stdio.h>

int main() {
    int x, y;
    printf("请输入 x 的值:"); /* 定义变量 x,y */
    scanf("%d", &x); /* 输入 x 的数 */
    if(x < 1) { /* 判断输入的 x 是否小于 1 */
        y = x; /* 如果为真,将 x 的值赋给 y */
        printf("y=%d\n", y); /* 输出 y 的值 */
    }
    else if(x >= 1 && x < 10) { /* 判断输入的 x 是否大于等于 1 且小于 10 */
        y = 2 * x - 1; /* 如果为真,将 2*x-1 的值赋给 y */
        printf("y=%d\n", y); /* 输出 y 的值 */
    } else { /* x 为其他数值时 */
        y = 3 * x - 11; /* 如果为真,将 3*x-11 的值赋给 y */
        printf("y=%d\n", y); /* 输出 y 的值 */
    }
    return 0;
}
1) 程序中使用 printf() 函数显示一条信息,提示用户输入 x。这里假设输入的数字为 5,变量 x 将输入的数值保存,用来执行后续判断。

2) if 语句首先判断 x 是否小于 1,然后 else if 语句判断 x 是否大于等于 1 且小于 10,如果都不满足,则会执行 else 处的语句。因为 x 的值为 5,所以 x>=1&&x<10 关系表达式为真,执行相应 else if 处的语句块,输出提示信息。

运行程序,结果为:

请输入 x 的值:5
y=9

C语言if语句的嵌套

if 语句中还可以包含一个或多个 if 语句,此种情况称为 if 语句的嵌套。一般形式如下:
if(表达式 1) {
    if(表达式 2) {
        语句块 1
    } else {
        语句块 2
    }
} else {
    if(表达式 3) {
        语句块 3
    } else {
        语句块 4
    }
}
使用 if 语句的嵌套形式,可将判断的条件进行细化,从而实现更复杂的判断和操作。

这就好比人们在生活中随时在进行的多重判断和选择。每天早上醒来,我们通常会想一下今天是周几,如果是周末,就是休息日;如果不是周末,就要上班。同时,休息日可以是星期六,也可以是星期日,星期六我们可以和朋友去逛街,星期日我们可以陪家人在家。工作日如果是星期一,就要开工作例会,其他时间则正常上班。

如何用 if 语句来实现上述判断呢?这里就要用到 if 嵌套语句。

外层 if 语句的表达式 1 用于判断今天是否是周末,如果判断结果为真,则用一个嵌套 if else 语句,通过表达式 2 判断今天是否是星期日,然后再判断今天是不是星期六。如果为星期六,就陪朋友逛街;如果为星期日,就陪家人在家。

接下来返回外层,用 else 语句给出不是周末时的情况。这里同样要嵌套一个 if else 语句,通过表达式 3 判断是否是周一,如果是就开例会,否则就正常上班。

代码如下:
if(iDay > Friday) { /* 判断为周末的情况 */
    if(iDay == Saturday) { /* 判断为星期六时的操作 */
        // 星期六的操作
    }
    else { /* 为星期日时的操作 */
        // 星期日的操作
    }
} else { /* 不为周末的情况 */
    if(iDay == Monday) { /* 判断为星期一时的操作 */
        // 星期一的操作
    }
    else { /* 其他工作日时的操作 */
        // 其他工作日的操作
    }
}
if 语句、if else 语句、else if 语句可以根据需要互相嵌套。在复杂的嵌套中,一定要注意 if 与 else 的配对情况。else 总是与其前面最近未配对的 if 进行配对。

相关文章