Edoardo ... tu hai necessità di studiare da un libro, non da un forum. Finché non lo farai, non progredirai nella conoscenza del linguaggio, come appare evidente.

Se la tua funzione accetta come parametro l'array e modifica lo stesso array, è normale che sia void ma poi non potrai usarla nella printf perché il risultato è *sempre* nell'array.
Quindi dovrai scrivere

codice:
nfrase(f);
printf("La nuova frase e': %s\n", f);
Se, invece, vuoi che la funzione restituisca un altro array di char, diverso da quello inserito come parametro, dovrai operare diversamente nella funzione (allocando il nuovo array dinamicamente) e restituendo un puntatore a char

char *nfrase(char f1[])