C'est une question un peu complique qui demande a comprendre comment le C est compile.
Quand tu #include un fichier, ce fichier est essentiellement copier/coller dans celui qui l'inclut par le precompilateur. Ca veut dire que du point de vue du compilateur, il n'y a pas de difference entre ecrire la fonction dans le .h et ecrire la fonction dans chaque .c qui inclut le .h.
Quand tu defini une fonction, du genre: int f1(){return 12;}, tu indiques au compilateur que la fonction doit etre exporte dans la table des symboles.
Donc si tu defini la meme fonction plusieurs fois dans different .c (par exemple, par inclusion d'un .h) alos la emme fonction va etre exporte plusieurs fois dans la table des symbols et tu aura une erreur a l'edition de lien.
C'est pour ca qu'en general, la fonction est declare dans le .h par int f1(); mais pas defini. Ca indique au compilateur qu'il y a une fonction f1 dans la table des symboles contre la quelle il faut linker. Et c'est pour ca que l'on prefere en general declare les fonctions dans des .h et les definir dans un .c apart.
Quand le cadre de ton cours, j'imagine que vous n'utilisez pour l'instant que des codes en un seul fichier .c. Du coup ca peut etre plus simple de mettre la definition de la fonction dans le .h parceque ca ne causera pas de probleme et comme ca, ca rend la configuration de la chaine de compilation plus simple parcequ'on peut faire compilation et linkage en un seul coup.
Deux cas particuliers, les fonctions inline et static ne sont pas exporte dans la table des symboles. C'est bien parcequ'on peut tout mettre dans le .h. C'est pas bien parceque ca veut dire que chaque fichier va avoir sa propre copie de toutes les fonctions et ca fait grossir la taille du binaire.
En C++ (je sais c'est un question de C, mais la question est interessante en C++), les templates ont aussi un comportement particulier relativement a la table des symboles. Et typiquement le code entier des fonctions est dans les .h. Ca permet de faire des "templates only library" qui n'ont pas besoin de linker contre quoi que ce soit, amis qui ont un cout de compilation plus eleve. Typiquement, la plus par de la lib boost est ecrite comme ca.