矩形法求定积分的通用函数;求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);}