Хотя чтение целых чисел по одному не является эффективным способом сделать это, я постараюсь написать решение, которое вы ищете. однако это не реальная реализация, просто идея.
Ваша структура должна быть такой:
struct filePointer {
FILE * fp;
int num;
} fptr[k]; /* I assume k is constant, known at compile time */
Вам необходимо иметь приоритетную очередь (http://en.wikipedia.org/wiki/Priority_queue), и приоритеты определяются в соответствии с числом.
Сначала прочитайте первые числа из всех файлов и вставьте их в очередь с приоритетами (pq).
Тогда, пока pq не пуст, выведите первый элемент, который содержит наименьшее целое число по сравнению с другими элементами в pq.
Записать целое число, которое первый элемент содержит в файл.
Используя указатель файла (fp), попробуйте прочитать новое целое число из входного файла.
Если EOF (конец файла), то ничего не делать
иначе вставьте новый элемент в pq, установив num в считанный.
Когда цикл завершится, закройте все файлы, и у вас будет новый файл, содержащий все элементы из входных файлов, и он будет отсортирован.
Надеюсь, это поможет.