Какой код можно использовать для печати самых высоких и самых низких значений, которые пользователь вводит в этот массив? Эта программа должна принимать среднее значение ввода пользователя (что я уже сделал). Теперь все, что мне нужно сделать, это заставить программу распечатать самые высокие и самые низкие значения, которые вводит пользователь.
#include <iostream>
using namespace std;
int main()
{
float days = 0;
float temperatures [50];
float temptotal = 0;
float average = 0;
cout << "Enter the number of days: ";
cin >> days;
if (days > 50)
{
cout << "You may only enter temperatures for 50 days." << endl;
return 0;
}
for (int i = 1; i <= days; i++)
{
cout << "Enter the temperature for day number " << i << ": ";
cin >> temperatures[50];
temptotal += temperatures[50];
}
average = (temptotal / days);
cout << "The temperature average is: " << average << endl;
return 0;
}
Существует множество способов сделать это. Но простой способ сделать это - проверить, является ли текущее значение, добавленное в массив, самым низким/самым высоким. Во-первых, вам нужно предположить, что min соответствует очень большому числу, а max соответствует очень низкому числу.
float min = 9999999999999;
float max = -9999999999999;
После этого вы можете сравнить, если значение меньше минимального или выше максимального. Поскольку начальные значения противоположны тому, что они должны быть, первое значение будет установлено как min и max, а затем остальные будут сравниваться с этим значением. Поступая таким образом, вы сохраните только самое низкое и самое высокое значение.
if(temperatures[i] > max)
max = temperatures[i];
if(temperatures[i] < min)
min = temperatures[i];
Если вы заметили, я использовал temparatures[i]
. Если вы всегда добавляете значение, введенное пользователем в индекс 50, вы всегда перезаписываете последнее введенное значение. Кроме того, индексы массива обычно начинаются с 0, а не на 1, поэтому цикл for будет выглядеть так: for (int я = 0; я < days; i++)
.
Я отредактировал ваш код, и это то, с чем я столкнулся:
#include <iostream>
using namespace std;
int main()
{
float days = 0;
float temperatures [50];
float temptotal = 0;
float average = 0;
cout << "Enter the number of days: ";
cin >> days;
if (days > 50)
{
cout << "You may only enter temperatures for 50 days max." << endl;
return 0;
}
float min = 9999999999999;
float max = -9999999999999;
for (int i = 0; i < days; i++)
{
cout << "Enter the temperature for day number " << i << ": ";
cin >> temperatures[i];
temptotal += temperatures[i];
if(temperatures[i] > max)
max = temperatures[i];
if(temperatures[i] < min)
min = temperatures[i];
}
average = (temptotal / days);
cout << "The temperature average is: " << average << endl;
cout << "The highest temperature is: " << max << endl;
cout << "The lowest temperature is: " << min << endl;
return 0;
}
Надеюсь это поможет !
Посмотрите здесь: C++ функция, чтобы найти максимальное значение в массиве двойников? По существу, вы делаете:
1) добавить
#include <algorithm>
в верхней части кода
2) используйте std::max_element
и std::min_element
в вашем коде, например, как это
double highest = *std::max_element(temperatures, temperatures + days);
double lowest = *std::min_element(temperatures, temperatures + days);
Вы можете найти эти методы здесь: http://www.cplusplus.com/reference/algorithm/max_element/ и http://www.cplusplus.com/reference/algorithm/min_element/ (хотя, пожалуйста, имейте в виду, что многие люди смотрят сверху вниз на cplusplus.com, считая это не лучшим источником информации на C++, но я думаю, в этом случае это прекрасно)
Альтернативно, как Евгений Ш. и Бретт показал, что вы можете сделать это сами, сохранив текущее наивысшее (низкое) значение и сравнив его с каждым новым значением ввода.
Кроме того, как заметил Бретт, вы хотите изменить temperatures[50]
на temperatures[i]
в вашем цикле считывания. Но есть и другая коррекция: этот цикл должен начинаться от 0
до менее days
:
for (int i=0; i < days; i++)
поскольку массивы индексируются начиная с 0, а в случае максимального количества значений (50) вы заполняете элементы массива от 0
до 49
(который составляет days-1
) включительно, а не от 1
до 50
.
std::minmax_element
.
Разве вы не сохранили бы локальную переменную с максимальным и минимальным значением? Вы все равно проходите через все предметы?
'
float max=0;
float min=999;
for (int i = 1; i <= days; i++)
{
cout << "Enter the temperature for day number " << i << ": ";
cin >> temperatures[50];
temptotal += temperatures[50];
if temperatures[50] > max
max = temperatures[50];
if temperatures[50] < min
min = temperatures[50];
}
Пожалуйста, простите мое кодирование, поскольку это не мой язык. Также я не полностью понимаю ваш код. Возможно, вы не собираетесь постоянно использовать температуру [50]. Может быть, вы имеете в виду температуры [i]?
Удачи.