codice:
#include<stdio.h>
#define N 5

double average(int arr[], int n);

int main ()
{
    int arr[N]={3, 3, 2, 7, 2};
    int a;

    a=average(arr[N], N);

    printf("\nLa media e' %lf\n", a);

    return 0;

}

    double average(int arr[], int n)
    {
        int i, j;
        int flag;
        int sum;
        double avg;

        flag=0;
        for(i=0; i<n; i++) {
            for(j=i+1; j<n; j++) {
                if(arr[i]==arr[j])
                    arr[j]=0;
                else
                    flag=0;
            }
        }

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

        return avg=sum/n;
    }
Questo è quello che ho partorito..ma la media restituita è 0.000000

Ho sbagliato ancora qualcosa nella dichiarazione e/o nella chiamata alla funzione?
Oppure è sbagliato l'algoritmo che dovrebbe fare la media?

Un'altra domanda: cosa cambia tra questo pezzo di codice
codice:
int main ()
{
    int arr[N]={3, 3, 2, 7, 2};
    int a;

    a=average(arr[N], N);

    printf("\nLa media e' %lf\n", a);

    return 0;

}
e quest'altro?
codice:
int main ()
{
    int arr[N]={3, 3, 2, 7, 2};

    printf("\nLa media e' %lf\n", average(arr[N], N));

    return 0;

}
Il secondo è lecito?



P.S:
Nota che in ogni caso non è necessario specificare le dimensioni dell'array passato come parametro - per quanto riguarda gli array monodimensionali, questi sono comunque passati come un puntatore, ignorando le dimensioni che specifichi.
Intendi nel momento in cui dichiaro e definisco la funzione? Quindi è da fare solo quando la invoco?