函数不返回输入到数组中的最高值和最低值

时间:2014-11-20 15:25:32

标签: c++ arrays max min

此函数无法准确返回输入到数组中的最高值和最低值。我不确定我为程序输入的代码是什么。该程序需要返回输入到数组中的所有元素的平均值(平均部分工作正常),以及在输入到数组中的所有值中查找最高值和最低值。请帮忙!

#include <iostream>
using namespace std;
float temptotal = 0;
float averagetemp = 0;
float temperatures[50];
float average(int);
void highest(int);
void lowest(int);
int main()
{
int days = 0;
cout << "Enter the number of days: ";
cin >> days;
if (days > 50)
{
    cout << "You may only enter temperatures for 50 days." << endl;
    return 0;
}
average(days);
highest(days);
lowest(days);
}
float average(int days)
{
    for (int i = 1; i <= days; i++)
    {
        cout << "Enter the temperature for day number " << i << ": ";
        cin >> temperatures[i];
        temptotal += temperatures[i];
    }
        averagetemp = temptotal / days;
        cout << "The average temperature is: " << averagetemp << endl;
        return averagetemp;
}
void highest(int days)
{
    int count;
    int highest;
    highest = temperatures[50];
    for (count = 1; count < days; count++)
    {
        if (temperatures[count] > highest)
            highest = temperatures[count];
        cout << "The highest temperature is: " << highest << endl;
    }
}
void lowest(int days)
{
    int count;
    int lowest;
    lowest = temperatures[50];
    for (count = 1; count < days; count++)
    {
        if (temperatures[count] < lowest)
            lowest = temperatures[count];
        cout << "The lowest temperature is: " << lowest << endl;
    }
}

5 个答案:

答案 0 :(得分:0)

  1. 数组索引以0
  2. 开头
  3. 将cout语句放在for循环之外。

答案 1 :(得分:0)

数组索引从0开始,但是你的循环从1开始。例如,对于你的循环,例如,这将迭代整个范围:

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

答案 2 :(得分:0)

数组的索引编号为0到n-1 ,其中n是数组中的条目总数。当你从0开始时,你在循环中开始计数为1。如果用户输入了50个值,那么你将获得越界访问。

更正应该是:

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

然后在你的输出语句中,它应该是:

cout << "Enter the temperature for day number " << i+1 << ": ";

另一个问题是您的highest功能。问题有几点:

  1. 您将局部变量highest声明为int。它应该是float以匹配temperature数组中使用的类型。

  2. 您应该将最高值设置为非常小的值,小于您预期的值。或者更好的是,在循环之前将其设置为第一个temperature条目,并从第二个条目开始循环。

  3. 您将本地变量命名为highest,但您的函数名称也是highest。当其他人查看您的代码时,这会导致混淆。

  4. 如果您对其他解决方案感兴趣,以下计算最高:

    #include <algorithm>
    //...
    void highest(int days)
    {
        float theHighest = *std::max_element(temperatures, temperatures + days);
        cout << "The highest temperature is: " << theHighest << endl;
    }
    

答案 3 :(得分:0)

此功能

float average(int days)
{
    for (int i = 1; i <= days; i++)
    {
        cout << "Enter the temperature for day number " << i << ": ";
        cin >> temperatures[i];
        temptotal += temperatures[i];
//... 

已经错误,因为元素temperatures[0]不会被初始化。你必须写

float average(int days)
{
    for (int i = 1; i <= days; i++)
    {
        cout << "Enter the temperature for day number " << i << ": ";
        cin >> temperatures[i-1];
        temptotal += temperatures[i-1];
//... 

或者

float average(int days)
{
    for (int i = 0; i < days; i++)
    {
        cout << "Enter the temperature for day number " << i + 1 << ": ";
        cin >> temperatures[i];
        temptotal += temperatures[i];
//... 

函数highestlowest也是错误的。例如,数组temperatures没有索引为50的元素。此外,用户可以输入小于50的天数。所以这个陈述

highest = temperatures[50];

错了。

可以像这个函数定义一样编写函数

void highest( int days )
{
    int highest = temperatures[0];

    for ( int count = 1; count < days; count++ )
    {
        if ( highest < temperatures[count] ) highest = temperatures[count];
    }

    cout << "The highest temperature is: " << highest << endl;
}

请注意,标题std::max_elementstd::min_elementstd::minmax_element在标题<algorithm>中声明,可用于代替您的函数。

例如,函数最高可以使用标准算法std::max_element以下列方式定义

#include <algorithm>

//...

void highest( int days )
{

    cout << "The highest temperature is: " 
         << *std::max_element( temperatures, temperatures + days )
         << endl;
}

答案 4 :(得分:0)

功能'最高'的更好的版本:

void highest(int days)
{
    if (days < 1)
    {
        cout << "No temperatures" << endl;
    }

    double highest = temperatures[0];

    for (int count = 1; count < days; count++)
    {
        if (temperatures[count] > highest)
        {
            highest = temperatures[count];
        }
    }

    cout << "The highest temperature is: " << temperatures[highest_index] << endl;
}

C ++中以索引0开头的所有数组。在此实现中,通过使用第一个元素(索引0)作为第一个最高值来考虑此点。之后,循环只需处理其余部分,从索引1开始。

变量“最高”必须来自double类型。否则你可能会得到错误的结果,因为最高点会比真正的最高点低一些因为通常的舍入(double到int)。即使它稍低,也可以分配下一个比较。