Как найти сумму и среднее значение массива с помощью функции и вызова по ссылке С++

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

Вот код:

#include <iostream>
#include <iomanip>

using namespace std;

void sumAverage (double[], int, int &, int &);

int main()
{
double A[10] = { 3.54, 8.12, 39.04, 12.23, 49.32, 90.23};

int sum, average;

sumAverage (A, 10, sum, average);

cout << "The sum is " << A[sum] << endl << endl;
cout << "The average is " << A[average];

return 0;
}

void sumAverage (double array[], int numvalues, int &Asum, int &Aaverage)
{
    double sum = 0;
    
    for (int sub = 0; sub < numvalues; sub++)
        {
            sum += array[sub];
            Asum = sum;
            Aaverage = Asum / numvalues;
        }
        
}

Я чувствую, что есть что-то, что я упускаю или не понимаю, так как я все еще новичок в кодировании. Любая помощь будет оценена

помочь с чем? ... вы ничего не сказали о проблеме

jsotola 03.04.2023 03:36

Одна мысль, ваш массив состоит из шести элементов, но вы говорите sumAverage, что он состоит из десяти элементов. Неопределенное поведение.

lakeweb 03.04.2023 03:39

И почему sum это int? И почему вы имеете в виду A[sum]?

Beta 03.04.2023 03:47

Поскольку ваш массив содержит doubles, почему вы хотите, чтобы результаты вычислений Asum и Aaverage имели тип int? Используя пример с двумя элементами, сумма 2.1 и 1.2 равна 3.3, среднее значение равно 1.65, но вычисление суммы и среднего значения как int даст sum как 3, а среднего как 1, что, вероятно, не имеет особого смысла.

Peter 03.04.2023 06:51
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
4
54
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Я думаю, что ваш код означает это.

cout << "The sum is " << sum << endl << endl;
cout << "The average is " << average;

Если вы хотите напечатать десятичную точку, вам нужно изменить тип данных «сумма» и «среднее значение».

double sum,average;
Ответ принят как подходящий

Есть несколько проблем с данным кодом: 1) Во входном массиве всего 6 элементов, но вызов функции указывает, что в массиве 10 элементов. Это может привести к доступу к памяти за пределами памяти, что является неопределенным поведением. 2) Предполагается, что функция возвращает сумму и среднее значение, но на самом деле она возвращает индекс суммы и среднего значения в массиве. Это неправильно. 3) Расчет среднего значения неверен. Должно быть Aaverage = sum/numvalues. Вот исправленная версия кода:

#include <iostream>
#include <iomanip>

using namespace std;

void sumAverage(double[], int, double &, double &);

int main()
{
    double A[6] = {3.54, 8.12, 39.04, 12.23, 49.32, 90.23};

    double sum, average;

    sumAverage(A, 6, sum, average);

    cout << "The sum is " << sum << endl;
    cout << "The average is " << fixed << setprecision(2) << average << endl;

    return 0;
}

void sumAverage(double array[], int numvalues, double &Asum, double &Aaverage)
{
    double sum = 0;

    for (int sub = 0; sub < numvalues; sub++)
    {
        sum += array[sub];
    }

    Asum = sum;
    Aaverage = sum / numvalues;
}

Другие вопросы по теме