当前课程知识点:C语言程序设计(上) > 选择结构的程序设计 > 3.1 程序中的路径选择实现 > 3.1.1_2 神奇的if_else
大家好
我们今天开始讨论
第三章的第一个实质的问题
程序中的路径
路径选择如何实现
我们后面给一个黄色的标题
if else有什么神奇呢
我们在前面很多地方都提到了if
我们说它的神奇之处
只是想说它的功能
所有程序设计里边的选择路径的实现
都可以用if else来实现
那我们今天讨论两件事儿
那么 我们再给一个例子
一元二次方程如何求解
那我们大家看
神奇的if else的面貌是什么呢
在这里边
如果它有选择出口会在哪里
前面我们很多次的举到过一个例子
看学生的成绩
是不是需要补考
谁需要补考
我们用了关系运算作条件判断
来做了这个问题的实现
那我们看 它实现的功能是
是不是条件是这样构建
这个成绩小于60分么
如果小于60分
咱就打印一个补考通知单
打印补考通知单的这件事情
就是我们选择了这一条路径以后
要实现的一个功能
要完成的一个任务
那C给的语句格式是这样
如果 条件满足的话
条件在哪呢 就在这
成绩小于60分吗
这是这个例子里边的条件
如果条件满足
就去做语句组里边的事
我们这块说语句组
是说它可以是一句话
也可以是多句话
复杂程度取决于
你要做的这件事情的复杂程度
那么这一块的语句组
对这个例子来说
它就是打印补考通知单这件事
你要打印的复杂 你就好多句
比如说打印一个表格
你要就打印告诉你说补考一句话
那就是一个print函数的调用就可以了
那我们怎么把这个C给的if语句
用到我们的问题里呢
这样写
如果
成绩放在x变量里
小于60分的话
我们就打印补考通知单
这就是现在说的
语句组实现的功能
实际上这里边就一句函数调用
我们在这强调的是
语句组
就对应的你要选择好了的那条路径
要做的事情
我们看这个程序
在这块我们现在说
if后边跟着的要做的事情
不是一句话
我们打印了一个表格
上面一条横线
下边又一条横线
下边打印的这块是说
先把这个同学的成绩打印出来
然后告诉你说
你要不要补考
那你不要补考的
成绩要是大于等于60分
我们的条件现在换成了
不是小于(60分)
不是要补考的了
而是说 这同学的成绩
大于等于60分的话
就是及格了 OK
当然
要想换成打印补考通知单呢
是怎么做呢
那当然就是我们刚才在这个
x小于60分么
如果是 打印补考通知单
那我这块是想强调什么呢
强调语句组
这块到底是一句话
还是多句话
是看你做的事情
必要输出的效果
我们通常把
if后边跟着的语句组
叫做if块
所以这个块的大小
是根据实际情况去做的
我们把这种结构叫单选择
但是
我们题目里边现在讨论的要是
两条路径里边必须选一条
那我们看一下
还是打印同学成绩单
新问题是什么呢
新问题是说
就我们刚才已经打印了
这个OK了
我们看一下
那这个功能就会变成
条件
选择这个条件
满足这个条件 你做一件事
不满足这个条件 你做另一件事
那我们按照刚才的说法是说
满足条件这是那个if块
否则就是 else要实现的功能
那把它对等到
我们刚才的例子里去说的话是
成绩大于等于60分的话
你就yes 打一OK
否则打一NO
那 否则 这件事情谁实现的呢
else
所以 if和else联手的话
它实现了两条路径里边选一条
那实现的
如果 条件满足
那么你就做这件事
否则你就做那件事
两条路径里边选择一条
如果实现这个功能
必须是if if加else这样的结构
if后边一个块
else里边一个块
这种应用其实是很多的
比如说
交款通知
比如说交水电费
你这水电费在一个额度下
你是这样交
超过了那个额度 你就那样交
那我们判断的时候是说
你是在这个额度下吗
这样计算一个电费 你去交
否则你按那个计算方法去交
比如说高考录取通知书
考上了还是没考上
考上哪个学校啦
你打印的东西就不一样
包括数学运算 等等
两条路径里边选一条
这是if else
当然用if else构建起来
n多条路径里边选一条这样的
这是我们后边要讨论的事情
这是这个流程
是我们实现的双选择
双选择 两条路径里边选一条
C里边给我们的语句格式是
if 条件
下来是if块
否则 else
给的是else块
那我们在这里边
如果
条件满足 打印通过
否则 打印补考
这就是我们刚才的例子
那我们把这个例子里边
做一点讨论是说
它做了 比如说
这个同学通过了 OK了
它完了会不会再到
打印 NO 那去呢
不会
这块我们是说
它的出口在哪里
出口在哪呢
这是它的入口处
入口处
那出口在哪呢
出口处
如果我们走了
yes
成绩大于等于60分
打印完了 自动到这
这时候不会再回去
走else这个块
所以出口是一个
入口也是一个
那我们这里边强调的是
这两个块里边
必须只做一个
只能做一个
就是说 不可以不做
也不可以说做了两个
所以出口在哪里
在同一处
那我们看一下这个程序
在这个程序里边
如果 x大于等于60分
是及格了
这是我们的if块
否则这下边是else块
我们把这个块再加上
前边的一个main
构成了一个完整的程序
大家看这一块还差什么
是不是差最后的一个花括号
这样构成了一个完整的程序
所以呢
我们这里边要讨论的问题是
if块和else块
可以是复杂问题吗
当然可以
它里边可以嵌透的再是if else
或者别的更复杂的结构
是在于你要完成的事情的
功能的大小
我们刚才说
然后呢
双选择
两条路里选一条
还是说
只选择这件事情做不做
仅仅在于说
这个else里边有没有事情要做
如果没有就没有else
如果有
就是典型的if else这样一个结构
我们大家回到这个边映环境下
看一下这个程序
这个程序里边就剩了简单的几句
float x 我们用x来存放成绩
然后读进了x
下边做的是什么事情呢
我们看一下
打印了一行星号
再打印把x输出
并且说 OK
那是说一定是这成绩是通过了的
所以呢
这块 我们的判断条件
不要大写 关掉
if后边给一个条件
这个条件现在只能是
大于等于60
因为下边说是通过了
这才符合我们现在所要的是通过了
那就是说
通过了你给我打印这个块
要没通过呢
什么都没做 目前的
目前的程序这样
那就是我只有一个if块
没有else
好可以停一下
我们给一个边界值 60
应该是 OK
好 没有问题
那我们应该要给一个不及格的话呢
我给一个40分
它应该是什么都没做
好 什么都没做
这是单选择
符合这个条件 做这件事
否则 什么都没做
顺序往下走
出口在这
那我们如果现在说
没有及格
你给我打印没及格
那我一定就要借助else了
else底下做什么呢
做的跟if块
长的样子差不多
那我们就不用敲了
把它复制回来
只是说这不是OK了
是 NO
好 还得大写
这个现在就实现的是
这两个字行我们把它拿掉
那实现了什么功能呢
及格了 if块
不及格 执行else块
来看一下
含60边界
好 这没有问题
那我们不及格
59分呢
就是我不是什么都没做
是说 你得了59分没通过
好 回来
我们看到刚才这个情况
咱把这个关闭
给了下边一个干净的环境
同学会觉得说
我们平常调试程序没这么顺利
总是会出问题
那么 每一个语言环境
都给了大家调试的一些帮助
比如说
dvc给大家的是什么帮助呢
我们点运行下边
有一个调试
就是说你哪里出了问题
你可以在哪里设断点
然后呢
看你的问题到底是为什么出的
比如说这个程序
我们随便点一下
我们看这一边是导航编号
我就在第一行上
点一个
我想在这断
我想断了看什么呢
我想单步操作
你想看什么呢
比如说
我想看这里边的
x变量的变化
我选中它击右键
添加查看
现在告诉我的说
你这x里边可是现在没有东西
是你什么都没读进来呢
那我现在这种情况下
我什么时候会变得有东西呢
执行了scanf后会吗
我让它单步执行
单步执行我们刚才说
在这点调试或者F5
都一样
点了调试 大家看
下边马上出来一个
很多功能的一个界面
这个界面里大家看
有添加查看
像刚才
我们说
x里边现在已经变成有东西了
有东西了 scanf执行了吗
没有执行
是程序进入运行状态以后
这个x是一个随机数
我们又没有送进去
它是一个随机数
这就是我们强调的说
x你可不敢赋值你就用啊
必须先赋值后使用
就这个道理
它本来里边是一个随机数
那我再执行下一步的时候
大家看是什么样子呢
这个
程序当前已经到了scanf这
为什么会一下子蹦到这呢
没有停在main和float呢
是因为它们都是非执行语句
不会被执行的
只有到scanf才是
函数调用
下一步
好 我执行了下一步
大家看
这里边呢
我输入一个45
不及格
它应该直接到了else块
我们看直接去了么
去了么
没有啊
是在下一步还没判断呢
好了 在这执行
关系运算
45 看
点到这
说告诉你x现在是45啊
45大于等于60吗
做了关系运算
走下一步
直接到了
没有停在else
为什么呢
else
是非执行的一个格式 形式
这printf才是直接执行的
函数调用
那我再点
那这个printf的结果在哪呢
执行了还是没执行
一看这样子就是它还没被执行
下一步它就执行了
我再下一步
第二行执行了
再下一步
这三行执行完了
我们回来看
是这样的
到了出口处
这时候你要再下一步到哪呢
没看见
你就完了
所以呢 大家看见是不是说
当我判断
不满足条件的时候
我就直接进了else块
而满足条件的时候
我们再给一个
满足条件的运行
大家看这个运行
我要从头再来一次的话
它已经到了scanf处啦
我给一个68
大家看
已经执行了
没有在刚才的界面处
那你还想回到刚才的界面处
别忘了
F5
这才是单步
那 我现在在这执行scanf
你要去输入
68 回车
然后呢
执行判断
下一步
到哪啦
没有到else
因为我们刚才给的多少 看
x是68
那一定执行的
x68大于等于60吗
一定执行的是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