2.1算术运算符(20分钟)

2.1算术运算符(20分钟)

您好,在上一单元,我们介绍了数据类型,那么从这一单元,我们真正的要做一些计算的事情了。
计算机归根接地所做的事情是计算,而最简单的运算,就是算术运算,我们从上小学的时候,就熟悉算术运算了。
这一节,我们 就从算术运算 开始讲起,
在这里插入图片描述C语言提供的运算符非常的丰富,根据运算符的性质,我们可以将其分为赋值运算,算术运算符。。。。。。。。
另外根据运算所需要的对象,也就是操作数的个数来对其进行分类,将其分为一元运算符,二元运算符,三元运算符。
其中
一元运算符就是只需要一个操作的运算符。
C中特殊的运算符就是三元运算符,也称为三目运算符。它需要三个操作数。
在这里插入图片描述操作数,我们说,就是指运算对象,它既可以是常量,变量,还可以是函数。由运算符,及其操作数组成的表达式,我们就称为C表达式
例如,由这样的一个算术运算符和两个操作数所构成的这样的一个表达式,就称为算术表达式。
在这里插入图片描述常用的算术运算,主要有加减乘除和求余。
在这里插入图片描述加减与数学中的符号是一样的。
乘除和求余特殊。
乘法*
除法/
求余%
假如求11对5相除的结果,C语言规定:两个相同类型的操作数进行的运算,运算结果仍然是操作数的类型。这里除数与被除数都是整数,因此这两个整数,相除后的结果仍然都是一个整数。也就是除法运算的结果,会舍弃它小数部分的值。
因此它是一个整数的除法运算。
如果我们将被除数或者除数改成一个浮点数的话,或者两个都是浮点数的话,那么就是一个浮点数的除法。
在这里插入图片描述
浮点数的除法运算结果就是一个浮点数。因此它会得到运算结果的小数部分。这是C语言进行除法运算,和普通的除法运算,一个普通的非常重要区别
它分为整数除法和浮点数除法。
这两个运算的结果是不一样的。

请看求余
a对b 求余运算,我们也称为a对b进行取模运算。
要得到a对b求余运算的结果。
首先应该得到a对b,进行除法运算的结果。
两个数进行求余运算的结果,就是返回这两个操作数相除之后的余数,
但在c中,它有一个要求 ,它限定参与求余运算的两个操作数必须是整数。
以11对5进行求余运算。
首先求出11对5进行除法运算,商可以是2.11-10=1
因此11对5除法运算的结果是2
而11对5求余运算的结果是1

11对负5求余
11对负5进行除法,以11被除数,商负2,
11对负5进行除法进行的结果是负2
而11对负5进行求余运算的结果是1
如图:
在这里插入图片描述
如果一个算术表达式中包含多个算术运算符的时候,我们应该先算哪个呢?也就是如何确定运算的顺序呢?
当一个表达式的时候,包含着不同运算的表达式的时候,我们应该按照运算符的优先级顺序来进行计算。
!在这里插入图片描述如果一个表达式,包含的优先级相同,应该如何确定运算顺序,根据运算符的结合性,来确定。
在C中,结合包括左结合与右结合
二元的算术运算符都是左结合的,因此相当于先做左面运算符,在执行右边的运算符。
左结合(34)/2
而算术运算符当中的取相反运算呢,它是一个右结合的运算符。因此如果一个表达式中,出现两个这样的运算符的时候,我们需要从右往左开始计算,也就是对4开始取两次相反数的话,相当于从右往左来执行运算,它的结果就是4
具有右结合性的运算符,常常使得初学者感到困惑。
因此它是一个难点,如果我们不希望按照运算符固有的优先级结核性来进行计算,这个时候,我们巧妙的使用圆括号,来改变原有的运算顺序,
例如3
4/2+2
在这个表达式中,乘和除的优先级是相同的,加法运算优先级低于乘除运算,因此它是先算乘除后算加减,如果我们不希望按着这个顺序来进行,计算,我们先算优先级低的运算,我们就用括号把加法运算扩起来,
34/(2+2)保证2加2是先执行的。然后在去执行乘除运算,
如果一个表达式中存在多个圆括号的话那么我们就要从里往外进行运算。
3
(4/(2+2))
在C语言中圆括号也是一种运算符,并且呢,它的优先级是最高的。
在这里插入图片描述
下面来看实例
要从一个三位整数中分离出它的各位十位和它的百位数字。
假设153/100=1,它的含义153中包括几个一百。
153对100进行整除运算的结果。
也就是153的最高位。
153%10 153对10进行求余运算,就可以得到它的最低位3.
因为对10进行求余运算,是不会大于10的,因此10位和百位上的数字都给屏蔽掉了。
中间位如何计算?既然最高位已经计算出来了,那么将153减去最高位乘100,相当于把原有的数字给去掉了,那么就得到了只包含十位和个位的这样的一个数字,这样十位数字,就变成了这个数的最高位,这个数的最高位,我们还可以求刚才最高位的方法,来求出53的最高位。也就是用53来对10进行整除运算,这样就得到了它的十位数字。这是其中的一种方法,
另一种
153对100进行求余运算,来得到53,因为153对100进行求余运算的结果是不会大于100的,因此它的百位数字就被屏蔽掉了。
这样呢,同样可以保证10位数字变成最高位。
接下来在用相同的求最高位的方法。就是用53对10进行整除运算来得到它的10位数字。
其实还可以另外一种
用153先做对10的,整除运算,这样得到的是百位和10位的数字就是15,相当于,把它的小数点向前移了一位,得到它的整数部分,那么这种方法,把中间位变成了最低位,我们在用求最低位的方法,来求出十五的最低位,也就是用求余运算的方法, 用15对10进行求余,来得到,它的最低位,
此外,最低位也有另外一一种方法,就是我们先求出了最高位,接下来又求出了它的最高位,那么我们就可以把153减去最高位乘上100,在减去中间这一位来乘上10。 153-1100-510=3

在这里插入图片描述例如我们把一个范围较大的自然数的集合,映射到只有P个元素的小集合上,那么我们就可以自然数k对P,进行求余,来得到它映射后的结果。这种方法在哈希查找中呢,就可以构造哈希函数。
此外还可以用它来生成指定范围内的随即数,C语言提供的随即函数rand()只能生成032767之间的随机数,如果我们希望生成的随即数的范围不是这样的一个范围,而是一个我们希望指定的比他更小的一个范围的话,例如1100之内的随机数,这样我们就可以通过求模取余的方法。
这样一个大范围的随即数映射到一个小范围的随机数之内。
现在我们要映射到1-100这个范围内。那么我们先对rand函数生成的随机数,对100进行求余、
就可以将032767之间的这个随即数,映射到099范围内,但是099并不是我们希望的1100,如果要把099范围之内的数,变化到1100,之内,只要在这个数的基础上,加上一个1就可以得到1~100之间的随即数了。
在这里插入图片描述生活中用到求模取余的例子有很多
我们每天说的几点几点钟,其实就是做了一个对24进行了求模取余计算后的结果
此外还可以用于判断一个数能否被另外的一个数整除。例如判断X是否被5整除,那么X对5进行求余运算的结果是否为0.如果一个数对5的求余运算的结果为0的话,这就说明了X能够被5整除了。
在这里插入图片描述算术运算符,提供的计算毕竟是有限的,我们如何来执行更为复杂的运算,对数运算,
使用标准数学函数,C中有很多,举例简单例子
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值