当前课程知识点:C语言程序设计(上) > 选择结构的程序设计 > 3.2 路径中的再选择——嵌套判断 > 3.2.1_1 if语句的嵌套
接下来我们继续进一步的讨论
关于路径中的再选择
所谓再选择就是说
这个条件不简单
可能说一次判断两次判断
并不能得到我们想要的结果
并不能使得程序
选定了它要走的流程
这就是在C里边
或者在别的程序语言里边也是一样的
有一个嵌套的判断的问题
比如说我们前面遇到的
三个任意数a b c的排序问题
记得我们当时在表达这个流程的时候
描述这个流程的时候
就是非常庞大的一个分支
就是选择了五次
得到了六个输出
是这样子选择了五次
用我们前面讨论过的说
双选择的话
我们只能在两条路径里边选择
两条路径里边选一个
而这五次判断
说明它可能有的是五条路径
这样的问题怎么做
我们还把以前的这个流程
就是三个任意数的排序问题这个流程
我们再看一下
我们做的是先做
a大于b吗这样的判断
流程走了两个方向
但是这两个方向
都不能够
最终得到这个程序的流程走向
无论a是大于b
还是不大于b
都需要做进一步的判断
才能够决定流程的走向
我们现在展开了一个分支
比如说a大于b 是的
a是大于b
我们并不能决定
只能决定a和b的关系
并不能决定c和它们之间的关系
需要进一步的判断说
c大于a吗
如果是a大于b并且c也大于a
我们得到了什么
它的排序从大到小是c a b
不是
就是说a大于b了但是却c不大于a
那就还要走一条路径
这个路径里也还不简单
我们还要把c和b做比较
c大于b吗
如果是 那你才是a c b
否则是a b c
在这个a大于b吗
这个双向选择里边
选择了yes 是的
在这个是的里边
我们又做了两次判断
在这个if块里边
我们还继续了两次判断
如果我们要再考虑else这个块
else这个块的话这里边仍然一样
又做了两次判断
这连第一次的一级的二级的三级的
这个判断一共有五次判断
最终无论这五次判断是走了哪一个
最终都会有一个输出
而且只能有一个输出
最后输出完了程序存在结束
这是三个任意数排序的
我们最直接的一个流程的一个走向
这里边我们在考虑是什么
在这个if的语句里边
不管是if块还是else块里边
嵌套了下一级
再一级的判断
嵌套了再一阶的判断
所以我们把路径的再选择
就是直到得到流程 就是程序的走向
非常确定它知道向哪里去为止
这个在C里边
用什么样的语句形式来表达
这样的语句格式if else
跟前面说的神奇的if else是一样的
只不过说在这个if块里边
它还可以用的是一个if else结构
在else块里边
也可以用的是一个if else的
这样的一个结构
这个结构里
这个if块里边只要它不是一句话
我们就会用一对花括弧把它括起来
无论是if还是else
这怎么没有括
我们看这呢 这是两行
这种情况就是一个标准的什么
我们的标题里边是嵌套
标准地嵌套了另一个if结构
一个完整的if else的结构
这个if后边
无论它的语句跟了多少个语句
只在这个语句块后边加花括弧
这个if else
整体结构只要是完整的
你可以不加
那这样的话 它的功能是什么呢
先做if else的这个选择
进入了这个选择的相应的块之后
再做进一步的判断
所以我们这个标题里边说
路径中的再选择
就是靠嵌套的这个if else来完成的
我们通常把外围的if else
叫做外层的if
把里边嵌套的这个叫
这两种 不管嵌到if块里边
还是else块里边
叫内嵌的if
所以呢 就是说
我们在这要讨论的一个问题说
如果在这个if表达式1里边
这个语句11里边 还可以再嵌吗
可以呀 if里边可以再嵌if
那第三层的if里边也可以再嵌if
C对这一块的要求它是没有限定的
如果这个无限制的嵌下去嵌几十层
你再程序的给优化
就是一个非常值得考虑的问题
那我们还拿三个任意数排序的问题
我们把它的程序写出来
大家看一下 就是对这个流程
if块 这边是else块
那这个看上去比较小
我们把它框一下
绿颜色的这一块
就是我们先做的if块 是这边的
红颜色的紫的这一块
而下边白颜色的表达的是这边的
else的块
那在这个块里边
大家非常清楚的看到
这里边嵌套了谁 我们把if块放大一下看
这是if块 绿颜色的if块里边
我们看这是if c大于a吗
是在这的 c大于a吗
如果是的 满足了这个条件为真
我们就做了printf 做了这一步这个工作
输出c a b
否则 需要再判断
在这个else里边 又嵌套了一层if
如果c大于b的话 做到这步
那输出的是这个
否则 输出的是哪呢
就是a b c
那么我们看一下
这个嵌套里边
这个else 和哪个if呢
一定是和离它最近的if去匹配
而这个else 是和谁呢
和离它最近的去匹配
这块大家会不会担心说这个else
怎么不会与这个if去匹配呢
这个语言的规则是
离它最近的if去匹配
-1.1 计算机的问题求解方法
--讨论题:数学模型
-1.1 计算机的问题求解方法--作业
-1.2 C语言与C程序
--讨论题:运算符
-1.3 C语言处理系统与程序调试运行
--例程
-1.4 程序中的人机交互
--例程
--作业讨论区
-2.1 算术运算的C程序实现
--算术混合运算.c
-2.1 算术运算的C程序实现--作业
-2.2 关系运算的C程序实现
--bukao.c
--字符比较.c
--讨论题:比较大小
-2.2 关系运算的C程序实现--作业
-第二周作业--作业
-2.3 逻辑运算的C程序实现
--计算结合性
--闰年.c
--自动购票问题.c
-2.3 逻辑运算的C程序实现--作业
-2.4 位运算的C程序实现
--讨论题:位运算
-2.5 几种很个别的运算
--讨论题
--讨论题
-2.5 几种很个别的运算--作业
-2.6 混合运算及数据类型转换
--讨论题:数据类型
-2.7 顺序结构程序实例
--Video
--三角形面积.c
--讨论题:工业产值
-2.7 顺序结构程序实例--作业
-3.1 程序中的路径选择实现
--打印学生成绩.c
--一元二次方程.c
-3.1 程序中的路径选择实现--作业
-3.2 路径中的再选择——嵌套判断
--例程
--讨论题:程序改错
-3.2 路径中的再选择——嵌套判断--作业
-3.3 复杂判断问题的C程序设计
--3.3 多级选择
--银行存款.c
--讨论题:多级选择
-3.4 多分支问题的C程序设计
--加减乘除运算.c
-3.4 多分支问题的C程序设计--作业
-3.5 GOTO的适当使用
-3.6 选择结构的程序实例
--3.6 程序展示
--计算第几天.c
--讨论题:输出奇数
--讨论题:计算税金
-3.6 选择结构的程序实例--作业
-第四周作业--作业
-4.1 需要重复执行的程序
--求和.c
--打印学生成绩.c
--统计录入速度.c
--求平均数.c
-4.1 需要重复执行的程序--作业
-4.2 至少要执行一次的循环
--n的阶乘.c
--字符分类统计.c
-4.2 至少要执行一次的循环--作业
-4.3 已知循环次数用for语句
--求和问题.c
--数列求和.c
--讨论题:循环语句
-4.3 已知循环次数用for语句--作业
-4.4 循环控制——简单循环应用
--水仙花数.c
--讨论题:死循环
--讨论题:猜数字
-循环结构的程序设计(一)--4.4 循环控制——简单循环应用
-4.5 循环的嵌套
--讨论题:程序运行
-4.5 循环的嵌套--作业
-4.6 break与continue
--最大素数.c
-4.6 break与continue--作业
-4.7 循环的综合应用
--数的排列组合.c
--鸡兔同笼.c
--打印空心字符.c
--讨论题:打印图形
--讨论题:计算闰年
-第六周作业
-第六周作业--作业
-5.1 同类有序数据处理问题
-5.2 一维数组的定义和引用
--数组定义.c
--数组初始化.c
--反向输出.c
--讨论题:对称数
-5.2 一维数组的定义和引用--作业
-5.3 一维字符串数组
--讨论题:编程
-5.4 字符串处理函数
--字符串反向.c
--字符串函数
-5.5 二维数组的定义与使用
-5.6 二维数组的输入输出
-5.6 二维数组的输入输出--作业
-5.7 二维数组的应用
--转置矩阵.c
--讨论题:修改程序
-5.8 二维字符数组
--5.8 单词排序
--单词排序.c
-5.8 二维字符数组--作业
-5.9 数组综合应用
--统计成绩.c
--统计字符次数.c
--讨论题:洗牌
-本期课程结束语
--end
-第八周编程作业
-《C语言程序设计(上)》期末复习参考
--html
-《C语言程序设计(上)》期末复习参考答案
--html