Forse ti sembra strano perché l'ho fatto con l'allocazione dinamica. Però se tu sai già che il numero di elementi è 21 puoi farlo anche con l'allocazione statica, cioè dichiarando l'array come avevi fatto.
Tu prova e poi ci fai sapere.

PS. Mi sono accorto che la variabile "riempito" non serviva a nulla... l'avevo detto che l'avevo scritto al volo!

codice:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>


#define MAX 100


/* funzione che ritorna 1 se "num" e' presente in "array"
 * e 0 se invece non e' presente */
int controlla_presenza(int *array, int size, int num)
{
    int i;
    for(i=0; i<size; ++i)
    {
        if(array[i] == num)
            return 1;
    }
    return 0;
}


/* funzione che genera un array di numeri casuali e non ripetuti */
int * genera_casuali(int size)
{
    int *array = (int *) malloc(size * sizeof(int));
    int i, generato;


    for(i=0; i<size; ++i)
    {
        array[i] = 0;       /* inizializzazione a zero */
    }


    for(i=0; i<size; ++i)
    {
        do
        {
            generato = rand() % MAX + 1;
        } while(controlla_presenza(array, size, generato) == 1);
        array[i] = generato;
    }


    return array;
}


/* funzione che stampa un array di interi */
void stampa_array(int *array, int size)
{
    int i;
    for(i=0; i<size; ++i)
        printf("%d\n", array[i]);
}


/* main */
int main()
{
    srand(time(NULL));
    int size;


    printf("Inserire dimensione: ");
    scanf("%d", &size);


    int *casuali = genera_casuali(size);
    stampa_array(casuali, size);


    return 0;
}