リングバッファの実装例です。
書き込みデータはint型とします。150個のint型の配列を確保します。
平均は、int型とします。
必要があれば、型はdouble型、もしくはFloat型などで置き換えてください。
write_dataがデータをdata[]の配列へ書き込みます。
get_averageが、data[]の配列中の平均を算出し、その結果を返します。
C
1#include <stdio.h>
2#define MAXELM (150)
3int data[MAXELM];
4int wt_ix = 0;
5int data_count = 0;
6
7void write_data(int dt)
8{
9 data[wt_ix] = dt;
10 data_count++;
11 wt_ix++;
12 if (wt_ix >= MAXELM) wt_ix = 0;
13 if (data_count > MAXELM) data_count = MAXELM;
14}
15int get_average()
16{
17 int sum = 0;
18 int i;
19 if (data_count == 0) return 0;
20 for (i = 0; i < data_count; i++){
21 sum += data[i];
22 }
23 return sum / data_count;
24}
25int main()
26{
27 int av;
28 int i;
29 write_data(10);
30 write_data(20);
31 write_data(25);
32 write_data(15);
33 av = get_average();
34 printf("av=%d\n",av);
35 for (i=0;i < MAXELM;i++){
36 write_data(i+1);
37 }
38 av = get_average();
39 printf("av=%d\n",av);
40}
41
実行結果
av=17
av=75