Для начала функция должна быть объявлена следующим образом
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
.
* 1023. * Принимая во внимание приведенное выше определение функции, действительный вызов функции будет выглядеть как
SumAvg( arr, x );