Hai solo dimenticato di aggiustare la questione degli indici anche in main()

codice:
for (v = 0; v < m; v++) {
      printf("Inserisci il %d elemento del secondo array: ",v+1);
      scanf("%f", &j[v]);
}
avevi utilizzato ancora m (per inciso, quel &j[v] lo puoi scrivere semplicemente come j + v. Osservazione simile per l'altro array).

Poi c'è anche un altro errore in merge():

codice:
   ...
   if (i >= n) {
   ...
una volta fuori dal while, devi controllare se i è uguale o no a n. In realtà ci andrebbe bene anche solo i == n, l'importante è che l'uguale ci sia. Scrivendo solo > non va, segui la logica degli indici e ti sarà chiaro.

Per il resto, funziona. Se vuoi usare system("PAUSE") includi l'header stdlib.h (ma comunque evita l'utilizzo di system(), per bloccare l'esecuzione del programma mettici una gethcar()), e poi nei due cicli for finali della funzione merge() quel b; non ha alcun effetto. Puoi semplicemente scrivere:

codice:
   for ( ; b < (n+m); b++)
lasciando quindi vuoto il campo inizializzazione (o magari potresti sostituire il for con un while).