矩形法求定积分的通用函数;求Fsinx,Fcos,Fexp;
#include<stdio.h>
#include<math.h>
int main()
{
float intergral(float (*)(float),float,float,int);//对integral 的声明;
float fsin(float);//fsin 函数的声明;
float fcos(float);//fcos 函数声明
float fexp(float);//fexp 函数声明;
float a1,b1,a2,b2,a3,b3,(*p)(float);//
float c;
int n=20;
printf("please input sin a1,b1 value:");
scanf("%f,%f",&a1,&b1);
printf("please input cos a2,b2 value:");
scanf("%f,%f",&a2,&b2);
printf("please input exp a3,b3 value:");
scanf("%f,%f",&a3,&b3);
p=fsin;//p为指向函数的指针变量;定义形式是float(*p)(float);
c=intergral(p,a1,b1,n);
printf("the output fsinx=%f/n",c);
p=fcos;//将fcos函数的入口地址赋值给p;
c=intergral(p,a2,b2,n);
printf("the output fconsx=%f/n",c);
p=fexp;
c=intergral(p,a3,b3,n);
printf("the output fexp=%f/n",c);
return 0;
}
float intergral( float (*p)(float),float a,float b,int n)//这个地方忘了声明int a,int b,int n;
{ //float (*p)(float)表示p指向的函数有一个实型形参,p指向返回值为实型的函数;p相当于fsin(x);fsin(x)的值就是sin(x)的值;
int i;
float x,h,s;
h=(b-a)/n;//将a到b区间分成20份;h是平均数值;
x=a;
s=0;
for(i=1;i<n;i++)
{
x=x+h;
s=s+(*p)(x)*h;//s=h.(f(a+h/2)+f(a+h+h/2)+...+f(a+n-1)h+h/2);函数f在(a,b)区间的定积分公式;
}
return (s);
}
float fsin(float x)//x忘记声明;应该是float x;
{
return (float)sin(x);
}
float fcos(float x)
{
return (float)cos(x);
}
float fexp(float x)
{
return (float)exp(x);
}