目录
一.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;
}
总结:
顺序结构程序设计最简单,但通常无法解决生活中的选择性问题。选择结构程序设计如果用到一些条件判断语句,可实现的程序功能更加复杂,程序的逻辑性和灵活性也更加强大。