Questo è il codice completo, funziona senza errori (ne ho trovati un altro paio)


#include <stdlib.h>
#include <stdio.h>

int horner(float *coeff, int n, int c);

void main(){

int i, c, n;
float *coeff;

printf("Inserire il grado del polinomio: ");
scanf("%d", &n);

if(!(coeff = (float *)malloc(n*sizeof(float))))
abort();

printf("\nInserire uno ad uno i valori dei coefficienti: ");
for(i = 0; i < n; i++){
printf("\nInserire il valore del coeff %d: ", i+1);
scanf("%f", &coeff[i]);
}

printf("\nInserisci il valore di c: ");
scanf("%d",&c);

printf("%d", horner(coeff, n, c));

free(coeff);
}

int horner(float *coeff, int n, int c){

int i, horner;

horner = coeff[n];
for(i = n-1; i > 0; i--)
horner = horner * c + coeff[i];

return horner;
}


p.s. quando chiami una funzione che ha valore di ritorno, o assegni il valore ritornato ad una variabile o lo stampi.

Cioè:
horner(coeff, n, c);
printf("%d",horner);

Non ha molto senso. La prima riga è ok sintatticamente, ma nn sfrutti il valore di ritorno. Nel secondo caso vuoi farglielo stampare chiamando la funzione ma nn le passi i parametri.

Quindi o fai una cosa tipo x = horner(coeff, n, c); e poi stampi x o fai come nel codice che ti ho postato nel quale stampa direttamente