本节书摘来自华章社区《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这个子表达式的运算,然后依次做外层括号的运算。
在编程时,若不记得表达式中运算符的优先级,最省事的办法不是去查看运算符的优先级表,而是直接在表达式中添加圆括号。适当增加“多余的”圆括号,将使得表达式中的先后运算顺序更清楚。

《C语言程序设计:问题与求解方法》——2.15节算术表达式相关推荐

  1. C语言程序设计-算数运算符、赋值运算符、逗号运算符及表达式

    目录 1.5 运算符和表达式 1.5.1 算术运算符和表达式 1.5.2 赋值运算符和表达式 1.5.3 逗号运算符和表达式 传送门上一节:C语言程序设计-常量与变量 传送门下一节:C语言程序设计-不 ...

  2. python语言程序设计——蒙特·卡罗方法求圆周率

    虽然在python的math库中存在着圆周率的表示,但是在实际生活中又有谁可以完整的背出圆周率呢,圆周率又是怎样被计算出来的呢? 首先数学家们发现了圆周率的近似方程如下: 而这段代码自然可以用计算机中 ...

  3. C#——《C#语言程序设计》实验报告——综合练习——委托、Lambda表达式、LINQ、接口

    问题描述 1.使用委托.Lambda表达式.LINQ等知识完成以下内容:(本题35分) (1)要求定义Employee类,带有Name属性(string类型),带有Birthday属性(DateTim ...

  4. java语言程序设计基础篇14.6答案_《Java语言程序设计-基础篇》答案-第15章

    第15章 异常和断言 复习题 15.1 答:略 15.2 答:声明异常是为了在方法中产生异常时,以便通知方法的调用者. 在方法声明的头部使用关键字throws 声明,一个方法可以声明多个异常.如: p ...

  5. Python语言程序设计(北京理工大学MOOC)1-5周

    第一周 温度转换源程序: #TempConvert.py TempStr = input("请输入带有符号的温度值:") if TempStr[0] in ['C','c']:F ...

  6. C语言程序设计编程题(六)15

    1.求出10至1000之内能同时被2.3.7整除的数,并输出 #include <stdio.h> main() {int i; for(i=10;i<1001;i++) {if(i ...

  7. 月份30或31c语言编程,C语言程序设计上机编程方法.PPT

    C语言程序设计上机编程方法 2000年1月25日 北京理工大学 / <C语言程序设计>上机编程方法 <C语言程序设计>上机编程方法系列讲座 5月24日 中心教学楼0231 下午 ...

  8. 谭浩强c 语言程序设计

    谭浩强c 语言程序设计  1 C语言概述  1.1  C语言的发展过程  1.2  当代最优秀的程序设计语言  1.3  C语言版本  1.4  C语言的特点  1.5  面向对象的程序设计语言  1 ...

  9. C语言程序设计期末复习重点知识,C语言程序设计期末总复习.ppt

    <C语言程序设计期末总复习.ppt>由会员分享,可在线阅读,更多相关<C语言程序设计期末总复习.ppt(11页珍藏版)>请在人人文库网上搜索. 1.天津理工大学-华信软件学院, ...

  10. python语言程序设计实践教程上海交通大学_《C语言实验与等级考试指导》隋雪莉 闵 芳 沈国荣著【摘要 书评 在线阅读】-苏宁易购图书...

    商品参数 作者: 隋雪莉 闵 芳 沈国荣著 出版社:上海交通大学出版社 出版时间:2018.9 印次:1-5 页数:282页 开本:正16开 ISBN:9787313161741 版权提供:上海交通大 ...

最新文章

  1. 高斯混合模型GMM理论和Python实现
  2. SAP UI5页面动画效果的实现,实际借用了jQuery的库文件
  3. 使用母版頁是內容如何使用CSS和javascript
  4. linux chown
  5. 异常 Failed to instantiate [java.util.List]: Specified class is an interface
  6. mysql日期序列填充_mysql – 如何使用一系列日期填充表格?
  7. 苹果6代掉水里怎么办 iPhone6掉水处理方法
  8. thinkphp内核独立版商城-萤火微信小程序商城(YoShop)
  9. UE4蓝图基础02-节点的基本知识
  10. HTML5_用语义化标记重新定义博客
  11. 如何用URL Scheme H5链接,直接打开微信小程序
  12. 独立思考者的思考模型----智商160以上的人都应该学会的(摘自杜牛牛博客)
  13. python 二值化细化_Python - 图像的细化(骨架抽取)
  14. mongoose视频教程
  15. (Frontend Newbie) Web三要素(一)
  16. 查看进程占用的句柄数
  17. mxnet-Gluon(一):mxnet-Gluon 入门
  18. OR-Tools:一个用于优化的开源软件 -0-简介与安装
  19. 2022最新坤坤鸡乐盒微信小程序源码+云开发的
  20. 复制文件或文件夹时出错(无法复制***:没有足够的可用磁盘空间

热门文章

  1. linux时间戳c语言,C语言实现字符转unix时间戳的简单实例
  2. java 反射 框架_Java——利用反射实现框架类
  3. 随手记-----cookie
  4. 验证iaas的sql服务器出现error configuring vRealize automation server
  5. Android 打开WIFI并快速获取WIFI的信息
  6. [Unity] 3D数学基础 - 2D旋转矩阵
  7. 如何实现与硅谷技术零距离
  8. 洛谷OJ P1074 靶形数独 解题报告
  9. python list 排序
  10. 寻找黑匣子——程序行为记录与跟踪