>>255こんな感じ、あまりうまく作れなかった。
#include <math.h>
#include <stdio.h>

#define FRST_DEVI 1e-4
#define ERR_RANGE 1e-8
#define LOOP_MAX 1000

double cal_error(double x, double y){
return fabs(x-y) ;}/*ここは手直しせよ(相対誤差にするべき)*/

double d(double (*func)(double), double x) /*funcのxでの微分係数を計算*/
{
int c=0 ;
double h, ret, prev ;

h = FRST_DEVI ;
ret = (func(x+2*h) - func(x)) / (2*h) ;
do {
prev = ret ;
ret = (func(x+h)-func(x))/h ;
c++, h/=2 ;
} while(cal_error(prev, ret)>ERR_RANGE && c<LOOP_MAX) ;

return ret ;
}

double newton(double (*func)(double), double x) /*初期値xでfuncのニュートン法*/
{
int c=0 ;
double prev_x ;

do {
prev_x = x ;
x = x - func(x)/d(func, x) ;
c++ ;
} while(cal_error(prev_x, x)>ERR_RANGE && c<LOOP_MAX) ;

return x ;
}

double f(double x){ /*ターゲット関数*/
return cos(x)-sin(x) ;}

void main(void){
printf("%lf\n", newton(f, 0)) ;}