用于在c ++中查找平均值和峰值的函数

时间:2015-03-17 19:59:16

标签: c++ arrays

我的任务:

程序应具有2个函数,一个用于计算数组中值的平均值(返回结果为double),另一个用于查找数组中的峰值(将结果作为无符号值返回)。数组(unsigned int)和数组中的值(unsigned int)应该通过函数作为参数传递。

有人可以解释一下如何修复我的代码吗?

   #include <iostream>

   using namespace std;

   #define SIZE 10

   double findAverage (unsigned int);

   unsigned findPeak (unsigned int);

   unsigned numbers [SIZE] = {47, 1, 0, 1324, 99, 1000, 65536, 19, 0, 24000 };
   unsigned sum;
   unsigned peak;

    int main()
    {
        double average;

        for (int i = 0 ; i < SIZE; i++)
        {
            sum += numbers[i];
        }

        average = findAverage(numbers[SIZE]);

        cout << "The average value is : " << average << endl;

        peak = findPeak(numbers[SIZE]);

        cout << "The peak value is : " << peak << endl;
    }
    double findAverage (unsigned sum)
    {
        double average;
        average = sum / SIZE;
        return average;
    }
    unsigned findPeak (unsigned int *)
    {
        for (int i = 0 ; i < SIZE; i++)
        {

            if (numbers[i] > peak)
            {
                peak = numbers[i];
            }
        }
    return peak;
    }

4 个答案:

答案 0 :(得分:3)

从作业说明:

  

数组(无符号整数)和数组中的值数(无符号   int)应该作为参数传递函数。

函数中有哪两个参数?

   double findAverage (unsigned int);
   unsigned findPeak (unsigned int);

可以通过以下方式定义函数

   double findAverage( const unsigned int a[], unsigned int n )
   {
      double sum = 0.0;

      for ( unsigned int i = 0; i < n; i++ ) sum += a[i];

      return n == 0 ? sum : sum / n;
   }

   unsigned int findPeak( const unsigned int a[], unsigned int n )
   {
      unsigned int max = 0;

      for ( unsigned int i = 1; i < n; i++ )
      {
         if ( a[max] < a[i] ) max = i;
      }

      return max;
   }

我定义了函数findPeak,它重新调整了最大元素的索引。您可以重写它将返回最大元素本身。

考虑到这些任务可以使用标题std::accumulatestd::max_element分别在标题<numeric><algorithm>

此外,无需在全局名称中定义您的变量。它们可以像main的局部变量一样定义。

答案 1 :(得分:0)

您将数字[SIZE]传递给findAverage而不是sum。

findPeak的定义中缺少参数的名称。

此外,数字[SIZE]不在数组中,数字[SIZE-1]是数组的最后一个元素,因为索引从0开始。

指定数组的大小并手动添加元素(在{}中)也不是一个好主意。你很容易犯错。

此外,您应该将所有代码放在函数中。所以在main中,你只需要调用它们。不要使用全局变量,这里根本不需要它们,并且可能在更大的项目中引起各种各样的问题。所以不要习惯坏习惯。 只需将变量放在main中,然后将它们作为参数传递给函数。 (你实际上是这样做的,但目前它是不必要的,因为例如sum是全局的。)

答案 2 :(得分:0)

您的功能应该是独立且可重复使用的:

他们不应该依赖SIZE

他们不应该直接使用数组:具有大小的数组应该是参数。传递为const(无需修改数组)。

以下示例:

double findAverage (const unsigned myArray[], int arraySize)
{
    unsigned sum = 0;
    double average = 0.0;
    for (int i = 0 ; i < arraySize; i++)
    {
        sum += myArray[i];
    }

    if (arraySize) average = sum / arraySize;
    return average;
}

unsigned findPeak (const unsigned myArray[], int arraySize)
{
    unsigned peak = 0;
    for (int i = 0 ; i < arraySize; i++)
    {
        if (myArray[i] > peak)
        {
            peak = numbers[i];
        }
    }
    return peak;
}

电话:

average = findAverage(numbers, SIZE);
peak = findPeak(numbers,SIZE);

答案 3 :(得分:-1)

这是一个正在运行的版本:

#include <iostream>

using namespace std;

double findAverage (unsigned int *, unsigned int);

unsigned int findPeak (unsigned int *, unsigned int);

int main()
{
    const int size = 10;
    unsigned int numbers [] = {47, 1, 0, 1324, 99, 1000, 65536, 19, 0, 24000 };

    double average = findAverage(numbers, size);

    cout << "The average value is : " << average << endl;

    unsigned int peak = findPeak(numbers, size);

    cout << "The peak value is : " << peak << endl;
}
double findAverage (unsigned int *numbers, unsigned int size)
{
    unsigned int sum = 0;
    for (int i = 0 ; i < size; i++)
    {
        sum += numbers[i];
    }
    double average = (double)sum / size;
    return average;
}
unsigned int findPeak (unsigned int *numbers, unsigned int size)
{
    unsigned int peak = 0;
    for (int i = 0 ; i < size; i++)
    {

        if (numbers[i] > peak)
        {
            peak = numbers[i];
        }
    }
    return peak;
}

说明: 你应该避免全局变量。 我认为总和计算在findAverage()中更有意义。然后它必须通过数组。 findPeak的声明错过了*,它与定义不符。 要传递数组,您不得提供任何[...]。只需通过编写数组名称将指针传递给第一个元素即可。 average = sum / SIZE;首先通过执行整数除法来计算sum / SIZE,因此结果将被截断。你必须施放一个操作数来强制进行双重分割。