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

Среднее значение массива в 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
Автор
Редакция

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

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро