如何在此数组中找到最高和最低值?

时间:2014-11-19 02:21:17

标签: c++ arrays input

我可以使用哪些代码打印出用户在此阵列中输入的最高和最低值?该程序需要取用户输入的平均值(我已经完成了)。现在我需要做的就是让程序打印出用户输入的最高和最低值。

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

3 个答案:

答案 0 :(得分:1)

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

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

希望这有帮助!

答案 1 :(得分: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]?

祝你好运。

答案 2 :(得分:0)

请看这里:C++ function to find max value in an array of doubles? 基本上,你要做的是:

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)的情况下,您将从0填充49days-1包含的数组元素,而不是从150