Как я могу решить эту проблему со средним числом в массиве - PullRequest
0 голосов
/ 15 апреля 2020

Я хочу напечатать среднее количество элементов в массиве, используя функцию

Это моя попытка:

#include<stdio.h>
#include<stdlib.h>
#define MAX_SIZE 100
void avgee();
int main()
{
    int a[MAX_SIZE],n,i;
    double avg=0,sum=0;
    printf("Enter the numbers of average:");
    scanf("%d", &n);
    printf("Enter the numbers: \n");
    for(i=1;i<=n;i++)
        scanf("%d", &a[i]);
    avgee(a,n);
    return 0;
}
void avgee(int a[MAX_SIZE],int n)
{
    int i,sum,avg;
    printf("Average number is:");
    for (i=1;i<=n;i++)
    {
        sum=sum+a[i];
        avg=sum/n;
    }
    printf("%f",avg)
}

По какой-то причине это не работает, кто-нибудь может помочь?

Ответы [ 4 ]

2 голосов
/ 15 апреля 2020

Объявление функции должно быть void avgee(int a[MAX_SIZE],int n);, а не void avgee();. Кроме того, вы также забыли добавить ; после printf("%f",avg)

1 голос
/ 15 апреля 2020

Для начала прототип функции должен располагаться перед main. В этом случае компилятор может проверить, правильно ли вызвана функция.

Функция не должна выводить никаких сообщений. Он должен вернуть среднее значение. Вызывающая функция решает, какое сообщение выводить.

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

double average( const int a[], size_t n );

и определена как

double average( const int a[], size_t n )
{
    double sum = 0.0;

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

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

Обратите внимание, что индексы массивов начинаются с 0.

Так что в основном вы должны написать

printf("Enter the numbers: \n");
for( i = 0; i < n; i++ )
    scanf("%d", &a[i]);

printf( "Average number is: %f\n", average( a, n ) );

Вот демонстрационная программа.

#include <stdio.h>

#define MAX_SIZE    100

double average( const int a[], size_t n );

int main(void) 
{
    int a[MAX_SIZE];

    size_t n = MAX_SIZE;

    printf( "Enter the numbers of average: " );
    scanf( "%zu", &n );

    if ( MAX_SIZE < n ) n = MAX_SIZE;

    printf( "Enter the numbers:\n" );

    for( size_t i = 0; i < n; i++ )
    {
        scanf( "%d", &a[i] );
    }       

    printf( "Average number is: %.1f\n", average( a, n ) );

    return 0;
}

double average( const int a[], size_t n )
{
    double sum = 0.0;

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

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

Ее вывод может выглядеть как

Enter the numbers of average: 10
Enter the numbers:
1 2 3 4 5 6 7 8 9 10
Average number is: 5.5
0 голосов
/ 15 апреля 2020

Вот рабочая версия вашего кода

#include <stdio.h>

void avgee();

int main() {
  int n, i;
  printf("Enter the numbers of average: ");
  scanf("%d", &n);
  int a[n];
  printf("Enter the numbers: \n");
  for(i = 0;i < n; i++) {
    scanf("%d", &a[i]);
  }
  avgee(a, n);
  return 0;
}

void avgee(int a[], int n) {
  int i, sum = 0;
  for(i = 0;i < n; i++) {
    sum += a[i];
  }
  printf("Average number is: %.2f", sum * 1.0 / n);
}
0 голосов
/ 15 апреля 2020

Среднее avg должно быть объявлено как двойное число как printf("%f",avg).

Ваш l oop должен повторяться только до сценария <n, а расчетное среднее должно быть вне l oop. Мол,

avg=sum/n;
printf("%f",avg);
...