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

答案: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;

}

验证结果:

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

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;

}

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

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

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

}

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

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;

}

3楼

2021-05-05 03:53

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

  1. 编写一个求定积分的通用函数

    /* 作业: 编写一个求定积分的通用函数,用它分别求以下几个积分: double integral(double a, double b, double (*f)(double)); */ #incl ...

  2. 用C语言用指针怎么算通用定积分,C语言:利用函数指针编写一个用矩形法求定积分的通用函数,包括正弦,余弦和指数函数,...

    问题描述: C语言:利用函数指针编写一个用矩形法求定积分的通用函数,包括正弦,余弦和指数函数, //我运行的结果和答案对不上,请帮我看看程序对吗? //实现积分 #include #include i ...

  3. 编写指数函数 c语言,C语言:利用函数指针编写一个用矩形法求定积分的通用函数,包括正弦,余弦和指数函数,...

    问题描述: C语言:利用函数指针编写一个用矩形法求定积分的通用函数,包括正弦,余弦和指数函数, //我运行的结果和答案对不上,请帮我看看程序对吗? //实现积分 #include #include i ...

  4. c语言中fact函数怎么调用,C语言程序题: 1、编写一个求n!的函数fact(n),要求fact函数分别用递归和非递归两种方法实现...

    点击查看C语言程序题: 1.编写一个求n!的函数fact(n),要求fact函数分别用递归和非递归两种方法实现具体信息 答:int fac(int n) //非递归{int f=1; for(;n;) ...

  5. c语言 编写一个求圆面积的函数area,该函数有一个形式参数r,c语言编写一个求圆面积的函数area,有形参,类型为float...

    用c语言编写函数,求圆的周长和面积,用函数.急求. #include#definePI3.1415926doublearea(doubler){returnPI*r*r;}doubleperimete ...

  6. C语言编程>第六周 ① 编写一个录入函数:用来从键盘接收n个整型数并存放在一个整型数组中。 在主函数中调用该函数计算出这n个整数之和。

    例题:编写一个录入函数:用来从键盘接收n个整型数并存放在一个整型数组中. 在主函数中调用该函数计算出这n个整数之和. 代码如下: /*代码分析:录入函数需要两个参数:一个参数是需要用来存储数字的数组, ...

  7. 【Python】利用map和reduce编写一个str2float函数,把字符串'123.456'转换成浮点数123.456

    微信公众号 题目来源:[廖雪峰的官方网站-map/reduce] 利用map和reduce编写一个str2float函数,把字符串'123.456'转换成浮点数123.456: from functo ...

  8. 利用map和reduce编写一个str2float函数,把字符串'123.456'转换成浮点数123.456:

    题目:利用map和reduce编写一个str2float函数,把字符串'123.456'转换成浮点数123.456: 来源:廖雪峰Python上的练习题 思路定位小数点,分割小数部分和整数部分,使用r ...

  9. C语言编程>第五周 ⑤ 编写一个程序,从键盘输入X,Y,Z 3个数, 编写函数计算3个数的立方和并返回计算结果。

    例题:编写一个程序,从键盘输入X,Y,Z 3个数, 编写函数计算3个数的立方和并返回计算结果. 第一种方法: 代码如下: #include <stdio.h> int abc(int,in ...

最新文章

  1. Notepadd++主题推荐
  2. AngularJS笔记之创建服务方式比较 : factory vs service vs provider
  3. [vue] prop是怎么做验证的?可以设置默认值吗?
  4. 怎么得到16位校检和-c语言,16位CRC校验C语言算法.pdf
  5. python java 速度_Java Go python 运行速度对比
  6. Unihan(统汉字)常用字段介绍
  7. 【机器学习】10:朴素贝叶斯做文本分类
  8. DOS命令diskpart格式化磁盘
  9. 【ACWing】671. DDD
  10. linux 快照工具,技术预览:CentOS 7中利用Snapper GUI管理系统快照
  11. oracle查表的更新时间,Oracle 查询倒叙查询所有表更新时间
  12. 16个千兆光口8个千兆Combo光电复用口管理型工业以太网交换机环网+WEB管理+SNMP+VLAN
  13. 解决vmbox虚拟机 能上网,能ping通宿机,但是宿机 ping 不通 虚拟机
  14. 【5月比赛合集】80场可报名的数据挖掘大奖赛,任君挑选!
  15. iPad屏幕不亮但是有声音
  16. c语言注释符号 井号,读c语言深度剖析 -- 符号 注释符号
  17. shell脚本使用教程3
  18. 炉石传说 古墓惊魂 灾祸领主 英雄技能
  19. node-gdal ogr2ogr 配置
  20. jmeter安装与介绍

热门文章

  1. uniapp离线打包具体步骤
  2. python海龟画图模块制作的拦球小游戏,谁说小海龟只会画图
  3. 半年总结2018-2019
  4. 北京开了好头,带了风口....
  5. JavaScript系列之模板字符串
  6. Docker部署 Harbor
  7. 【C++ 程序】 数字推盘游戏(15-puzzle)(EasyX图形界面)
  8. 三调 图斑地类面积_收藏 | “三调数据”与国土空间规划用地对接的70个技术问题...
  9. 什么是综合布线系统?
  10. 麦克风FCC-ID认证