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(day>friday)             //判断为周末的情况
{
    if(day==saturday)      //判断为星期六的操作
        {   }
        else               //为星期日的操作
        {   }
}
else                       //不为周末的情况
{
    if(day==monday)        //判断为星期一时的操作
    {    }
    else                   //其他工作日时的操作
    {    }
}    

三.注意.

if 语句,if...else 语句,else if 语句可以根据需要互相嵌套。在复杂的嵌套中,一定要注意 if 与 else 的配对情况,else总是与前面最近的未配对的 if 进行配对(就近原则)。

前面介绍过,if 的语句中如果要执行的操作只有一个语句。可以不写大括号。这里是否也可以呢?修改一下上面的代码,让其先判断是否为工作日,在工作日中只判断星期一的情况,然后再判断周末时的情况。代码如下:

if(day<=fridy)             //判断为工作日的情况
    if(day==mondy)           //判断为星期一时的操作
    {   }
else//粗体
    if(day==saturday)       //判断为星期六时的操作
    {   }
    else
    {   }

四. 写这段代码时,我们的设想是先判断是否为工作日,如果是工作日,则判断是否是星期一;如果不是工作日,则判断是否是星期六,否则就是星期日。但因为 else 总是与其前面最近且未配对的 if 进行配对,所以粗体处的 else 不会与第一个 if 语句(if(day<=friday))配对,而且会与第二个 if 语句(if(day==monday))配对,从而形成一个整体内嵌语句块,偏离了设计的初衷。此时的递进层次如下:

if(day<friday)
    if(day==monday)
    {   }
    else                         //内嵌 if 语句块
        if(day==saturday)
        {   }
        else
        {   }

如果为最外层 if 语句后的语句块加上大括号,就可以避免出现这种情况了。因此建议大家在条件判断中即使只有一个语句,也要用大括号进行层次划分。

六.具体实例1:

粽子有甜的,有咸的。甜粽子有五元的和十元的,咸粽子有四元和十二元的。编写程序,根据输入的口味和钱数,判断并打印出能吃到那种粽子。其他数字代表选择咸粽子。用户输入“1”和“12”,输出,输出“您可以吃到十元的甜粽子”。实现具体代码如下:

#include<stdio.h>
int main()
{
    int type,price;  //定义变量type表示粽子口味,money表示钱数
    printf("数字1表示甜粽子,否则就是咸粽子n");
    printf("请输入粽子口味和可支付金额:");
    scanf("%d,%d",&type,&money);
    if(type==1)
    {
        if(money>=5&&money<10)
            printf("您可以吃到五元的甜粽子n");
        else if(money>=10)
            printf("您可以吃到十元的甜粽子n");
        else
            printf("您不可以吃到甜粽子n");
    }
    else
    {
        if(money>=4&&money<12)
            printf("您可以吃到四元的咸粽子n");
        else if(money>=12)
            printf("您可以吃到十二元的咸粽子n");
        else
            printf("您不可以吃到咸粽子n");
    }
    return o;
}

总结:

顺序结构程序设计最简单,但通常无法解决生活中的选择性问题。选择结构程序设计如果用到一些条件判断语句,可实现的程序功能更加复杂,程序的逻辑性和灵活性也更加强大。