当前课程知识点:C语言程序设计(上) >  数据计算实现与顺序结构程序设计(二) >  2.3 逻辑运算的C程序实现 >  2.3.4 逻辑运算优先级

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

2.3.4 逻辑运算优先级在线视频

2.3.4 逻辑运算优先级

下一节:2.3.5 条件运算符

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

2.3.4 逻辑运算优先级课程教案、知识点、字幕

看完这个程序的运行

我们回头来讨论一下

关于逻辑运算的优先级

这么长的一个式子

这个优先级的问题

不解决好

这个式子的结果就是不可信的

我们拿这个式子来看

咱还把这个与的后边的这个判断

用不等于0这个式子来表达

那么这里边的优先级是怎么样

我们从头看

C永远都是从前往后做一件事

它碰到的第一件事情有没有障碍

没有障碍

它不管后边的谁的优先级高

谁的优先级低

都没有关系

只要不影响我此刻的运算

我此刻做的这运算是求余

求余下来是做一个关系比较

它两者是它的优先级高

那先做它不管后边

先做它

求下来的余数

和下一个去比较

下一个是关系运算符和逻辑运算符

谁的级别高

当然是关系运算符的优先级别高

所以在这块

第一步是先做求余

第二步做的是关系比较

前边两步做完了以后

我们大家看该做第三步了

第三步用遇到的运算符是与

与谁呢

与这个变量

这个变量的后边是求余

好了 与和求余这两个运算符

取运算级别高的

那后边的运算级别高

那前边的放下

先做后边的求余

求余完了以后是不是就可以与了

还要看

这个与和后边的下一个运算符

谁的级别高

那与和关系比较

关系比较高

所以下一个级别是做这个

做完以后

再看可以做与了吗

还是要看与和下一个运算符

谁的级别高

与和或相比

与的级别高

所以做与

剩下来

这前边已经得到了一个结果

我再做这个或

做不做这个或

这个是值得大家讨论的一个问题

在一般的计算机语言里边

是要把这个式子做完的

一直算到完

最后得到一个整个表达式的结果

但是我们说

咱开始在讨论C的时候

我们没有给大家

掰细了说这个C的优势都什么什么

但是

它其中有一个非常突出的优势

是它的运算效率高

运算效率高

其中

在它的表达式计算的优先级这块

是一个重要的因素

怎么讲

我们这个例子里边说

这个式子整个是

前半段和后半段做了或运算

这个或后边的运算要不要做

是取决于

前边的这个运算

得到的是真值还是假值

如果前边的运算已经得到了真值

对或而言

一个真两个真

结果都是真

那何必要算第二个真

也就是说对这个或运算而言

如果第一个

前边已经得到了一个真值

就决定了这个式子的结果是真值

那后边C就是能及时判断

我算到这已经

得到了这个表达式的结果

我后边就不再做了

所以提高了它的运算的效率

那什么情况下需要做后边

前边运算的结果为假为0

那我要看后边是不是为真

如果后边为真式子的结果仍然为真

因为这是或的功能

接下来关于优先级还来做一点讨论

我们把这个式子做一个变化

大家看一下我把或

本来在后边的式子搬到了前面

把前面这一长串放在了后边

我们看大家这个结果会怎么样

第一个

第一步当然算的是求余

因为后边是关系运算

第二步呢

算的是关系比较

这样的话只算了两步

我就可以得到这个结果

这个结果如果是1

那这个式子的后边整个就不要算了

所以在这个逻辑运算的优先级方面

还是写式子的时候就说

你这个程序就是一个优秀的程序员

它是会自觉不自觉的

把这块写在前边

如果前边得到了结果

后边就不用运算了

这样的话使得运算效率提高

这里边我们就非常关注它的优先级

对逻辑运算 我们刚才说了

它的运算级别是这样

与运算高于或运算

然后而非运算

是它一共只有这三个

与 或 非

大的原则是

单目运算符的级别高于

双目运算符

非是单目的

高于所有的双目运算符

不仅仅是高于逻辑运算

双目的逻辑运算

也高于双目的关系运算

也高于双目的算术运算

所以

它是在我们现在讲过的运算符里

这个逻辑非

是最高级的

就是优先级别最高级的运算符

而在双目运算符里边的优先级别是

算术优先

算术运算优先于关系

关系优先于逻辑

而各自在它们里边又有运算优先级

在这我们关于优先级

因为运算符很多

算术运算符有5个

关系运算符有6个

逻辑运算符有3个

十几个运算符搁在一起

它的优先级别就是要很讲究了

我们再看一个例子

这个例子里边我们是说给x赋值

这是一个赋值可不是一个关系比较

这个一定要不能搞混

这是给x赋值

赋的是什么值

赋的是这边的一个

逻辑运算表达式的值

x赋值是多少

我们先看一下

这里边我们刚才说了

它永远C都是从前边往后边算

走不动的时候是看它有没有冲突

现在碰到的第一个是括弧

谁的冲突都没有括弧优先

括弧里边a+b

是5+7是12

拿12去大于后边这个

后边这个也是先算

算出来一个结果才能做比较

c+d

是4+7

12大于7吗

Yes

这个运算的结果是1

1和谁去相与

与后边这个括弧的值

括弧的值是d大于a吗

d是3

3大于5吗 No

得到逻辑非0

那现在是两个

这个去与

是1与0

就真的与假的

x里边赋值的是假的

这个式子我们是想说什么

大家看这个是个与运算

同样是把式子截成了

前半段和后半段

那能不能说

我前半段已经只得到了1

我后半段就不算了

这个不能

不能的原因是

与运算的结果是

所有的运算对象

必须都是真的

与的结果才是真的

所以它要把

所有的运算对象都算完

相与的时候才能得到真

所以与的前边后边都要

依次的做运算才能获得结果

只有是或运算的时候

我们才可以说

根据前边的结果

决定后边的要不要运算

整个优先级是

单目的高于双目的

算术的高于关系的

关系的高于逻辑的

这块的x的值是0

关于逻辑运算问题

与C语言表达这个逻辑运算问题

我们做一个简单的小结

只有0才是假

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

2.3.4 逻辑运算优先级笔记与讨论

也许你还感兴趣的课程:

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