当前课程知识点:C语言程序设计(上) >  选择结构的程序设计 >  3.1 程序中的路径选择实现 >  3.1.1_2 神奇的if_else

返回《C语言程序设计(上)》慕课在线视频课程列表

3.1.1_2 神奇的if_else在线视频

3.1.1_2 神奇的if_else

下一节:打印学生成绩.c

返回《C语言程序设计(上)》慕课在线视频列表

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块

大家是不是看见了

插入断点

包括你左边窗口里边的

你看你的变量的值

以及这种单步操作下一步的方式

是非常好的

跟踪与程序调试的一个方式

相信大家呢

随着后边给的你的作业练习

比较多的时候

大家会碰到一些麻烦

这个方法

不失为一个比较好的方法

C语言程序设计(上)课程列表:

从问题到C语言程序设计

-1.1 计算机的问题求解方法

--1.1.1--程序设计面向的问题

--1.1.2--关于计算

--1.1.3-1关于算法-算法的特征

--1.1.3-2关于算法——算法的表示

--1.1.3-3关于算法——算法的优化

--1.1.4-1-程序设计方法

--1.1.4-2-程序设计方法

--讨论题:数学模型

-1.1 计算机的问题求解方法--作业

-1.2 C语言与C程序

--1.2.1-1-C概述

--1.2.1-2-C概述

--1.2.2-C初步

--讨论题:运算符

-1.3 C语言处理系统与程序调试运行

--1.3.1C程序如何调试运行

--1.3.2常用C语言处理系统

--1.3.3DEVC++的使用-v1

--1.3.4C语言概貌小程序

--例程

-1.4 程序中的人机交互

--1.4 printf用法

--1.4.2 scanf的用法

--例程

--作业讨论区

数据计算实现与顺序结构程序设计(一)

-2.1 算术运算的C程序实现

--2.1.1 第二章

--2.1.2 C语言算术表达式概念

--2.1.3 算术运算的实现

--2.1.4 整数相除

--2.1.5 输入格式造成的计算错误

--2.1.6 求余运算

--2.1.7 自增自减运算

--2.1.8 复合运算

--fangcheng.c

--fangcheng-1.c

--fangcheng-2.c

--fangcheng-3.c

--fangcheng-4.c

--算术混合运算.c

--讨论题:自增自减符

--讨论题:程序输出结果

--讨论题:程序运行结果

-2.1 算术运算的C程序实现--作业

-2.2 关系运算的C程序实现

--2.2.1 关系比较问题

--2.2.2 C语言关系表达式

--2.2.3关系运算优先级

--2.2.4 用关系运算做判断条件

--2.2.5 程序实例

--2.2.6 字符比较

--bukao.c

--pingshifen-1.c

--panduanzhengshu.c

--pingshifen-2.c

--字符比较.c

--讨论题:比较大小

--讨论题:程序的运行

-2.2 关系运算的C程序实现--作业

-第二周作业--作业

数据计算实现与顺序结构程序设计(二)

-2.3 逻辑运算的C程序实现

--2.3.1 逻辑运算问题~1

--2.3.2 逻辑运算表达式

--2.3.3 如何判断闰年

--2.3.4 逻辑运算优先级

--2.3.5 条件运算符

--计算结合性

--2.3.7 一个简单实例

--闰年.c

--自动购票问题.c

--讨论题:逻辑表达式

-2.3 逻辑运算的C程序实现--作业

-2.4 位运算的C程序实现

--2.4.1 什么是位运算

--2.4.2 位运算有哪些

--2.4.3 位运算怎么用

--讨论题:位运算

-2.5 几种很个别的运算

--2.5 几个很个别的运算

--讨论题

--讨论题

-2.5 几种很个别的运算--作业

-2.6 混合运算及数据类型转换

--2.6 混合运算及数据类型转换

--讨论题:数据类型

-2.7 顺序结构程序实例

--2.7.1 第一个程序:三角形

--Video

--三角形面积.c

--讨论题:工业产值

--讨论题:程序无效结果

-2.7 顺序结构程序实例--作业

选择结构的程序设计

-3.1 程序中的路径选择实现

--3.1.1_1 第三章

--3.1.1_2 神奇的if_else

--打印学生成绩.c

--一元二次方程.c

-3.1 程序中的路径选择实现--作业

-3.2 路径中的再选择——嵌套判断

--3.2.1_1 if语句的嵌套

--3.2.1_2三个数排序1029

--例程

--3.2.2 用户登录检查

--三个数排序_未优化.c

--三个数排序_优化.c

--讨论题:程序改错

-3.2 路径中的再选择——嵌套判断--作业

-3.3 复杂判断问题的C程序设计

--3.3 多级选择

--银行存款.c

--讨论题:多级选择

-3.4 多分支问题的C程序设计

--3.4.1 switch语句表达式

--3.4.2 加减乘除计算

--3.4.3 几类说明

--加减乘除运算.c

--讨论题:关于switch

-3.4 多分支问题的C程序设计--作业

-3.5 GOTO的适当使用

--3.5 GOTO的适当使用

-3.6 选择结构的程序实例

--3.6 程序展示

--计算第几天.c

--存款利息__switch实现.c

--讨论题:输出奇数

--讨论题:计算税金

-3.6 选择结构的程序实例--作业

-第四周作业--作业

循环结构的程序设计(一)

-4.1 需要重复执行的程序

--4.1.1----第四章~1

--4.1.2---while实现先判断后循环~1

--4.1.3----while循环的应用-录入速度~1

--求和.c

--打印学生成绩.c

--统计录入速度.c

--求平均数.c

-4.1 需要重复执行的程序--作业

-4.2 至少要执行一次的循环

--4.2.1至少要执行一次的循环

--4.2.2-do-while循环应用

--成绩录入_do while实现.c

--n的阶乘.c

--字符分类统计.c

--讨论题:关于while

-4.2 至少要执行一次的循环--作业

-4.3 已知循环次数用for语句

--4.3.1--用for语句控制循环次数

--4.3.2--循环的应用-求和

--求和问题.c

--斐波那契数列问题.c

--数列求和.c

--讨论题:循环语句的不同

--讨论题:循环语句

-4.3 已知循环次数用for语句--作业

-4.4 循环控制——简单循环应用

--4.4.1-循环的应用-找数-水仙花数

--4.4.2--循环的应用-求素数

--水仙花数.c

--讨论题:死循环

--讨论题:continue和break

--讨论题:猜数字

-循环结构的程序设计(一)--4.4 循环控制——简单循环应用

循环结构的程序设计(二)

-4.5 循环的嵌套

--4.5.1 循环的嵌套——九九乘法表

--4.5.2 循环的嵌套——打印三角形

--打印九九乘法表.c

--打印实心三角图案.c

--打印空心三角图案.c

--讨论题:程序运行

-4.5 循环的嵌套--作业

-4.6 break与continue

--4.6 循环中断与继续循环——break再讨论

--最大素数.c

--求正数个数及平均数.c

-4.6 break与continue--作业

-4.7 循环的综合应用

--4.7.1 数的排列组合问题

--4.7.2 循环综合应用——穷举算法

--4.7.3 循环综合应用——满足条件的数

--4.7.4 循环综合应用——求最后三位数

--4.7.5 循环综合应用——打印空心图案

--数的排列组合.c

--数的排列组合优化.c

--鸡兔同笼.c

--找满足条件的数.c

--输出14的13次方的最后三位数.c

--打印空心字符.c

--讨论题:打印图形

--讨论题:打印空心图形

--讨论题:计算闰年

-第六周作业

--虚拟实验:循环程序设计实验

-第六周作业--作业

数组(一)

-5.1 同类有序数据处理问题

--5.1.0 数组开篇

--5.1.1 同类有序数据存储问题

--讨论题:下标变量与下标

-5.2 一维数组的定义和引用

--5.2.1_1 数组的定义~1

--5.2.1_2 数组的初始化

--5.2.2 一维数组的输入输出

--5.2.3 一维数组的应用1--成绩排序(选择法)~2

--5.2.4 一维数组的应用2--Fibonacci数列

--数组定义.c

--数组初始化.c

--输出大于平均值的数.c

--反向输出.c

--选择法_成绩排序.c

--求斐波那契数列前n项.c

--讨论题:对称数

--讨论题:关于'\0'

-5.2 一维数组的定义和引用--作业

-5.3 一维字符串数组

--5.3 一维字符串数组11.24~1

--用函数测试字符串长度.c

--讨论题:编程

-5.4 字符串处理函数

--5.4 字符数组的输入与输出

--字符串反向.c

--字符串函数

--讨论题:程序如何运行

--讨论题:黑色星期五

数组(二)

-5.5 二维数组的定义与使用

--5.5 二维数组定义

--二维数组的定义与初始化.c

-5.6 二维数组的输入输出

--5.6 二维数组的输入与输出

--二位数组输出_矩阵输出.c

--讨论题:随机数据存储

-5.6 二维数组的输入输出--作业

-5.7 二维数组的应用‍

--5.7.1二维数组的应用-转置矩阵

--5.7.2 用一维数组方式引用二维数组元素

--转置矩阵.c

--找二维数组最大数.c

--讨论题:修改程序

--讨论题:关于随机数函数 rand()

-5.8 二维字符数组

--5.8 单词排序

--单词排序.c

--讨论题:回文字符串

-5.8 二维字符数组--作业

-5.9 数组综合应用

--5.9.1 应用1——学生成绩统计

--统计成绩.c

--5.9.2 应用2——删除重复字符

--删除串中的重复字符串

--5.9.3 应用3——统计字符

--5.9_4数组的应用4--矩阵相乘

--统计字符次数.c

--讨论题:洗牌

-本期课程结束语

--end

-第八周编程作业

--虚拟实验:冒泡排序算法程序设计实验

期末复习

-《C语言程序设计(上)》期末复习参考

--html

期末复习答案

-《C语言程序设计(上)》期末复习参考答案

--html

3.1.1_2 神奇的if_else笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。