Oula, il y a pas mal de choses que tu n'as pas compris.
Déjà les notions de variable locales :
C'est une mauvaise idée d'avoir tout déclaré en dehors avec "int i,k,n;"
Les variables utilisées par la fonction factorielle doivent être déclarées dans cette dernière. Pareil pour les variables utilisées par le main.
Affectation :
"k=n*i;"
"i=i+1;"
Ici, la valeur de k est en gros égale à n² à la fin.
Je te laisse chercher pourquoi... (Tu n'utilises pas le bon opérateur)
Principe de fonction :
Tu as une fonction "factoriel" qui retourne "k".
Pour afficher sa valeur il suffit d'afficher ce que la fonction retourne.
printf("n! = %d", factoriel(n));