以下我们编程制作一个小菜单,来用矩形法求定积分的通用函数,分别求sinx,cosx,e^x的定积分,上下限由用户输入
关于矩形法求积分:
代码实现:
#include<stdio.h>
#include<math.h>
float func(float (*p)(float),float,float,float);
float fsin(float);
float fcos(float);
float fexp(float);
int main()
{
float a,b,n,result;
float (*p)(float); //定义指向函数的指针p
int i;
printf("which one?:sin,cos or exp:\n");
printf("enter 1(sin),2(cos),or 3(exp):"); //建立菜单
scanf("%d",&i);
if(i==1)p=fsin; //根据用户输入的数来确定指针p的指向
if(i==2)p=fcos;
if(i==3)p=fexp;
//用户输入上下限
printf("a=");
scanf("%f",&a);
printf("b=");
scanf("%f",&b);
printf("n=");
scanf("%f",&n); //n为分成多少个矩形,n越大得到的结果月精确
float dis=(b-a)/n; //分成若干矩形
result=func(*p,a,b,n);
printf("result=%f\n",result);
return 0;
}
//sin,cos,exp已经在系统的数学函数中
float fsin(float x)
{
return sin(x);
}
float fcos(float x)
{
return cos(x);
}
float fexp(float x)
{
return pow(2.718,x);
}
float func(float (*p)(float),float a,float b,float n)
{
float dis,x,i;
x=a;
dis=(b-a)/n;//将水平距离分成n份
float sum=0;
for(i=0;i<n;i++)
{
sum+=(*p)(x+(i-1)*dis+dis/2)*dis; //图示法,画图理解公式
}
return sum;
}
试运行:
以上就是对用指向函数的指针的应用