C++ 用于查找c+中的平均值和峰值的函数+;
我的任务: 程序应该有两个函数,一个用于计算数组中值的平均值(返回结果为double),另一个用于查找数组中的峰值(返回结果为无符号值)。数组(无符号整数)和数组中的值数(无符号整数)应作为参数通过函数传递 有人能解释一下如何修复我的代码吗C++ 用于查找c+中的平均值和峰值的函数+;,c++,arrays,C++,Arrays,我的任务: 程序应该有两个函数,一个用于计算数组中值的平均值(返回结果为double),另一个用于查找数组中的峰值(返回结果为无符号值)。数组(无符号整数)和数组中的值数(无符号整数)应作为参数通过函数传递 有人能解释一下如何修复我的代码吗 #include <iostream> using namespace std; #define SIZE 10 double findAverage (unsigned int); unsigned fin
#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;
}
#包括
使用名称空间std;
#定义尺寸10
双findAverage(无符号整数);
无符号findPeak(无符号int);
无符号数字[大小]={47,1,0,1324,99,1000,65536,19,0,24000};
无符号和;
无符号峰;
int main()
{
双倍平均;
对于(int i=0;i cout这里有一个运行版本:
#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;
}
#包括
使用名称空间std;
双findAverage(无符号整数*,无符号整数);
无符号整数findPeak(无符号整数*,无符号整数);
int main()
{
常数int size=10;
无符号整数[]={47,1,0,1324,99,1000,65536,19,0,24000};
双平均值=findAverage(数字、大小);
cout您将数字[大小]传递给findAverage,而不是sum
findPeak的定义中缺少参数的名称
此外,numbers[SIZE]不在数组中,numbers[SIZE-1]是数组的最后一个元素,因为索引从0开始
指定数组的大小并手动添加元素(在{}中)也不是一个好主意,很容易出错
另外,你应该把所有的代码都放在函数中。因此,在主要情况下,你只需要调用它们。也不要使用全局变量,它们在这里根本不是必需的,并且在更大的项目中可能会导致各种各样的问题。所以不要习惯坏习惯。
只需将变量放在main中,并将它们作为参数传递给函数。
(实际上您正在这样做,但目前没有必要这样做,因为例如sum是全局的。)来自作业描述:
数组(无符号整数)和数组中的值数(无符号整数)
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;
}
double findAverage(常量unsigned int a[],unsigned int n)
{
双和=0.0;
对于(无符号整数i=0;i
我定义了函数findPeak
,这样它可以返回最大元素的索引。您可以重写它,使其返回最大元素本身
考虑到这些任务可以通过使用分别在标题
和中声明的标准算法std::acculate
和std::max_元素
来完成
此外,无需在全局名称中定义变量。它们可以像main的局部变量一样定义。您的函数应该是独立的且可重用的:
他们不应该依赖于大小
他们不应该直接使用数组:大小为的数组应该是parameters.Pass asconst
(无需修改数组)
下面是一个例子:
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;
}
“有人能解释一下如何修复我的代码吗?”“如果你告诉我们,到底需要用它修复什么(编译器错误、链接器错误、运行时错误、意外输出),可能是。sum/SIZE
google integer math。我要在这里挑刺,说sum和peak应该初始化为0。可以在同一行声明和定义平均值。只写“unsigned”这是一种糟糕的做法,只在这里起作用,因为编译器假定int为类型。此外,他没有遵循这种模式,但他说他的函数应该采用数组的大小,而不是数组的大小。@dwcanillas你是对的,Amadeusz对初始化进行了编辑,我现在编辑了另一个建议
average = findAverage(numbers, SIZE);
peak = findPeak(numbers,SIZE);