通用定积分-函数指针实现 收藏
#include <stdio.h>
#include <math.h>
#define N 1000 //积分区间划分的精度
double f1(double);
double f2(double);
double f3(double);
double (*f[3])(double)={f1,f2,f3};
double integral(double a, double b, double (*f)(double));
void main()
{
double a,b;
int type;
double result;
//获取参数
printf("1: 1+x/n");
printf("2: 3+2x/n");
printf("3: e^x+1/n");
fflush(stdin);
printf("选择被积函数:");
scanf("%d",&type);
fflush(stdin);
printf("/n积分下限:");
scanf("%lf",&b);
fflush(stdin);
printf("积分上限:");
scanf("%lf",&a);
if (b<a)
{
result=integral(a,b,f[type-1]);
}
else
{
result=-integral(b,a,f[type-1]);
}
//计算、返回结果
printf("积分结果为:%f",result);
}
double f1(double x)
{
return (1.0+x);
}
double f2(double x)
{
return (3.0+2.0*x);
}
double f3(double x)
{
return (exp(x)+1.0);
}
double integral(double a, double b, double (*f)(double))
{
double deltx=(a-b)/N;
double x;
double sum=0;
for(x=b;x<=a;x+=deltx)
{
sum+=f(x)*deltx;
}
return sum;
}
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/liang_xinhui/archive/2011/04/18/6332264.aspx