Scriverti la soluzione completa senza neppure un tentativo non mi sembra corretto.
Se la soluzione è la (2) si risolve in 3 righe.

Ho usato unsigned char invece di char per non avere numeri negativi.
Ho passato l'array come parametro per non usare malloc.

codice:
 
void riempi_array(unsigned char n, unsigned char array[8])
{
    int i;

    for (i = 0; i < 8; i++)
        array[i] = QUESTA RIGA LA PUOI COMPLETARE TU
}
Ti posso solo dire che nella parte che lascio a te basta usare
l'operatore XOR e di shift.

Ciao.