I realize that I may be overreaching myself, but to save everyone trouble, I've converted the code for the OP:
#include <cstdio>
#include <cmath>
#define pi 3.141593
#define F(x) ((*f)(x))
#define sqr(x) ((x)*(x))
#define no_intv 5000
double xsav;
double (*nrfunc)(double x, double y);
double ellip2d(double a, double b, double (*func)(double x, double y));
double f1(double s1);
double f1(double s1);
double f2(double s2);
double funcn(double x, double y);
double simpson(double a, double b, double (*f)(double x));
int main()
{
double Nq;
Nq = ellip2d(-pi, pi, funcn);
printf("Nq = %f\n", Nq);
return 0;
}
//////////////////////////////////////
double ellip2d(double a, double b, double (*func)(double x, double y))
{
nrfunc = func;
return simpson(a, b, f1);
}
double f1(double s1)
{
xsav = s1;
return simpson(-pi, pi, f2);
}
double f2(double s2)
{
return ((*nrfunc)(xsav,s2));
}
////////////////////////////////////
double funcn(double x, double y)
{
return x * x + y;
}
double simpson(double a, double b, double (*f)(double x))
{
int i;
double x,h,sum = 0.0;
if(fabs(b-a) < 0.000001) return 0.0;
h = (b - a) / ((float)no_intv);
x = a + h;
for(i = 2; i <= no_intv; i++)
{
if(i&1) sum += 2.0 * F(x);
else sum += 4.0 * F(x);
x+=h;
}
return (h*(F(a)+sum+F(b))/3.0);
}
This is just a straight translation; since Physicist presumably knows what changes he wants to make, I'll leave it to him to convert the I/O and so forth.