2025年求平均数的几种方法_1

求平均数的几种方法_1平均数 给定两个数 a 和 b 求其平均值 分析 数学运算中一贯的算法是 a b 2 但在 c 语言中这种算法存在着一定的缺陷 当 a 和 b 足够大时 a 和 b 的和就会存在溢出 从而得不到我们想要的结果 c 语言中有相应的操作符可达到求平均数的效果 例如 gt gt

大家好,我是讯享网,很高兴认识大家。

平均数:给定两个数a和b,求其平均值;

分析:数学运算中一贯的算法是(a+b)/2,但在c语言中这种算法存在着一定的缺陷,当a和b足够大时,a和b的和就会存在溢出,从而得不到我们想要的结果。c语言中有相应的操作符可达到求平均数的效果,例如:>>(右移),&按为与,^(按位异或)。

1、存在缺陷的算法(a+b)/2

  例:

int main() { int a=4,b=2; int ret=0; ret=(a+b)/2; printf("a+b=%d\n",ret); return 0; }

讯享网    这个程序运行的结果是3,没有问题,满足数学运算里面求平均数的算法,但当我们将a和b的赋值为

输出的结果为-1;此时,a和b的和为的2倍,但是编译器中所存放的最大数为,故发生了溢出,输出的结果为-1。


讯享网



2、a+(b-a)/2

例:

讯享网int main() { int a=,b=; /*int a=2,b=4;*/ int ret=0; ret=a+(b-a)/2; printf("a+b=%d\n",ret); return 0; }

  这个程序首先将b与a的差值求出并且除以2,在加上a;这样的算法保证了程序在运算过程中不会发生溢出现象。即使当a和b的值较大时,也会求得平均数。


3、运用>>右移操作符

例:

int main() { int a=2,b=4; int ret=0; ret=(a+b)>>1; printf("a+b=%d\n",ret); return 0; }
   此程序利用左移操作符来达到除2的目的以此来求得a和b的平均数。右移操作符是将一个数的所有位向右移动若干位,在这里我们将a和b的和向右移动1位,其高位来到低位,从而达到除2的目的。来看一下实现过程:

     


3、运用 & 按位与和 >> 按位异或

例:

讯享网int main() { int a=2,b=4; int ret=0; ret=(a&b)+((a^b)>>1); printf("a+b=%d\n",ret); return 0; }

  按位与操作符规律为:两数的二进制位,相同为1,不同为0。此时按位与的结果可将相同的二进制位留下,不同二进制位置0,达到相同二进制位相加除2的结果;按位异或操作符:两数的二进制位,不同为1,相同为0。此时按位异或的结果将不同的二进制位留下,相同二进制位置0,并且右移1位,达到不同二进制位相加除2的结果。实现过程:




运行结果:






小讯
上一篇 2025-03-03 10:35
下一篇 2025-03-24 16:37

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/46120.html