Hai solo dimenticato di aggiustare la questione degli indici anche in main()
avevi utilizzato ancora m (per inciso, quel &j[v] lo puoi scrivere semplicemente come j + v. Osservazione simile per l'altro array).codice:for (v = 0; v < m; v++) { printf("Inserisci il %d elemento del secondo array: ",v+1); scanf("%f", &j[v]); }
Poi c'è anche un altro errore in merge():
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.codice:... if (i >= n) { ...
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:
lasciando quindi vuoto il campo inizializzazione (o magari potresti sostituire il for con un while).codice:for ( ; b < (n+m); b++)