任意多个数字求平均数

我们在进行数据的平均计算时,通常采用先求和再除以数量进行平均的方法。但是这个方法有个隐患,就是如果进行平均的数字数量很多,求和时难免要溢出,导致错误结果。

为了解决这个问题,我们可以这样做:
如果我们有了n个数字的平均数avg,当第n+1个数字num想要参与平均,那么在新的平均数中,avg要占n/n+1,而num则占1/n+1。所以n+1个数字的平均数为avg/(n+1)*n+num/(n+1)。
数学证明:设A为n个数字的平均值,即
A=M1+M2+..+MnnA=\frac{M_{1}+M_{2}+..+M_{n}}{n} A=nM1​+M2​+..+Mn​​B为n+1个数字的平均值
B=M1+M2+..+Mn+Mn+1n+1B=\frac{M_{1}+M_{2}+..+M_{n}+M_{n+1}}{n+1} B=n+1M1​+M2​+..+Mn​+Mn+1​​我们对第二个公式进行变换,得
B=M1+M2+..+Mnn+1+Mn+1n+1B=\frac{M_{1}+M_{2}+..+M_{n}}{n+1}+\frac{M_{n+1}}{n+1} B=n+1M1​+M2​+..+Mn​​+n+1Mn+1​​=M1+M2+..+Mnn+1∗nn+Mn+1n+1=\frac{M_{1}+M_{2}+..+M_{n}}{n+1}*\frac{n}{n}+\frac{M_{n+1}}{n+1} =n+1M1​+M2​+..+Mn​​∗nn​+n+1Mn+1​​=M1+M2+..+Mnn∗nn+1+Mn+1n+1=\frac{M_{1}+M_{2}+..+M_{n}}{n}*\frac{n}{n+1}+\frac{M_{n+1}}{n+1} =nM1​+M2​+..+Mn​​∗n+1n​+n+1Mn+1​​=A∗nn+1+Mn+1n+1=A*\frac{n}{n+1}+\frac{M_{n+1}}{n+1} =A∗n+1n​+n+1Mn+1​​
所以,只要我们知道了前n个数字的平均数,再知道参与平均的数字数量,那么再有更多的数字要参与平均,也不需要先求和导致溢出错误。

计算平均数的代码很简单,只有一行,其他都是测试用代码。
要注意的是,先做除法,再做乘法,可以避免乘法带来的溢出可能。

#include <stdio.h>
#include <stdlib.h>float average(int count, float avg, int num);int main()
{int i;int count= 0;float avg = 0;for(i = 1; i <=100; i++) {avg = average(count, avg, i);count++;}printf("The avg is %f.\n", avg);
}// 用于计算一系列数字的平均数计算函数,优点是不用
// 计算求和,避免求和时计算溢出。
// 函数返回值为平均值计算结果,
// 输入参数中
// count为到目前为止参与平均的数字数量,
// avg为之前所有输入数字的平均数
// num为新的一个参与平均计算的数字 num为浮点数也是可以的
float average(int count, float avg, int num)
{return (avg/(count+1)*count + num/(count+1.0));
}

任意多个数字求平均数相关推荐

  1. python:累加数字求平均数(保留小数)

    n=int(input()) i=1 sum=0 while i<=n:x=int(input()) # 累加年龄sum +=x #将计数器增加1i +=1 print("%.2f&q ...

  2. C语言进阶之路:如何去求任意两个数字的加减乘除问题

    提示:可以参考博主之前的文章来写的代码去寻找思路 文章目录 思考一下 一.提示 二.根据任意两个整数的求和去书写关于任意两个整数的加减乘除代码 1简单编写 2.笔者建议 总结 思考一下: 提示:建议读 ...

  3. 平均数和均值一样吗_求平均数!

    一.问题: 输入4个整数,计算并输出平均数,保留小数点后1位. 二.分析: 这个问题,很简单,先获得输入的数字,再求和,然后除以4,最后输出结果即可. C语言如下: #include <stdi ...

  4. 给定n位正整数a,去掉其中任意k个数字后,剩下的数字按原次序排列组成⼀个新的正整数,求组成的新数最小的删数方案(O((n-k)logk)优化)

    问题描述 给定n位正整数a,去掉其中任意k个数字后,剩下的数字按原次序排列组成⼀个新的正整数.对于给定的n和k,设计⼀个算法,找出剩下数字组成的新数最少的删数方案. 这一道题来自zyq老师的算法分析与 ...

  5. c语言用除法求平均数,论C语言两整数平均值的4种算法

    小学数学中我们就学过一种简单的求解两个整数平均数的算法(a+b)/2,当然它同样适用于我们的C语言#include #include int main() { int a = 10; int b =  ...

  6. python计算平均值标准差和中位数_如何使用python求平均数、方差、中位数

    python求平均数.方差.中位数的例子 CalStatistics.py def getNum(): #获取用户不定长度的输入 nums = [] iNumStr = input("请输入 ...

  7. 求平均数(1~10)

    2.求平均数(1~10) 思路:1.写主函数 2.创建数组 3.输入数组 4.把数组全部加起来 5.求平均数:总数/位数 6.输出平均值 代码如下: #include //求数组中的平均值 #incl ...

  8. 数组求和,求平均数,求最大值和最小值

    1.定义数组 var arr=[]; var arr=new Array(); 2.数组赋值 var arr=[]; arr[0]=10;//把数字10赋值到数组索引为0的位置上 arr[1]=20; ...

  9. 用计算机求平均数试讲,小学数学教师资格证面试试讲逐字稿

    原标题:小学数学教师资格证面试试讲逐字稿 尊敬的各位评委老师,大家上午好,我是小学数学组的XX号考生,我今天抽到的试讲题目是<平均数>,下面,开始我的试讲. 上课!同学们好,请坐. 同学们 ...

最新文章

  1. php gridview,GridView - [ Android中文手册 ] - 在线原生手册 - php中文网
  2. 如何用CSS制作横向菜单?
  3. html2canvas在Vue项目踩坑-生成图片偏移不完整
  4. 企业微信oauth认证_OAuth2身份认证
  5. Windows Server 2016及System Center 2016正式商用
  6. 苹果13系统锁屏延迟_iPhone 11 锁屏出现延迟是怎么回事?
  7. HTML5 Video DOM 入门体验
  8. 你是如何找到自己的第一份测试工作的?
  9. 代理模式(动态代理)
  10. 柱状图怎么设置xy轴_经验-Origin做柱状图常遇问题-柱状图X坐标轴如何设置—小技巧...
  11. python平方上标怎么输出,plot绘图同样适用
  12. 买马桶哪个牌子的最好?
  13. Redis过期键的删除策略
  14. 阅读《JavaScript设计模式》第二章心得
  15. 排产易!APS系统如何选型?(上)
  16. 奥数计算机竞赛试题,奥数试卷
  17. 黑莓安装HANDBASE数据库
  18. android解压zip文件进度条,Android实现文件解压带进度条功能
  19. ZEMAX 典型照明系统设计周期的概述
  20. ryu实例---网络时延探测

热门文章

  1. 上班用“蝙蝠侠电话”沟通是一种怎样的体验?
  2. C++代码中R“(xxxxxxxxxxx)“
  3. ABB机器人教程 (1)学习准备
  4. package.json中安装包的版本说明和符号说明
  5. Windows 2008 R2 配置 DNS 实现二级域名
  6. 关掉Win Server2003 IE增强的安全配置堵塞
  7. Win7计划任务命令
  8. Python之freshman02
  9. VDI虚拟云桌面 和 共享云桌面 区别
  10. 模拟信号、数字信号,信号是如何被处理的?