目录
一.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”,输出,输出“您可以吃到十元的甜粽子”。实现具体代码如下:
#includeint 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");elseprintf("您不可以吃到甜粽子\n");}else{if(money>=4&&money=12)printf("您可以吃到十二元的咸粽子\n");elseprintf("您不可以吃到咸粽子\n");}return o;}
总结:
顺序结构程序设计最简单,但通常无法解决生活中的选择性问题。选择结构程序设计如果用到一些条件判断语句,可实现的程序功能更加复杂,程序的逻辑性和灵活性也更加强大。