《C语言程序设计:问题与求解方法》——2.15节算术表达式-阿里云开发者社区

开发者社区> 华章计算机> 正文

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

简介:
+关注继续查看

本节书摘来自华章社区《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语言程序设计》一3.4 案例学习——计算一年中某月份的总天数
本节书摘来自华章出版社《C语言程序设计》一 书中的第3章,第3.4节,作者:赵宏 陈旭东 马迪芳,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1115 0
C语言及程序设计进阶例程-28 动态规划法问题求解
贺老师教学链接 C语言及程序设计进阶 本课讲解 最短路径问题 #include<stdio.h> #define n 7 #define x 9999 /*用一个尽可能大的开销,代表结点之间没有通路*/ int map[n][n]= /*对图7.33中交通网的描述,map[i][j]代表i结点到j结点的开销*/ { {x,4,5,8,x,x,x
835 0
C语言及程序设计进阶例程-6 递归法问题求解
贺老师教学链接  C语言及程序设计进阶 本课讲解 求n! #include <stdio.h> long fact(int n) { long f; if (n==1) f=1; else f=n*fact(n-1); return f; } int
889 0
C语言及程序设计进阶例程-26 回溯溯法问题求解
贺老师教学链接 C语言及程序设计进阶 本课讲解 8皇后问题实现代码 #include <stdio.h> #include <math.h> #include <malloc.h> void nQueens(int *x, int n); /*求解n皇后问题*/ int place(int *x, int k); /*判断是否可以
1004 0
C语言及程序设计进阶例程-27 贪心法问题求解
贺老师教学链接 C语言及程序设计进阶 本课讲解 找零钱问题及其求解 #include <stdio.h> int main ( ) { int money[10]={100,50,10,0}; /*最大面额的硬值面值排在最前面,将被优先处理*/ int x; /*找零金额*/ int i=0, n=0, m; scanf
1072 0
10059
文章
0
问答
来源圈子
更多
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载