简单问题求解答:c语言梯形法求定积分

题目:按如下函数原型,采用梯形法编程实现,在积分区间[a,b]内计算函数y1=∫10(1+x2)dx和y2=∫30x1+x2dx的定积分。其中,指向函数的指针变量f用于接收被积函数的入口地址。
Integral(float (*f)(float), float a, float b);
**输出格式要求:"y1=%f\ny2=%f\n"

我的答案:请问哪里错了?
#include
#define n 10000

float y1(float x)
{
float y;
y = x*x + 1;
return y;

}

float y2(float x)
{
float y;
y = x/(x*x + 1);
return y;

}

Integral(float (*f)(float), float a, float b)
{
int i;
float w;
float h = (b-a)/n;
float s = f(a)+f(b);
for(i = 1;i < n; i++)
{
s += f(a + i*h);
}
w = s*h /2;
return w;

}

main()
{
float y11;
y11 = Integral( y1 , 0, 1);

float y22;
y22 = Integral( y2 , 0, 3);

printf("y1=%f\ny2=%f\n",y11,y22);
return 0;

}

C语言是不允许对于函数指针f调用f()的(不过C++允许),如果要调用就用(*f)()。