C : средний результат моей программы отображается неправильно

#c

#c

Вопрос:

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

 #include <iostream>
using namespace std;

int main()
{
    float value[10];
    float average;
    float min;
    float max;
    int index1 = 0, index2 = 0, index3 = 0, index4 = 0, sum;

    while (index1 < 10)
    {
        cout << "Enter a value : ";
        cin >> value[index1];
        index1  ;
    }
    while (index2 < 10)
    {
        sum  = value[index2];
        index2  ;
    }

    max = value[index3];
    while (index3 < 10)
    {
        if (max < value[index3])
        {
            max = value[index3];
        }
        index3  ;
    }
    min = value[index4];
    while (index4 < 10)
    {
        if (min > value[index4])
        {
            min = value[index4];
        }
        index4  ;
    }
    average = sum / 10;
    cout << "The average is        : " << average << "n";
    cout << "The largest value is  : " << max << "n";
    cout << "The smallest value is : " << min << "n";
}
 

Вот как это выглядит, когда я его запускаю.

 Enter a value : 98
Enter a value : 45
Enter a value : 32
Enter a value : 21
Enter a value : 67
Enter a value : 54
Enter a value : 74
Enter a value : 25
Enter a value : 98
Enter a value : 33
The average is        : -2.00668e 008
The largest value is  : 98
The smallest value is : 21
 

Комментарии:

1. Вы не инициализируете sum

2. В этой программе есть несколько ошибок, и все они все равно были бы неправильными, если бы вы использовали цикл for . Основная проблема в том, что вы забыли sum = 0 в начале своего кода. Другая проблема заключается в том, что вы выполняете целочисленное деление при вычислении среднего значения, измените код на average = sum / 10.0; , чтобы получить деление с плавающей запятой.

Ответ №1:

Вы видите результат целочисленного деления и неинициализированные переменные. 10.0 Разделите на, а не так, чтобы компилятор преобразовал оба значения в число с плавающей запятой. 10 Также присваивайте 0 сумме при ее объявлении.

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

Ответ №2:

 Move variables outside of the main function globally and there is no need to initialize them. Also, you can do calculations using only one loop.

#include <iostream>
using namespace std;

float value[10], average, min, max, sum;
int index;

int main()
{
   while (index < 10)
   {
        cout << "Enter a value : ";
        cin >> value[index];
     
        if (value[index] > max) max = value[index];
        if (value[index] < min) min = value[index];
        sum  = value[index];

        index  ;
   }

   average = sum / 10.0;
   cout << "The average is        : " << average << "n";
   cout << "The largest value is  : " << max << "n";
   cout << "The smallest value is : " << min << "n";
}
 

Комментарии:

1. Переменная ‘sum’ должна иметь тип с плавающей запятой вместо int, если только ее суммирование не будет усечено (поскольку значение имеет тип с плавающей запятой).

2. @gobinda Правильно, спасибо. Я просто скопировал его код и не заметил этого.

Ответ №3:

сумма должна быть равна нулю в момент объявления, иначе она будет иметь мусорное значение. int index1 = 0, index2 = 0, index3 = 0, index4 = 0, sum = 0;