Estimados,
Primero que nada, una sugerencia que a mi entender es muy importante:
NO empiecen implementando los bloques para luego, al final, hilvanar todo con el main()!!
Lo mejor es hacer al revés: implementar primero que nada el main, luego hacer una primera implementación 'de relleno' de las funciones y los bloques,
vacías por dentro o haciendo algo muy tonto (como devolver lo que reciben). Con esa implementación "inutil" del main, hacen el Makefile.
Recién cuando tengan el esqueleto de la aplicación, con Makefile y todo, compilando, pueden empezar a pensar en rellenar los bloques.
Además, en este punto les recomiendo que suban lo que tienen al sistema de verificación de entregas, y no paren hasta que supere las fasses de chequeo
de la estructura y la compilación.