MIPI_AdvancedC_FRTK/Lect2/21-22.c
2024-11-14 08:45:50 +03:00

37 lines
1.9 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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;//выходим с аварийным кодом завершения
}