C 用于添加和获取用户定义的一维数组的平均值的函数

C 用于添加和获取用户定义的一维数组的平均值的函数,c,arrays,function-call,function-definition,C,Arrays,Function Call,Function Definition,这是一个问题“编写一个函数,获取整数数组和元素数作为参数,并用C语言计算和显示数组中所有整数的总和和平均值” 下面是我所做的代码,它正在运行,但包含错误的答案 #包括 无效SumAvg(整数x,整数arr[x]){ int i,和=0; 浮动平均值=0; 对于(i=0;i

这是一个问题“编写一个函数,获取整数数组和元素数作为参数,并用C语言计算和显示数组中所有整数的总和和平均值”

下面是我所做的代码,它正在运行,但包含错误的答案

#包括
无效SumAvg(整数x,整数arr[x]){
int i,和=0;
浮动平均值=0;
对于(i=0;i
首先,您的函数调用是错误的。它应该是
SumAvg(x,arr)
而不是
SumAvg(x,arr[x])


同样在函数声明中,在某些编译器中,void SumAvg(int x,int arr[x])
可能会有问题。

对于初学者,函数应该按照以下方式声明

void SumAvg( const int arr[], size_t n );
void SumAvg( const int arr[], size_t n )
{
    long long int sum = 0;

    for ( size_t i = 0; i < n; i++ )
    {
        sum += arr[i];
    }

    double avg = n == 0 ? 0 : ( double )sum / n;


    printf( "The sum is %lld\n", sum );
    printf( "The average is %.2f\n", avg );
}
这是声明数组应具有限定符
const
的参数,因为数组在函数中没有更改

数组的元素数应具有类型
size\t

函数定义可以如下所示

void SumAvg( const int arr[], size_t n );
void SumAvg( const int arr[], size_t n )
{
    long long int sum = 0;

    for ( size_t i = 0; i < n; i++ )
    {
        sum += arr[i];
    }

    double avg = n == 0 ? 0 : ( double )sum / n;


    printf( "The sum is %lld\n", sum );
    printf( "The average is %.2f\n", avg );
}
无效,因为您传递的不是数组,而是索引为
x
的不存在元素

考虑到上面提供的函数定义,函数的有效调用如下

SumAvg( arr, x );

启用编译器警告。应该这样调用它:
SumAvg(x,arr)
函数的声明非常好。此语法用于自记录目的(很明显,它需要传递的数组大小)。@EugeneSh。我知道这很奇怪,但我收到了此错误
不允许使用参数
hane,您使用的是现代C编译器吗
void SumAvg(int x,int arr[x])
在C99和C11或更高版本中是允许的。@chux VS.2019,实际上我使用的是VS.Research的最新版本。