1

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

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

#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;
}
4

2 回答 2

1

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

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

是无效的,因为不是传递数组,而是传递其不存在的元素和 index x

考虑到上面提供的函数定义,函数的有效调用看起来像

SumAvg( arr, x );
于 2020-04-03T19:26:24.860 回答
1

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

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

于 2020-04-03T18:26:58.287 回答