Гид по технологиям

Среднее значение массива в Python, C++, JavaScript и C

3 min read Алгоритмы Обновлено 06 Dec 2025
Среднее массива — примеры на Python, C++, JS, C
Среднее массива — примеры на Python, C++, JS, C

женщина программирует за ноутбуком

Условие задачи

Дан массив arr. Нужно вычислить среднее значение элементов массива.

Примеры:

  • Пример 1: arr = [1, 2, 3, 4, 5, 6, 7, 8] Среднее = (1+2+3+4+5+6+7+8) / 8 = 4.5

  • Пример 2: arr = [1, 1, 1, 1, 1, 1] Среднее = (1+1+1+1+1+1) / 6 = 1

Формула:

Среднее = (сумма всех элементов) / (количество элементов)

Подход к решению

Короткая проверенная последовательность действий:

  1. Проверить, не пуст ли массив; для пустого массива решить, что возвращать (NaN, 0 или исключение).
  2. Инициализировать суммирующую переменную (в подходящем типе, чтобы минимизировать риск переполнения).
  3. Пройти по всем элементам и накопить сумму.
  4. Вернуть сумму, делённую на количество элементов (обеспечить вещественное деление при необходимости).

Важно: при работе с целыми числами и большими массивами используйте типы с большей вместимостью (long long, double) или аккумулируйте в плавающей точке.

Примеры кода

C++

// C++ program to find the mean of an array
#include 
#include 
using namespace std;

// Используем double для точности и уменьшения риска переполнения при суммировании
double calculateMean(const int arr[], int size) {
    if (size == 0) return 0.0; // или можно бросить исключение
    long long sum = 0; // аккумулируем в большом целочисленном типе
    for (int i = 0; i < size; ++i) {
        sum += arr[i];
    }
    return static_cast(sum) / size;
}

void printArrayElements(const int arr[], int size) {
    for (int i = 0; i < size; ++i) {
        cout << arr[i] << " ";
    }
    cout << endl;
}

int main() {
    int arr1[] = {1, 2, 3, 4, 5, 6, 7, 8};
    int size1 = sizeof(arr1) / sizeof(arr1[0]);
    cout << "Array 1:" << endl;
    printArrayElements(arr1, size1);
    cout << "Mean of the array: " << calculateMean(arr1, size1) << endl;

    int arr2[] = {1, 1, 1, 1, 1, 1};
    int size2 = sizeof(arr2) / sizeof(arr2[0]);
    cout << "Array 2:" << endl;
    printArrayElements(arr2, size2);
    cout << "Mean of the array: " << calculateMean(arr2, size2) << endl;

    return 0;
}

Вывод (пример):

Array 1:
1 2 3 4 5 6 7 8 
Mean of the array: 4.5
Array 2:
1 1 1 1 1 1 
Mean of the array: 1

Python

# Python program to find the mean of an array

def calculateMean(arr):
    size = len(arr)
    if size == 0:
        return 0.0  # можно вернуть None или бросить исключение
    sumOfElements = 0
    for x in arr:
        sumOfElements += x
    return sumOfElements / size


def printListElements(arr):
    for x in arr:
        print(x, end=" ")
    print()

arr1 = [1, 2, 3, 4, 5, 6, 7, 8]
print("Array 1:")
printListElements(arr1)
print("Mean of the array:", calculateMean(arr1))

arr2 = [1, 1, 1, 1, 1, 1]
print("Array 2:")
printListElements(arr2)
print("Mean of the array:", calculateMean(arr2))

Вывод (пример):

Array 1:
1 2 3 4 5 6 7 8 
Mean of the array: 4.5
Array 2:
1 1 1 1 1 1 
Mean of the array: 1.0

Совет: в Python можно использовать sum(arr)/len(arr) напрямую, но проверяйте len(arr) == 0.

JavaScript

// JavaScript program to find the mean of an array

function calculateMean(arr) {
    const size = arr.length;
    if (size === 0) return 0; // или NaN
    let sumOfElements = 0;
    for (let i = 0; i < size; i++) {
        sumOfElements += arr[i];
    }
    return sumOfElements / size;
}

function printArrayElements(arr) {
    console.log(arr.join(' '));
}

const arr1 = [1, 2, 3, 4, 5, 6, 7, 8];
console.log('Array 1:');
printArrayElements(arr1);
console.log('Mean of the array: ' + calculateMean(arr1));

const arr2 = [1, 1, 1, 1, 1, 1];
console.log('Array 2:');
printArrayElements(arr2);
console.log('Mean of the array: ' + calculateMean(arr2));

Вывод (пример):

Array 1:
1 2 3 4 5 6 7 8
Mean of the array: 4.5
Array 2:
1 1 1 1 1 1
Mean of the array: 1

C

// C program to find the mean of an array
#include 

float calculateMean(int arr[], int size) {
    if (size == 0) return 0.0f; // или обработать как ошибку
    long long sumOfElements = 0;
    for (int i = 0; i < size; i++) {
        sumOfElements += arr[i];
    }
    return (float)sumOfElements / (float)size;
}

void printArrayElements(int arr[], int size) {
    for (int i = 0; i < size; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");
}

int main() {
    int arr1[] = {1, 2, 3, 4, 5, 6, 7, 8};
    int size1 = sizeof(arr1) / sizeof(arr1[0]);
    printf("Array 1:\n");
    printArrayElements(arr1, size1);
    printf("Mean of the array: %f\n", calculateMean(arr1, size1));

    int arr2[] = {1, 1, 1, 1, 1, 1};
    int size2 = sizeof(arr2) / sizeof(arr2[0]);
    printf("Array 2:\n");
    printArrayElements(arr2, size2);
    printf("Mean of the array: %f\n", calculateMean(arr2, size2));

    return 0;
}

Вывод (пример):

Array 1:
1 2 3 4 5 6 7 8
Mean of the array: 4.500000
Array 2:
1 1 1 1 1 1
Mean of the array: 1.000000

Пограничные случаи и ошибки

  • Пустой массив: заранее решите поведение — возвращать 0, NaN или бросать исключение. Документируйте выбор.
  • Переполнение при суммировании: при больших числах аккумулируйте в типе большего размера (long long, double) или используйте Kahan summation для вещественных чисел.
  • Не числовые элементы: проверяйте типы или фильтруйте данные заранее.
  • Погрешности с плавающей точкой: при суммировании большого количества чисел порядок суммирования влияет на точность.

Альтернативные подходы

  • Использовать встроенные функции: Python sum()/len(), C++ std::accumulate из , JavaScript reduce.
  • Инкрементальное вычисление среднего (online mean): полезно для потоков данных. Формула: mean{n} = mean{n-1} + (xn - mean{n-1})/n
  • Для больших наборов данных — вычислять среднее по блокам и усреднять результаты для снижения риска переполнения.

Модель мышления (heuristic)

  • «Сумма / количество» — базовая мысль.
  • Всегда сначала подумайте о типе данных и возможном переполнении.
  • Для потоков — используйте инкрементальную формулу.

Сложность и факт-бокс

  • Временная сложность: O(n)
  • Память: O(1) (без учёта входного массива)
  • Рекомендация по типам: используйте 64-битные целые или double для накопления при неограниченных значениях.

Тесты и критерии приёмки

Критерии приёмки:

  • Правильно считает среднее для позитивных и отрицательных чисел.
  • Обрабатывает пустой массив согласно спецификации (тест на ожидаемое поведение).
  • Не теряет корректность для больших сумм (проверка на переполнение).

Минимальные тест-кейсы:

  • Обычный набор: [1,2,3,4,5] → 3.0
  • Все одинаковые: [7,7,7] → 7.0
  • Включает отрицательные: [-1, 1] → 0.0
  • Пустой: [] → поведение по спецификации
  • Большие числа: [INT_MAX, INT_MAX] → проверка на переполнение

Чеклист по ролям

  • Разработчик: покрыть функцию тестами, выбрать поведение для пустого массива.
  • Тестировщик: добавить крайние случаи и тесты на переполнение.
  • Архитектор: выбрать представление и формат ошибок/исключений.

Диаграмма принятия решения

flowchart TD
  A[Есть массив?] --> B{Длина массива == 0}
  B -- Да --> C[Вернуть 0 / NaN / ошибка по схеме]
  B -- Нет --> D[Суммировать элементы]
  D --> E{Потенциальное переполнение?}
  E -- Да --> F[Использовать 64-бит или блоковую агрегацию]
  E -- Нет --> G[Вычислить среднее как sum/size]
  F --> G
  G --> H[Готово]

Краткое резюме

Среднее массива вычисляется просто, но надёжная реализация требует учёта пустых массивов, переполнения и погрешностей с плавающей точкой. Используйте встроенные функции, если они доступны, или инкрементные алгоритмы для потоков.

Важно: документируйте ожидаемое поведение для пустого входа и добавьте тесты на крайние случаи.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Как устроить идеальную вечеринку для просмотра ТВ
Развлечения

Как устроить идеальную вечеринку для просмотра ТВ

Как распаковать несколько RAR‑файлов сразу
Инструменты

Как распаковать несколько RAR‑файлов сразу

Приватный просмотр в Linux: как и зачем
Приватность

Приватный просмотр в Linux: как и зачем

Windows 11 не видит iPod — способы исправить
Руководство

Windows 11 не видит iPod — способы исправить

PS5: как настроить игровые пресеты
Консоли

PS5: как настроить игровые пресеты

Как переключить камеру в Omegle на iPhone и Android
Руководство

Как переключить камеру в Omegle на iPhone и Android