37 lines
1.9 KiB
C
37 lines
1.9 KiB
C
|
#include <stdio.h>
|
|||
|
#include <stdlib.h>
|
|||
|
|
|||
|
int main(void)
|
|||
|
{
|
|||
|
double sum=0,v;//сумма и введенное значение
|
|||
|
int arr_size=0, arr_u=0;//размер массива и текущая позиция
|
|||
|
double *arr = NULL;//память под динамический массив
|
|||
|
arr_size = 16;//задаем начальный размер
|
|||
|
if (!(arr = (double*) malloc(arr_size * sizeof(arr[0]))))//выделяем память NULL
|
|||
|
goto out_of_mem;//не смогли выделить память
|
|||
|
while (scanf("%lf", &v) == 1)//пока приходят данные
|
|||
|
{
|
|||
|
if (arr_u == arr_size)//если достигли конца массива
|
|||
|
{
|
|||
|
arr_size *= 2;//увеличиваем размер в двое и выделяем память
|
|||
|
if (!(arr = (double*) realloc(arr, arr_size * sizeof(arr[0]))))
|
|||
|
goto out_of_mem;//не смогли выделить память
|
|||
|
}
|
|||
|
sum += v;//находим сумму
|
|||
|
arr[arr_u] = v;//сохраняем значение в текущую позицию
|
|||
|
arr_u++;//сдвигаем текущую позицию в массиве
|
|||
|
}
|
|||
|
if (!arr_u)//не было введено ни одного значения
|
|||
|
return 0;
|
|||
|
double average = sum/arr_u;//находим среднее значение
|
|||
|
printf("%lf\n", average);
|
|||
|
for(int i=0; i < arr_u; i++)
|
|||
|
if(arr[i] <= average)//лучше сравнивать с определенной точностью
|
|||
|
printf("%lf\n", arr[i]);//печатаем числа, не превышающие среднее
|
|||
|
free(arr);//освобождаем память
|
|||
|
return 0;//выходим с хорошим кодом завершения
|
|||
|
out_of_mem:
|
|||
|
fprintf(stderr, "Can't allocate memory\n");
|
|||
|
return 1;//выходим с аварийным кодом завершения
|
|||
|
}
|