如何找到此数组中的最大值和最低值

How can I find the highest and lowest values in this array?

本文关键字:最大值 最低值 数组 何找      更新时间:2023-10-16

我可以使用什么代码来打印出用户在此数组中输入的最高值和最低值?这个程序需要取用户输入的平均值(我已经这样做了)。现在我需要做的就是让程序打印出用户输入的最高值和最低值。

#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;
}

有很多方法可以做到这一点。但是一个简单的方法是检查添加到数组中的当前值是否为最低/最高。首先,您需要假设最小值对应于一个非常高的数字,最大值对应于一个非常低的数字。

float min = 9999999999999;
float max = -9999999999999;

在此之后,您可以比较该值是低于最小值还是高于最大值。由于初始值与它们应该的值相反,因此第一个值将设置为最小值和最大值,然后将其他值与此值进行比较。这样,您将只保留最低值和最高值。

if(temperatures[i] > max)
    max = temperatures[i];
if(temperatures[i] < min)
    min = temperatures[i];

如果你注意到了,我用了temparatures[i].如果始终将用户在索引 50 处输入的值相加,则始终会覆盖最后输入的值。此外,数组的索引通常从 0 而不是 1 开始,所以你的 for 循环将如下所示: for (int i = 0; i < 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;
}

希望这有帮助!

您不会只保留一个具有最大值和最小值的局部变量吗?您正在浏览所有输入的项目?
`

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]?

祝你好运。

请看这里: C++函数可以在双精度数组中找到最大值?从本质上讲,您所做的是:

1) 添加

    #include <algorithm>

在代码的顶部

2)在代码中使用std::max_elementstd::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++最好的信息来源,但我想在这种情况下没关系)

或者,正如Eugene Sh.指出和Brett所展示的那样,您可以通过存储当前最高(最低)值并将其与每个新输入值进行比较来自己完成。

此外,正如Brett所注意到的,您希望在阅读循环中将temperatures[50]更改为temperatures[i]。但还有另一个更正:这个循环应该从0运行到小于days

for (int i=0; i < days; i++)

由于数组从 0 开始索引,并且在最大值数 (50) 的情况下,您将填充数组的元素从 049(这是 days-1 )包括,而不是从 150