В c , как мне правильно использовать setprecision в этом случае? (Он продолжает округлять мои результаты)

#c

#c

Вопрос:

Моя главная цель кода — получить входные данные от пользователя, поместить их в массив размером 10, определить наименьший элемент в массиве, заданном пользователем, вывести сумму всех элементов в массиве, удалить наименьшее число и вычислить среднее значение оставшихся элементов внутримассив. Моя основная проблема заключается в том, что когда я пытаюсь напечатать среднее значение оставшихся 9 чисел (наименьшее число удаляется), результат почти всегда округляется или автоматически добавляет 5,00 к результату.

я использовал переменную ave для вывода среднего значения оставшихся 9 чисел и использовал setprecision(2), чтобы превратить десятичные разряды в 2 (0,00). Как мне это исправить? Спасибо!

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

 #include<iostream>
#include<iomanip>
using namespace std;


int main()
{
int dim=10;
int list[dim];
int i;  
int sum;
int newsum;
double ave;

int smallest = 0;
int temp;


cout<<"enter number: "<<endl; // takes input
for(int i = 0; i<dim; i  )
{
    cout<<"loc["<<i<<"] ";
    cin>>list[i];
}

smallest = list[0];

for(int i=1; i<=10; i  ) // gets the lowest num
{
    temp = list[i];
    if (temp < smallest) 
    {
        smallest = temp;
    }
}

cout<<"lowest numb is: "<<smallest<<endl; // displays the lowest num
 // tries to replace the element from the list[] array with the value of 0



    
for(int i=0; i<10; i  ) // solves the sum of all numbers
{
    sum =list[i];

}
cout<< fixed << showpoint;
cout<< setprecision(2); // tells the code to print value in 2 decimal places (0.00)
ave = ((sum - smallest)/9); //computes the average with total minus lowest element in array
cout<<"sum is: "<<sum<<endl; 
cout<<"average is: "<< ave << endl; // displays values
 

}

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

1. int dim=10; int list[dim]; — Это недопустимый C . dim Должно быть a const int , а не просто an int . Второе: for(int i=1; i<=10; i ) — Спросите себя, что происходит на последней итерации этого цикла и list[i] . Какое значение i ? Любой цикл, который используется <= в качестве условия, будет рассматриваться как ошибочный.

Ответ №1:

  1. for(int i=1; i<=10; i ) также проверяет list[10] , что не определено и приводит к некоторому непредсказуемому значению. Это значение 11-го элемента может привести к наименьшему элементу и, следовательно, привести к неправильным результатам.
  2. sum должен быть инициализирован 0 , оставляя его неинициализированным, также будет неопределенным и вызывать ошибки.
  3. setprecision(N) означает использовать N общее количество цифр, а не только после десятичного разделителя: https://www.cplusplus.com/reference/iomanip/setprecision / Он будет пропускать любые конечные нули, действительно, если вы также не используете std::fixed .