#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
Должно быть aconst int
, а не просто anint
. Второе:for(int i=1; i<=10; i )
— Спросите себя, что происходит на последней итерации этого цикла иlist[i]
. Какое значениеi
? Любой цикл, который используется<=
в качестве условия, будет рассматриваться как ошибочный.
Ответ №1:
for(int i=1; i<=10; i )
также проверяетlist[10]
, что не определено и приводит к некоторому непредсказуемому значению. Это значение 11-го элемента может привести к наименьшему элементу и, следовательно, привести к неправильным результатам.sum
должен быть инициализирован0
, оставляя его неинициализированным, также будет неопределенным и вызывать ошибки.setprecision(N)
означает использоватьN
общее количество цифр, а не только после десятичного разделителя: https://www.cplusplus.com/reference/iomanip/setprecision / Он будет пропускать любые конечные нули, действительно, если вы также не используетеstd::fixed
.