函数指针定积分C语言,急!!!利用函数指针变量编写一个求定积分的通用函数...

函数指针定积分C语⾔,急利⽤函数指针变量编写⼀个求
定积分的通⽤函数,...
急利⽤函数指针变量编写⼀个求定积分的通⽤函数,
答案:4  信息版本:⼿机版
解决时间 2021-05-05 09:17
已解决
2021-05-05 02:15
⽤它分别求5个函数的定积分:每次需要求定积分的函数是不⼀样的。可以编写⼀个求定积分的通⽤函数integral,它有3个形参: 下限a、上限b,以及指向函数的指针变量fun。函数原型可写为
double integral (double a,double b,double (*fun)(double));
分别编写5个函数f1,f2,f3,f4,f5, ⽤来求上⾯5个函数的值。然后先后调⽤integral函数5次,每次调⽤时把a,b以及
f1,f2,f3,f4,f5之⼀作为实参,即把上限、下限以及有关函数的⼊⼝地址传送给形参fun。在执⾏integral函数过程中求出各函数定积分的值。 五个函数分别。为: 1+x; 2x+3; e的x次⽅+1;(1+x)*(1+x); x*x*x。 谢谢⼤神了, 我急⽤
每⼀步最好有注释。 谢谢了。
最佳答案
2021-05-05 02:41
//利⽤Simpson公式来求定积分
#include
#include
double T(double x,double y,int z,double (*fun)(double)) ;
double integral (double a,double b,double (*fun)(double));
double f1(double t);
double f2(double t);
double f3(double t);
double f4(double t);
double f5(double t);
int n=0; //⽤来记录积分区间划分的间隔数,数量越⼤,越精确通用积分
void main()
{
double a,b,s;
printf("积分下限 a:\n");
scanf("%lf",&a);
printf("积分上限 b:\n");
scanf("%lf",&b);
printf("区间等分个数 n :\n");
scanf("%d",&n);
s=integral(a,b,f1);//⽤函数f1来验证
printf("函数 f(x)在区间%f到%f 的积分值为 s=%f\n",a,b,s);
}
double f1(double t)
{
return 1+t;
}
double f2(double t)
发动机支撑架
{
return 3+2*t;
}
double f3(double t)
{
return pow(2.71828,t)+1;//⾃然常数e,取了⼀个近似值2.71828 }
double f4(double t)
{
return (1+t)*(1+t);
}
double f5(double t)
{
return t*t*t;
}
//⾟普森公式:
double T(double x,double y,int z,double (*fun)(double))
{
double h,Tn;
int i;
h=(y-x)/z;
Tn=(fun(x)+fun(y))/2;
for(i=1;i
Tn=Tn+fun(x+i*h);
Tn=Tn*h;
return (Tn);
}
double integral(double x,double y,double(*fun)(double))
{
return (4*T(x,y,2*n,fun)-T(x,y,n,fun))/3;
}tmch
验证结果:
通过数学知识,我们可以知道
f1(t)=1+t;(积分应该是t+0.5*t*t+任意常数)在区间0到1之间定积分的确是1.5
全部回答
1楼
2021-05-05 05:17
//简单的写了⼀下按照最原始的定积分思想来的
#include
//定积分通⽤函数
double integral (double a,double b,double (*fun)(double)); //函数声明
double func1(double x); //函数声明
// 主函数
void main()
{
double dintegral;
double a = 1,b = 2; //上下限
dintegral = integral(a,b,func1); //调⽤定积分函数
printf("积分上限:%.2f,下限 %.2f所求函数f(x) = x + 1 积分为:%.2f \n",a,b,dintegral); }
//定积分函数 a下限 b 上限 (*fun)(double) 函数指针 梯形法求积分
double integral (double a,double b,double (*fun)(double))
{
//设置积分精度
int iAccuracy = 10000;// 及把给定区域10000等分
double dPart = (b - a) / 10000;
double dTotalArea = 0;
/
/循环求⾯积
for(int iPartNum = 1; iPartNum <= iAccuracy; iPartNum ++ ) {
//⼀个梯形⾯积 (上底加下底)* ⾼ /2
double dArea = ( fun(a) + fun(a+dPart) ) * dPart /2;
a+=dPart;
dTotalArea += dArea;
}
//返回所求积分
return dTotalArea;
}
//函数取⼀个做⽰范 其余类似
double func1(double x)
{
return (x + 1);
}
2楼
2021-05-05 04:43管桩
//利⽤Simpson公式来求定积分
#include
#include
double f1(double);
double f2(double);
double f3(double);
double f4(double);
double f5(double);
double T(double x,double y,int z,double (*fun)(double)); double integral(double a,double b,double (*fun)(double));
int n=0;//⽤来记录积分区间划分的间隔数,数量越⼤,越精确
int main()
{
double a,b,s1,s2,s3,s4,s5;
printf("积分上限 a:");
scanf("%lf",&a);
printf("积分下限 b:");
scanf("%lf",&b);
printf("区间等分个数 n:");
scanf("%d",&n);
s1=integral(a,b,f1);
s2=integral(a,b,f2);
s3=integral(a,b,f3);
s4=integral(a,b,f4);
s5=integral(a,b,f5);
printf("函数f1在区间%f到%f 的积分值为 s=%f\n",a,b,s1); printf("函数f2在区间%f到%f 的积分值为 s=%f\n",a,b,s2); printf("函数f3在区间%f到%f 的积分值为 s=%f\n",a,b,s3); printf("函数f4在区间%f到%f 的积分值为 s=%f\n",a,b,s4); printf("函数f5在区间%f到%f 的积分值为 s=%f\n",a,b,s5); return 0;
}
double f1(double x)
{
return x+1;
k2608
}
double f2(double x)
{
return 2*x+3;
}
double f3(double x)
{
return pow(2.71828,x)+1;
}
double f4(double x)
{
return pow(x+1,2);
}
double f5(double x)
{无热胆饮水机
return pow(x,3);

本文发布于:2024-09-21 22:05:23,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/2/339221.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:函数   区间   变量   下限   编写   函数指针   上限
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议