问两个 C 语言的基础问题. C语言中, 如何对一个一维数组全部赋值, 或者清零? 有一组数据, 如何对其中所有数据迅速求加权平均值(或者类似的平均值)?

2012-07-13 19:02:29 +08:00
 thedevil7
实际情况是这样的:
有一个 90 长度的数组中存着读入的数据, 对其进行求平均值后需要再利用这个数组读取下一次的数据
所以需要对其进行清零..

我想到的清零方法只有在每次读出每一个数据的 for 循环内部添加一句 result[i++] = 0; 的清零语句.


得到的数组内部有 90 个数据(只有数据, 没有概率, 不像是求学分的加权平均值算法), 基本上在一个范围内, 想要利用某种算法求出一个较精确的平均值, 有这样的算法吗?

感谢阅读.
4330 次点击
所在节点    问与答
15 条回复
raptium
2012-07-13 19:08:42 +08:00
下次再讀入同一個數組是沒有必要清零的吧?
加權平均值的話,那每一項的權重是在哪裡呢?
thedevil7
2012-07-13 19:14:23 +08:00
@raptium

嗯, 读入是没有必要清零了.
只是还有另一组存放求平均值的数组需要清零.

每一项的权重由该组数据统计得到, 比如某一个数据出现多次, 统计出现的概率.
也就是说, 现在只有数据, 权重未知, 如果需要权重只有分析数据.
不一定非得是加权平均的算法, 任何近似的算法都可以.

补充: 使用的 C 不是 Win 不是 Linux 而是 MSP430 嵌入式 C 语言, 所以可能某些常用库以及常用的函数无法调用. 例如, memset.
zzzlhope
2012-07-13 19:14:29 +08:00
1.可以不用清零吧?直接利用这个数组读取下一次的数据,上一次的数据会被覆盖掉。
2.简单求平均值:
float sum=0;
float avg=0;
for(int i,i<90,i++)
{
sum=sum+a[i];
//如果有权值,可存入数组b[90]中,与a[90]一一对应,sum=sum+a[i]*b[i]
}
avg=sum/90;
zzzlhope
2012-07-13 19:16:15 +08:00
我想把回复删了。。。
chisj
2012-07-13 19:16:24 +08:00
memset函数。
haohaolee
2012-07-13 19:19:33 +08:00
就用最符合直觉的方式做就OKay了吧
013231
2012-07-13 19:36:40 +08:00
bzero函數.

BZERO(3) BSD Library Functions Manual BZERO(3)

NAME
bzero -- write zeroes to a byte string

LIBRARY
Standard C Library (libc, -lc)

SYNOPSIS
#include <strings.h>

void
bzero(void *s, size_t n);

DESCRIPTION
The bzero() function writes n zeroed bytes to the string s. If n is zero, bzero() does nothing.

SEE ALSO
memset(3), swab(3)

HISTORY
A bzero() function appeared in 4.3BSD. Its prototype existed previously in <string.h> before it was moved to <strings.h> for IEEE Std 1003.1-2001 (``POSIX.1'') com-
pliance.

BSD June 4, 1993 BSD
(END)
zxy
2012-07-13 19:39:36 +08:00
@zzzlhope 我也赞同,看你的代码。。
zzzlhope
2012-07-13 19:44:50 +08:00
@zxy 我把楼主当成求作业题的了。。。
raptium
2012-07-13 20:37:30 +08:00
加權的權重等於出現的概率?那和普通的平均有什麼區別?
laskuma
2012-07-13 20:38:25 +08:00
@thedevil7 不是很理解这个数据的含义...有格式吗?如果是要通过分析这些数据得出其中的权重的话,我就直接理解成为读入90个人每个人的分数。直接加起来/90 就已经是加过权的了。
laskuma
2012-07-13 20:38:58 +08:00
@raptium 我也是这个意思。。。还是没太弄懂LZ的意思
thedevil7
2012-07-13 21:20:43 +08:00
@raptium
@laskuma

感谢二位, 这是楼主错误的想法. 送出感谢.
laskuma
2012-07-13 23:40:30 +08:00
@thedevil7 多给了一个 还给LZ了 :)
sqbing
2012-07-13 23:56:38 +08:00
Memset or bzero

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/42306

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX