函数指针定积分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;

}

验证结果:

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/551082.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

cordova 更改app版本_【ios马甲包cps联运】App上架难 马甲包不知道该怎么做?

专业app代上架&#xff01;解决全网IOS上包难诸多问题 ,提供多类别马甲包功能包定制服务&#xff01;(直播.财务.社交.生活.游戏.电商)另外提供app加速审核及好评优化服务.长期出售白包功能包!总的来说&#xff0c;App Store 的上架流程&#xff0c;主要分为 7 大步骤:1、创建证…

须使用visual c 内联汇编语言开发,在VisualC 中使用内联汇编

在VisualC 中使用内联汇编2008-04-09 04:08:57来源&#xff1a;互联网 阅读 ()一、内联汇编的优缺点因为在Visual C 中使用内联汇编不需要额外的编译器和联接器&#xff0c;且可以处理Visual C 中不能处理的一些事情&#xff0c;而且可以使用在C/C 中的变量&#xff0c;所以非常…

dockerfile 修改文件权限_网易技术实践|Docker文件系统实战

在本文中&#xff0c;我们来实战构建一个Docker镜像&#xff0c;然后实例化容器&#xff0c;在Docker的生命周期中详细分析一下Docker的文件存储情况和DockerFile优化策略。在开始实战之前&#xff0c;我们先介绍一个概念&#xff0c;联合文件系统&#xff08;Union File Syste…

stm32c语言写数码管定时器,使用TIM1产生1秒定时控制数码管显示0-9(STM32_10)

一、项目配置1、新建项目文件夹"TimSeg"&#xff1b;2、通过Keil5创建新项目&#xff0c;保存在所创建的文件夹中(设项目名为pTimSeg)&#xff0c;选择MCU芯片为"STM32F103ZE"(本程序使用的硬件为&#xff1a;STM32-PZ6806L开发板)3、在"TimSeg"…

pandas自动创建文件夹_pandas快速入门

pandas有两类数据对象&#xff1a;dataframe和series。Series是一个带标签的一维数组&#xff0c;通常索引在左&#xff0c;值在右。dataframe是一个带标签的二维数组&#xff0c;可以理解成series的字典&#xff0c;共用索引标签。重点记录dataframe的相关用法&#xff1a;一.…

小数分数转换c语言,这是把小数转换成分数的程序,可是输入0.6666无限循环

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼#include int main(){double a;scanf("%lf", &a);输入小数int b, c 0, d 0;double b1 a;do{b1 *10;b (int)b1;printf("%d\n", b);if(b%10!0){c;if(d>0){c d;d 0;}}else{d;}}while(d<5);printf("…

血栓清道夫机器人_血栓“清道夫”找到了!木耳排第三,排在第一很多人都并不知道...

当血液中出现大量的血栓&#xff0c;很容易堵塞血管&#xff0c;多处血栓&#xff0c;主要是由于血液中积聚了大量的脂类物质&#xff0c;沉积在血管内壁上形成的&#xff0c;而日常生活中不良的饮食习惯则会加剧我们血液的粘稠程度&#xff0c;大量的直流物质&#xff0c;更容…

for循环c语言流水灯,巧用数组与for循环为流水灯程序瘦身

数组——一种储存大量同性质数据的连续存储器空间a [6];b [] {2&#xff0c;4&#xff0c;8&#xff0c;3&#xff0c;6};c[6] {1&#xff0c;2&#xff0c;3&#xff0c;4&#xff0c;5&#xff0c;6};char d[6] "hello";以上方式均是数组创建的常用方式~数组是从…

java的map 使用string数组多了双引号_奥奥奥利给!!!再也不怕面试官问我String源码了!来吧...

简述字符串广泛应用 在 Java 编程中&#xff0c;在 Java 中字符串属于对象&#xff0c;Java 提供了String 类来创建和操作字符串。字符串缓冲区支持可变字符串。因为String对象是不可变的&#xff0c;因此可以共享它们。String类代表字符串&#xff0c;Java程序中的所有字符串字…

C 语言 运算符怎么使用,详解C++编程中运算符的使用

C的运算符十分丰富&#xff0c;使得C的运算十分灵活方便。例如把赋值号()也作为运算符处理&#xff0c;这样&#xff0c;abc4就是合法的表达式&#xff0c;这是与其他语言不同的。C提供了以下运算符&#xff1a;算术运算符(加) -(减) *(乘) /(除) %(整除求余) (自加) --(…

面积积分_袁颖妍:用定理积分求平面区域面积(有代表性的9个例题)

考研竞赛智慧e数学的广告&#xff1a;鸡汤所谓“理解”&#xff0c;所谓“智商”&#xff0c;本质上最终都归到"记忆",还有一点就是能够发现自己“记忆”中各个零散的知识点的关系。所谓“智商”高低的人&#xff0c;其实是强化这些“记忆”的能力的不同&#xff0c;…

vip会员管理系统c语言,路西牌会员管理系统。

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼void VIP::show( Node *v){no(v);char *aVIP::sex(v);std::cout<<< "会员姓名: "<< node.item.num[1]<< endl<< "性别: "<< sex(v)<<< "手机号码: "<…

字体选择_十分钟带你掌握精准选择字体的方法!

文章序言&#xff1a;上次记得有粉丝评论需要讲讲字体&#xff0c;今天就给大家带来一期关于&#xff0c;如何快速选择合适的字体的文章&#xff0c;帮助大家以后把字体用对&#xff0c;用好&#xff0c;用准。在讲这个字体的时候会结合实际的案例操作给大家讲解&#xff0c;这…

c语言输出行末不得有多于空格,新人提问:如何将输出时每行最后一个空格删除...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼如何将每行最后一个空格删除&#xff0c;使矩阵只有数字间有空格&#xff0c;没有多余空格&#xff1f;#include#includeint main(){int i,j,k,m,n,x,h,y;int a[15][15]{0};while(scanf("%d",&i)){k1;for(n1;n<i;…

php对象数组转数组_php 数组对象互相转换

有时候会遇到php中对象和数组之间的互相转换/*** 将对象转换为多维数组***/function objectToArray($d) {if (is_object($d)) {// Gets the properties of the given object// with get_object_vars function$d get_object_vars($d);}if (is_array($d)) {/** Return array con…

linux 查看neihe版本_linux查看系统内核版本号

查看系统内核有三种方法&#xff1a;第一种方法&#xff1a;[rootlocalhost nginx]# uname -aLinux localhost.localdomain 2.6.32-696.30.1.el6.i686 #1 SMP Tue May 22 02:54:00 UTC 2018 i686 i686 i386 GNU/Linux第二种方法&#xff1a;uname -r[rootlocalhost nginx]# una…

android自动生成cardview,学习使用Material Design控件(三)使用CardView实现卡片效果...

本文主要介绍CardView的使用&#xff0c;CardView是继承自FrameLayout&#xff0c;使用比较简单&#xff0c;只需要用CardView包含其他View就可以实现卡片效果了。实现效果如下&#xff1a;加入依赖库dependencies {….compile com.android.support:cardview-v7:22.2.0}Layout布…

p6000 深度学习_英伟达推Quadro新显卡,支持VR、深度学习等技术

青亭网(ID:qingtinwang)--链接科技前沿&#xff0c;服务商业创新英伟达今天宣布了一系列的Quadro产品&#xff0c;全部都是基于他们的Pascal架构。能够让桌面级工作站转换为跨越多个产业、具备专业工作流突破性能的超级电脑。包括设计、工程和其他领域的工作流都在急速发展&…

android最新设计规范,Android应用未来的设计规范

谷歌在2014 I/O大会上不但发布了Android L&#xff0c;还一同推出了全新的Material Design设计语言&#xff0c;它被认为是未来Android系统和应用的设计方向。虽然Android L和谷歌自家的应用都会按照这一设计规范来执行&#xff0c;但第三方应用却没能够积极的响应。究竟用Mate…

react实现上传文件进度条功能_React.js 可拖放文件的上传表单(支持多文件和进度显示)...

JavaScript语言&#xff1a;JaveScriptBabelCoffeeScript确定console.clear();const {createClass,PropTypes} React;const {render} ReactDOM;const styles {inputWrapper: input-wrapper,inputCover: input-cover,helpText: help-text,fileName: file-name,fileNameStretc…