V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
thedevil7
V2EX  ›  问与答

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

  •  
  •   thedevil7 · 2012-07-13 19:02:29 +08:00 · 4325 次点击
    这是一个创建于 4505 天前的主题,其中的信息可能已经有所发展或是发生改变。
    实际情况是这样的:
    有一个 90 长度的数组中存着读入的数据, 对其进行求平均值后需要再利用这个数组读取下一次的数据
    所以需要对其进行清零..

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


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

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

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

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

    补充: 使用的 C 不是 Win 不是 Linux 而是 MSP430 嵌入式 C 语言, 所以可能某些常用库以及常用的函数无法调用. 例如, memset.
    zzzlhope
        3
    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
        4
    zzzlhope  
       2012-07-13 19:16:15 +08:00
    我想把回复删了。。。
    chisj
        5
    chisj  
       2012-07-13 19:16:24 +08:00
    memset函数。
    haohaolee
        6
    haohaolee  
       2012-07-13 19:19:33 +08:00
    就用最符合直觉的方式做就OKay了吧
    013231
        7
    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
        8
    zxy  
       2012-07-13 19:39:36 +08:00
    @zzzlhope 我也赞同,看你的代码。。
    zzzlhope
        9
    zzzlhope  
       2012-07-13 19:44:50 +08:00
    @zxy 我把楼主当成求作业题的了。。。
    raptium
        10
    raptium  
       2012-07-13 20:37:30 +08:00   ❤️ 1
    加權的權重等於出現的概率?那和普通的平均有什麼區別?
    laskuma
        11
    laskuma  
       2012-07-13 20:38:25 +08:00   ❤️ 1
    @thedevil7 不是很理解这个数据的含义...有格式吗?如果是要通过分析这些数据得出其中的权重的话,我就直接理解成为读入90个人每个人的分数。直接加起来/90 就已经是加过权的了。
    laskuma
        12
    laskuma  
       2012-07-13 20:38:58 +08:00   ❤️ 1
    @raptium 我也是这个意思。。。还是没太弄懂LZ的意思
    thedevil7
        13
    thedevil7  
    OP
       2012-07-13 21:20:43 +08:00   ❤️ 1
    @raptium
    @laskuma

    感谢二位, 这是楼主错误的想法. 送出感谢.
    laskuma
        14
    laskuma  
       2012-07-13 23:40:30 +08:00
    @thedevil7 多给了一个 还给LZ了 :)
    sqbing
        15
    sqbing  
       2012-07-13 23:56:38 +08:00
    Memset or bzero
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1053 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 20:13 · PVG 04:13 · LAX 12:13 · JFK 15:13
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.