问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

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

发布网友 发布时间:2023-08-16 04:52

我来回答

3个回答

热心网友 时间:2023-11-10 08:27

//利用Simpson公式来求定积分

#include<stdio.h> 

#include<math.h> 

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<z;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; 

 

}

验证结果:

通过数学知识,我们可以知道

f1(t)=1+t;(积分应该是t+0.5*t*t+任意常数)在区间0到1之间定积分的确是1.5

热心网友 时间:2023-11-10 08:27

//利用Simpson公式来求定积分

#include<stdio.h>

#include<math.h>

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;

}


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

}


double T(double x,double y,int z,double (*fun)(double))

{

double h,Tn;

int i;

h=(x+y)/z;

Tn=((*fun)(x)+(*fun)(y))/2;

for(i=1;i<z;i++)

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;

}



//利用Simpson公式来求定积分

#include<stdio.h>

#include<math.h>

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;

}


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

}


double T(double x,double y,int z,double (*fun)(double))

{

double h,Tn;

int i;

h=(x+y)/z;

Tn=((*fun)(x)+(*fun)(y))/2;

for(i=1;i<z;i++)

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;

}


热心网友 时间:2023-11-10 08:28

//简单的写了一下按照最原始的定积分思想来的
#include<stdio.h>
//定积分通用函数
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);
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
谁能给个单机版的风云之雄霸天下啊?? 求风云雄霸天下PC单机游戏WIN7版 雄霸天下任务指南 开心网001老房子卖了以后家具还有吗? 为什么001开心网买房子组件删除仓库里的东西都没了 请教一下,开心001的开心庄园里面的建材有好多富余的的 除了5元一个卖... 开心网001小号怎么给大号送房子? 开心网001多少级能送别人房子?多少级能接受别人给的房子? 开心网001果实或家具能送人吗 开心网(kaixin001)怎么买外地房子? 1.使用指向变量的指针变量做函数参数,编写函数求两个数的大于、小于... 编写用指针变量作为函数参数实现两个数的交换的函数 用指针作为函数参数,给变量a和b输入两个整数,按升序输出 东方栀子碎雪是中国的吗?我很想知道。 找最值 从键盘任意输入10个整数,用指针变量作函数参数编程计算最大值... 逆水寒碎雪遗窟二层密码箱开启得不到钥匙石门打不开怎么办 大宋开国至今多少年了 炉石传说碎雪机器人卡牌图鉴 逆水寒碎雪遗窟怎么下去 炉石传说碎雪机器人卡牌图鉴介绍 晴天无云溅碎雪的上一句晴天无云溅碎雪的上一句是什么 逆水寒碎雪遗窟怎么进去 怎么形容碎雪 大洋路十二使徒岩在哪些电影里出现过 情侣出现了问题不想分手应该怎么办? 和男朋友有种过不下去的感觉,但是又不想分手,怎么办 红烧狮子头 属哪种菜系序求指点!? 孕期反应大对以后孩子的身体健康有影响吗 适合挂在办公室的字有哪些 生物满分60分多少分是b 利用指向函数的指针变量写一个函数int count1(char *p),统计输入字符... 摩尔庄园的超级拉姆怎麽得到 我觉得男朋友胖,想甩他又舍不得怎么办? 男朋友很土很胖,不愿意带他见朋友,他生气了怎么办? 哈弗h5仪表盘有个小锁头一直亮是什么原因? 昆二医院有出租车到马龙滴滴打车到马龙多少钱? 全新h5哈弗锁需要选装 fpview是什么牌子的显示器 BRAVOVIEW显示器的分辨率高不高? ...但怕杰伦不出现,可以合影吗?有经验的杰迷告 买过周杰伦演唱会VIP票的请进 周杰伦7月3号演唱会可以带相机吗 锌与氢氧化钠如何反应? zn和NaoH反应的化学方程式 买制氧机对公打款是不是骗局 美国什么护肤品或化妆品比国内便宜且适合我的皮肤 从事技术工作的宅男有什么好方法找到女朋友? 怎么挽回技术宅男友 和技术宅谈恋爱有什么体验 毛重与净重是什么意思?