C中静态数组的移动平均值

时间:2014-03-19 09:59:15

标签: c arrays average

我有一个包含10个元素的数组,我需要将该数组转换为其移动平均值。

每次使用3个元素(例如,索引0-2处的元素的平均值,然后是1-3,依此类推至10的索引,然后返回0和1,以使新数组也具有正好10个元素)。

如果不使用指针来包装数组(环形缓冲区),最好的方法是什么。

1 个答案:

答案 0 :(得分:1)

只需做一些边界检查并在代码中包装索引。

下面的示例代码可以提高效率,但为了清晰起见(类似),它是这样编写的。此外,由于我正在键入StackOverflow而不是编译它,因此可能会出现一些小错误。

int array[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int averages[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};

for (int i = 0; i < 10; i++)
{
    int a = i;
    int b = i + 1 > 9 ? i - 10 + 1;
    int c = i + 2 > 9 ? i - 10 + 2;

    int count = array[a] + array[b] + array[c];
    int average = count / 3; // note this will truncate any decimal part

    averages[i] = average;
}