Это c-код для нахождения среднего значения в массиве из 50 элементов с использованием функции

#arrays #c #compiler-errors #implicit-conversion #function-definition

#массивы #c #ошибки компилятора #неявное преобразование #определение функции

Вопрос:

 #include <stdio.h>
#include <stdlib.h>
float Findaverage(float n,float numbers[]) {
    float sum = 0;
    for (int j = 0; j < n; j  ) {
        sum  = numbers[j];
    }
    printf("The average number of the array is: %f", sum/n);

}




int main() {
    int sum = 0;
    float numbers[50];
    float average;
    printf("Enter 50 elements: ");
    // taking input and storing it in an array
    for(int i = 0; i < 50;   i) {
        scanf("%f", amp;numbers[i]);
    }
    average = Findaverage(50,numbers[50]);
    printf("nThe average number of the array is: %f", average );

    return 0;
}
  

На выходе выдается ошибка «передача ‘float’ параметру несовместимого типа ‘float *’; возьмите адрес с amp;». Почему это так?

Комментарии:

1. Ваш код поврежден. Ошибка указывает на то, что ожидаемый аргумент должен быть указателем, в то время как вы передаете значение с плавающей точкой. Вы должны изменить 2-й аргумент вызова findAverage на указатель, возможно, вы хотите передать указатель на первый элемент numbers — так что просто используйте numbers . Кстати, вы передаете 50-й элемент, который находится за пределами.

Ответ №1:

Для начала функция Findaverage ничего не возвращает.

Вам нужно добавить этот оператор в функцию

 return sum / n;
  

И первый параметр должен иметь целочисленный тип вместо типа float .

 float Findaverage(float n,float numbers[]) {
                  ^^^^^
  

Во-вторых, в этом вызове функции

 average = Findaverage(50,numbers[50]);
  

аргумент numbers[50] , имеющий тип float вместо типа float * , недопустим. Вам нужно написать

 average = Findaverage(50,numbers);
  

Функция может быть объявлена и определена следующим образом

 double Findaverage( const float numbers[], size_t n ) 
{
    double sum = 0.0;

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

    return n == 0 ? 0.0 : sum / n;
}
  

И функция может быть вызвана как

 double average = Findaverage( numbers, sizeof( numbers ) / sizeof( *numbers ) );
  

Ответ №2:

Изменить

 average = Findaverage(50,numbers[50]);
  

Для

 average = Findaverage(50,numbers);
  

numbers[50] относится к одному элементу массива, а не ко всему массиву. Он также находится в конце вашего массива (который индексируется от 0 до 49 ).