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

Function for addition and getting average of a user defined single dimensional array

这就是问题"Write a function which gets an integer array and number of elements as parameters and calculates and displays sum and average of all the integers of the array in C language"

下面是我完成的代码,它是 运行 但包含给出错误答案的错误

#include <stdio.h>

void SumAvg(int x, int arr[x]) {
  int i, sum = 0;
  float avg = 0;

  for (i = 0; i < x; ++i) {
    sum += arr[i];
  }
  avg = (float)sum / x;

  printf("The sum is %d", sum);
  printf("\nThe average is %.2f", avg);
}

int main() {
  int x, i;

  printf("Enter number of elements");
  scanf("%d", &x);

  int arr[x];

  for (i = 0; i < x; ++i) {
    printf("Enter integers for array[%d]", i + 1);
    scanf("%d", &arr[i]);
  }
  SumAvg(x, arr[x]);

  return 0;
}

首先,你的函数调用是错误的。应该是SumAvg(x,arr)而不是SumAvg(x, arr[x]);

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

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

void SumAvg( const int arr[], size_t n );

声明数组的参数应具有限定符const,因为数组在函数中未更改。

数组元素的数量应具有 size_t.

类型

函数定义如下所示

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

即在函数内,变量 sum 的类型应为 long long int 以减少溢出的风险。

一般情况下,用户可以将等于 0 的元素数传递给函数。在这种情况下,如果不检查此值,函数将具有未定义的行为。

本次函数调用

SumAvg(x, arr[x]);

无效,因为您没有传递数组,而是传递了索引为 x.

的不存在的元素

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

SumAvg( arr, x );