@Scara95 in effetti la tua soluzione è ottimale, ma a me non sarebbe mai venuta in mente 
Se non ti dispiace, commento il codice, molto chiaro per un professionista, ma forse difficile da capire per uno alle prime armi.
==============================
Premessa, i caratteri che si usano nelle condizioni e espressioni, devono essere considerati come il codice ascii del carattere e non il carattere stesso.
codice:
for(i=0; i < n;++i){ //Scorre la frase carattere per carattere
if(frase[i]>='a'&& frase[i]<='z'){// controlla se il carattere è una lettera minuscola
++lettere[frase[i]-'a']; // incrementa array lettere nella posizione corrispondente
// esempio: frase[i]='b' diviene 'b'-'a' ossia 98-97= posizione uno
}
}