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:

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.
Dice "invertire" ma non specifica di quante colonne è fatta...
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).