(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));

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值