
4.4 嵌套if语句形式
一个if语句又包含一个或多个if语句(或者说是if语句中的执行语句本身又是if结构语句的情况)称为if语句的嵌套。当流程进入某个选择分支后又引出新的选择时,就要用嵌套的if语句。
【例4.7】从键盘上输入三个互不相等的实数a,b,c,输出其中的最小值。
本题可以采用多种不同的if结构来解决,在此选择用嵌套的if语句来解决。程序流程图可参考图4-8。
扫一扫 看视频

程序代码如下:

程序的运行结果为:
Please input a,b,c:3.4 -56.7123<回车>
min=-56.700001(注:浮点型数据输出因存储问题会有细微误差)
相关知识5
嵌套if语句的标准语法格式如下:

其含义为:先判断表达式1的值,若表达式1为非0,再判断表达式2的值,若表达式2为非0,则执行语句1,否则执行语句2。若表达式1的值为0,再判断表达式3的值,若表达式3为非0,则执行语句3,否则执行语句4。其流程图如图4-8所示。

图4-8 嵌套if语句的流程图
这种在if语句中本身又包含if语句的选择结构,常用于解决比较复杂的选择问题,其中的每一条语句都必须经过多个条件共同决定才能执行(如同行人要到某个目的地,只有在每个十字路口都做出正确选择后才能到达一样)。
有关嵌套if语句使用的几点说明:
①嵌套if语句的使用非常灵活,不仅标准形式的if语句可以嵌套,其他形式的if语句也可以嵌套;被嵌套的if语句可以是标准形式的if语句,也可以是其他形式的if语句。例如:

②被嵌套的if语句本身又可以是一个嵌套的if语句,称为if语句的多重嵌套。
③在多重嵌套的if语句中,else总是与离它最近并且没有与其他else配对的if配对。
知识拓展
嵌套在C语言程序设计中是一种常见的结构,在某一个结构中的某一条执行语句本身又具有相同的结构时,就称之为嵌套。C语言中常见的嵌套结构有选择结构的嵌套、循环结构的嵌套、函数调用的嵌套等,在后面的章节中也将常常遇到不同的嵌套结构,可以仿照if语句嵌套来理解。
注意:按上面所述的if与else配对的关系,应该能够分清楚if与else之间的匹配关系。嵌套if语句的书写风格,应该把处于同一逻辑意义上的语句写在同一列上,使程序从形式上更清晰、更美观。这种缩进格式只是略微增加了源程序的长度,编译后目标程序丝毫不会受到影响,因此大可不必担心采用缩进格式后程序会变臃肿。