Io sono abituato ad intendere m x n come m righe per n colonne. E questa abitudine direi che deriva dai libri di matematica. 
Beh, il fatto di allocare prima le colonne e poi le righe .. dipende. L`importante e` che _prima_ allochi un array di puntatori e che poi in ciascun puntatore di tale array allochi un array di valori. Sta a te poi vedere quali considerare le righe e quali le colonne. In C sara` sempre e cmq un array di array.
Una cosa pero` resta fissa. Il primo indice e` ovviamente quello dell`array di puntatori, e il secondo quello dei "sotto-array". Di conseguenza, nel tuo codice la matrice avra` n righe ed m colonne.
Scorrimento n x m:
codice:
for( i = 0; i < n; ++i )
for( j = 0; j < m; ++j )
scanf( "%f", &a[ i ][ j ] );
Scorrimento m x n:
codice:
for( j = 0; j < m; ++j )
for( i = 0; i < n; ++i )
scanf( "%f", &a[ j ][ i ] );
Come vedi puoi facilmente capovolgere il punto di vista, leggendo la trasposta.
Ciao.