Allora... ci sono 2 problemi:
1) Qui continui a considerarlo a 1 dimensione
while (a[i+k]<a[dim-k]) {
2) Mi pare che neppure tu (perché non l'ho capito neanch'io) hai capito il testo del problema. Rileggiamolo:
Dice "invertire" ma non specifica di quante colonne è fatta...Scrivere il codice di una funzione C che permetta di invertire l'ordine degli elementi di ciascuna riga di una matrice di numeri reali in singola precisione.
A questo punto dobbiamo decidere: quante colonne consideriamo? diciamo 2 che se dobbiamo invertire ha senso.
Io quindi toglierei quella sfilza di dim, nrighe e ncolonne e lascerei solo:
void scambia(double **a, int nrighe)
Prova riscriverla così (con o senza swap).