Заводим структуру-сумматор. Изначально она 0/1. Что-то типа
typedef struct {
int num, den;
} Fraction;
…
Fraction sum = { 0, 1 };
Дальше пишу псевдокодом, НОД и НОК разберись, как реализовать самому.
для каждой очередной дроби
ввести(дробь)
новыйЗнам = НОК(сумматор.знам, дробь.знам)
множСумм = новыйЗнам / сумматор.знам
множДробь = новыйЗнам / дробь.знам
новыйЧисл = сумматор.числ × множСумм + дробь.числ × множДробь
сокрНод = НОД(новыйЧисл, новыйЗнам)
сумматор.числ = новыйЧисл/сокрНод
сумматор.знам = новыйЗнам/сокрНод
Можно и оптимизировать, но тогда нужна хитрая разновидность алгоритма Евклида; в учебных целях не стоит.
И ещё. Одна из известных ошибок в написании НОК — произведение аргументов не влезает в свой тип, а НОК влезает. Поймёшь, как в такой ситуёвине избавиться от переполнения?