/* création d'un type "fonction" nommé T_FONC : */
typedef double T_FONC ( double x );
/* prototypes des fonctions (à l'aide du nouveau type T_FONC) */
T_FONC fct1, fct2;
double calculer_deriv( T_FONC* f, double x );
/*--------------------------------------------------------------------*/
void main(void)
{
    double res1, res2, x = 5.4;
    res1 = calculer_deriv( fct1, x );
    res2 = calculer_deriv( fct2, x );
    printf("\n dérivée de fct1 en x=%lf : %lf", x, res1 );
    printf("\n dérivée de fct2 en x=%lf : %lf", x, res2 );
}
/*--------------------------------------------------------------------*/
/* définition de la fonction calculer_deriv (avec un paramètre de type T_FONC*) : */
double calculer_deriv( T_FONC* f, double x )
{
    double dx, res;
    dx = 1e-8 * x;
    res = ( (*f)(x+dx) - (*f)(x) ) / dx ;
    return res;
}
/*--------------------------------------------------------------------*/
/* définitions des fonctions de type T_FONC (voir mise en garde du paragraphe 13.5.1) : */
double fct1( double x )
{
    return (2*x*x - 1.) ;
}
double fct2( double x )
{
    return 1./x ;
}
