博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《C语言程序设计:问题与求解方法》——2.15节算术表达式
阅读量:6823 次
发布时间:2019-06-26

本文共 1365 字,大约阅读时间需要 4 分钟。

本节书摘来自华章社区《C语言程序设计:问题与求解方法》一书中的第2章,第2.15节算术表达式,作者:何 勤,更多章节内容可以访问云栖社区“华章社区”公众号查看

2.15 算术表达式

所谓算术表达式是用一个或多个算术运算符将运算量(包括常量、变量、函数调用)连接起来的,可以计算出明确值的式子。比如,b b – 4 a c、 ab*sin(alfa)/2.0就是算术表达式。
算术表达式是用得最多的一种表达式,在完成计算一个数值的工作时通常要使用它。
如果算术表达式中有两个以上算术运算符,各运算符按照什么先后顺序进行运算?这要分以下三种情况来讨论:
1)由运算符固有的优先级来确定。
在C语言的全部算术运算符中,取负数(–)这个一元运算符优先级最高;*、/、%这些运算符的优先级其次;+、–运算符的优先级最低。
也就是说,C语言中的算术表达式中的运算顺序,除增加了一个与乘除运算优先级同样的取模运算符%之外,还是完全遵守我们熟悉的“先乘除、后加减”的运算顺序。比如,对于3.7+4.1*–12.0,先做取负数运算–12.0,再做乘法运算得到–49.2,最后再做加法运算,得到–45.5。
2)在一个算术表达式中,如果出现了多个同一优先级的二元算术运算符,则是按从左到右的顺序进行运算的。 比如,对于45/2% 63,因为该式中从左到右依次出现的算术运算符、%、/都是同一优先级的 ,所以它的运算是从左到右依次进行的。
提示:运算符的“结合性”
所谓运算符的“结合性”其实指的是运算符与运算量的结合,是对出现在表达式中的具有同一优先级的连续多个运算符而言的,用来规定这些运算符之间与运算量的先后结合次序。先与运算符结合的运算量(构成了一个子表达式)先进行运算。
可以说,二元算术运算符的结合性是从左到右的。在下一章将看到,有一些运算符的结合性是从右到左的(比如赋值运算符)。
3)如果以上两种方式构成的算术表达式都不能满足对运算顺序的要求,则可以使用圆括号来改变运算符固有的运算顺序。比如,我们想求三个变量之和的平均值,不能用n1+n2+n3/3.0来表示,而必须加上圆括号(n1 + n2 + n3)/3.0。
在C语言中,可以使用圆括号括住表达式中的一个子表达式,用来强制改变运算符固有的运算次序。比如,(3.7+4.1)12.1,那就是要先做子表达式3.7+4.1 的加法运算,然后再用子表达式得到的运算结果7.8再做乘法运算:7.812.1 。
但是,在C语言中,千万不能用中小学学过的方括号“[”、“]”和花括号“{”、“}”来表示要优先进行运算的(子表达式)部分。因此,以下式子在C语言中是错误的:
2.3-{b*[y-(3.7+b)] }/6.3
这种情况下,应当用多重圆括号()来取代 []和{}。正确的表达式应当是:
2.3-(b*(y-(3.7+b)))/6.3
在表达式中,可以使用多重嵌套的圆括号来强制改变运算符的固有的优先次序,运算顺序由内到外。在以上表达式中,最先做的是 3.7+b这个子表达式的运算,然后依次做外层括号的运算。
在编程时,若不记得表达式中运算符的优先级,最省事的办法不是去查看运算符的优先级表,而是直接在表达式中添加圆括号。适当增加“多余的”圆括号,将使得表达式中的先后运算顺序更清楚。

转载地址:http://czvzl.baihongyu.com/

你可能感兴趣的文章
Linux之Nat表的应用
查看>>
UML 对象模型图阅读指南
查看>>
2016年04月28日-统一沟通之OCS 2007 R2-公开课-视频
查看>>
《虚拟化工程师实战培训》-视频一共12个系列,一步一步教学让想学者学得更容易。...
查看>>
Alibaba Druid使用总结
查看>>
网速的一些知识整理
查看>>
jQuery.data() 的实现方式
查看>>
linux中VM虚拟内存区域及mmap方法实现
查看>>
Debian install adminer
查看>>
iOS kvo 防止重复添加或者删除监听,实现safe kvo
查看>>
五年程序员想转行却不知所措?你了解时代发展吗?
查看>>
【实战】Docker 入门实战一:ubuntu 和 centos 安装Docker
查看>>
完美解决failed to open stream: HTTP request failed!(file_get_contents引起的)
查看>>
使用另外一个文件中的类—C#基础回顾
查看>>
Mysql常见问题解决
查看>>
MongoDB用户及权限管理(一):角色说明
查看>>
【C语言】获取一个数二进制序列中所有的偶数位和奇数位,分别输出二进制序列...
查看>>
Hyper-V中虚拟机的实时迁移
查看>>
我的友情链接
查看>>
spring事务不回滚
查看>>