(C)定积分解决问题
#include <stdio.h>
#include <math.h>
max(int x,int y)
{
int z;
if(x>y)
z=x;
else
z=y;
return z;
}
min(int x,int y)
{
int z;
if(x<y)
z=x;
else
z=y;
return z;
}
sum(int x,int y)
{
int z;
z=x+y;
return z;
}
process(int x,int y,int (*fun)(int ,int))
{
int result;
result=(*fun)(x,y);
return result;
}
// float integral(float a,float b,float(*fun)(float))
// {
// float result;
// result=(*fun)(a);
// return result;
// }
double f1(double x)/*f1(x)是被积函数1*/
{
// return (1+x)*x;
return x;
}
double f2(double x)/*f2(x)是被积函数2*/
{
return (3+2*x)*x;
}
double f3(double x)/*f3(x)是被积函数3*/
{
return exp(x)+1;
}
double f4(double x)/*f4(x)是被积函数4*/
{
return pow(x+1,2);
}
double f5(double x)/*f5(x)是被积函数5*/
{
return pow(x,3);
}
double integral(double a,double b,double (*fun)())
/*形参b,a是积分的上下限,函数指针fun指向被积函数*/
{
#define NUM 100 //越大越精
double integral=0,dx=(b-a)/NUM;
int i;
double x1=a,x2=a+dx;
for(i=0;i<NUM;i++,x1=x2,x2+=dx)
{
// integral+=(fun(x1)+fun((x1+x2)/2)+fun(x2))/3*dx;
integral+=fun((x1+x2)/2)*dx;
}
return integral;
}
// 吴新强 桂电 2507
main()
{
int a,b,c;
double k;
printf("enter a and b :");
scanf("%d,%d",&a,&b);
// c=max(a,b);
c=process(a,b,max);
printf("max=%d\n",c);
// c=min(a,b);
c=process(a,b,min);
printf("min=%d\n",c);
//printf("sum=");
// c=sum(a,b);
c=process(a,b,sum);
printf("sum=%d\n",c);
// double Pi=3.1415926535898;
k=integral(a,b,f1);
printf("第一个定积分≈%lf\n",k);
k=integral(a,b,f2);
printf("第二个定积分≈%lf\n",k);
k=integral(a,b,f3);
printf("第三个定积分≈%lf\n",k);
k=integral(a,b,f4);
printf("第四个定积分≈%lf\n",k);
k=integral(a,b,f5);
printf("第五个定积分≈%lf\n",k);
// printf("第一个定积分≈%lf\n",integral(0,1,f1));
// printf("第二个定积分≈%lf\n",integral(0,1,f2));
/// printf("第三个定积分≈%lf\n",integral(0,1,f3));
// printf("第四个定积分≈%lf\n",integral(0,1,f4));
// printf("第五个定积分≈%lf\n",integral(0,1,f5));
}