Так сказать, мне дается список чисел: 8,4,5,3,2,1.
Среднее скользящее среднее этого списка: 8, 6, 5.7, 5, 4.4, 3.8.Как вывести первую скользящую среднюю в скользящую среднюю программу?
Моя программа использует этот алгоритм:
новый средний = (((старый средний * первая итерация) + номер следующего/(следующая итерация))
Проблема в том, моя программа выводит все скользящие средние EXCEPT для самого первого (это технически только первое число, потому что число, деленное на 1, - это число), а также выводит случайное число в самом конце. Как я могу исправить свой алгоритм, чтобы включить первый среднее значение со всеми другими средними скользящими средними? Примечание: в алгоритме самым первым «старым средним» является первое число.
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(){
int i,n, input_cases, x;
double numbers[100]; double previous[100];
double mean[100]; double old_average[100]; double new_average[100];
double *results = malloc(input_cases*sizeof(double));
printf("Total amount of numbers: ");
if (scanf("%d", &n) != 1) { /* validates input */
fprintf (stderr, "error: invalid input.\n");
return 1;
}
for (i=0; i<n; i++){
scanf("%lf", &numbers[i]);
}
old_average[0] = numbers[0];
for (i=0; i<n; i++){
new_average[i] = (((old_average[i] * (i+1)) + numbers[i+1])/(i+2));
old_average[i+1]=new_average[i];
printf("%lf\n", new_average[i]);
}
return 0;
}
Это то, что моя программа входов/выходов, используя приведенный выше пример:
Input:
8
4
5
3
2
1
Output:
6.0 (This is the SECOND running average, not the first)
5.666667
5.000000
4.400000
3.830000
3.2857514 (This is the random number that doesn't belong)
Попробуйте напечатать old_average вместо new_average ... – cleblanc