Ciao ... Ci sono degli errori nella funzione separa_maiuscole_minuscole :
codice:
void separa_maiuscole_minuscole (char s[][N], char vetc1[], char vetc2[], int num_s) { 
int i,j; int k1=0; int k2=0; 
for(i=0; i<num_s; i++)
 for(j=0;s[i][j]!='\0';j++) { 
          if (s[i][j]>= 'A' && s[i][j]<='Z') {
                vetc1[k1]=s[i][j]; 
                    k1++;} 
          else
              vetc2[k2]=s[i][j];
                 k2++; } 
// Qui devi terminare le 2 stringhe (vetc1 e vetc2)
vetc1[k1] = '\0';
 vetc2[k2] = '\0';
printf("il vettore maiuscole e' \n");  
// printf("%s", vetc1 [i]);  ERRORE
printf("%s", vetc1);
printf("il vettore minuscole e'\n"); 
//printf("%s", vetc2 [i]);  ERRORE
printf("%s", vetc2); 
}
Ricordati anche che è brutta abitudine non inizializzare un puntatore (anche se non si userà al momento) come hai fatto tu ... Se non gli si vuole assegnare un valore subito si usa inizializzarlo a NULL

codice:
FILE* f = NULL; // nel tuo caso
Questo perchè può comportare degli errori difficili da scovare.
Comunque il codice da te proposto è soggetto a delle restrizioni come ad esempio la lunghezza delle stringhe nel file ...