利用梯形法计算定积分

其中, f(x)=x3+3x2-x+2。

算法思想

根据定积分的定义分析可得:[x0,x1],[x1,x2],···,[xn-1,xn],将定积分的区间 [a,b] 分成 n 个子区间,其中:

若右边的极限存在,其极限值即为定积分的值。理论上区间分得越细,越逼近定积分实际的值,一般采用梯形法近似计算定积分的值,把区间 [a,6] 划分成 n 等份,则任意第 f 个小梯形的面积为 (上底+下底)×高/2,si=H×[f(xi)-1)+f(xi)]/2,其中 xi+1=a+(i+1)×H;xi=a+i×H;H=(b-a)/n。该实例问题实际上转换为求 n 等份梯形的面积累计和。

程序代码

#include

#include

float collect(float s,float t,int m,float (*p)(float x));

float fun1(float x);

float fun2(float x);

float fun3(float x);

float fun4(float x);

int main()

{

int n,flag;

float a,b,v=0.0;

printf("Input the count range(from A to B)and the number of sections.\n");

scanf("%f%f%d",&a,&b,&n);

printf("Enter your choice:'1' for fun1,'2' for fun2,'3' for fun3,'4' for fun4==>");

scanf("%d",&flag);

if(flag==1)

v=collect(a,b,n,fun1);

else if(flag==2)

v=collect(a,b,n,fun2);

else if(flag==3)

v=collect(a,b,n,fun3);

else

v=collect(a,b,n,fun4);

printf("v=%f\n",v);

return 0;

}

float collect(float s,float t,int n,float (*p)(float x))

{

int i;

float f,h,x,y1,y2,area;

f=0.0;

h=(t-s)/n;

x=s;

y1=(*p)(x);

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

{

x=x+h;

y2=(*p)(x);

area=(y1+y2)*h/2;

y1=y2;

f=f+area;

}

return (f);

}

float fun1(float x)

{

float fx;

fx=x*x-2.0*x+2.0;

return(fx);

}

float fun2(float x)

{

float fx;

fx=x*x*x+3.0*x*x-x+2.0;

return(fx);

}

float fun3 (float x)

{

float fx;

fx=x*sqrt(1+cos(2*x));

return(fx);

}

float fun4(float x)

{

float fx;

fx=1/(1.0+x*x);

return(fx);

}

调试运行结果

程序运行结果如下所示:

Input the count range(from A to B)and the number of sections.

0 1 100

Enter your choice:'1' for fun1,'2' for fun2,'3' for fun3,'4' for fun4==>2

v=2.750073

总结

① 定义 collect() 函数时,函数的首部 “float collect(float s,float t,int n,float (*p)(float x))” 中的 “float (*p)(float x)” 表示 p 是指向函数的指针变量,该函数的形参为实型。在 main() 函数的 if 条件结构中调用 collect() 函数时,除了将 a,b,n 作为实参传给 collect 的形参 s,n,t 外,还必须将函数名 fun1,fun2,fun3,fun4 作为实参将其入口地址传递给 collect() 函数中的形参 p。

② 函数也是有地址的,函数名作为函数的首地址。可以定义一个指向函数的指针变量,将函数入口地址赋予指针变量,然后通过指针变量调用函数,这样的指针变量即称为指向函数的指针。

③ 函数指针也是指针变量,可以实现指针变量的运算,但不能进行算术运算,因为函数指针的移动是毫无意义的,不同于数组指针变量,加减一个整数可以使指针指向后面或前面的数组元素。

④ 在函数调用中 “(* 指针变量名)” 两边的括号不可少,其中此处为一种表示符号,而不是求值运算。

c语言求定积分的程序,C语言求定积分相关推荐

  1. c语言经典解决实际程序,C语言经典教程1讲.ppt

    <C语言经典教程1讲.ppt>由会员分享,可在线阅读,更多相关<C语言经典教程1讲.ppt(48页珍藏版)>请在人人文库网上搜索. 1.C程序设计,主讲人:任祖华,2,本课程学 ...

  2. c语言课程设计加密程序,C语言课程设计文件加密解密.doc

    C语言课程设计文件加密解密 C语言程序设计 课程设计 学 院 计算机工程 班 级 计算1313 姓 名 学 号 201321121089 成 绩 指导老师 2014年6月26日 计算1313班C语言程 ...

  3. python是语言还是软件_程序开发语言之Python:是追逐还是坚守?

    Python作为计算机程序设计语言的其中一种,最初是被设计用于编写自动化脚本(shell),随着版本的不断更新.语言新功能的添加和机器学习的兴起,Python从2017年开始受到广泛关注. Pytho ...

  4. c语言怎么返回前一个程序,c语言return返回到哪

    c语言return返回到哪 c语言return,返回给了上一级,比如一个递归程序,从第三层返回到第二层:又比如一个普通的子程序,那就返回到主程序中去. 主程序中return返回给了操作系统. 比如下面 ...

  5. 用c语言做一个五子棋程序,C语言制作简单五子棋游戏

    原标题:C语言制作简单五子棋游戏 C语言制作简单的五子棋游戏 学习C语言的人很多,但是用C语言很少,而用来为自己所用,来做游戏的人就更少了,很多人都是跟着学校学习,学校讲到哪就坐到哪,但是以后却还是不 ...

  6. c语言求定积分的程序,C语言用六种方法求定积分

    <C语言用六种方法求定积分>由会员分享,可在线阅读,更多相关<C语言用六种方法求定积分(14页珍藏版)>请在人人文库网上搜索. 1.C语言 用六种方法求定积分C语言实验报告hW ...

  7. c语言怎样写积分程序,C语言实现定积分求解方法

    求定积分的方法有很多种,下面是我总结的几种比较常用的方法. #include #include #include #include #define N3 double fun(double x) { ...

  8. c语言常考的程序,C语言 一些常考得东西

    C语言基础测试 1.#include "heima.txt" 表示文件在哪个目录?( D) A.系统根目路径 B.编译器路径 C.桌面 D.与当前文件目录一致. 2.C源程序中不能 ...

  9. c语言程序设计实验三程序,c语言程序设计实验三循环.doc

    c语言程序设计实验三循环 高级语言程序设计 实验三 循环控制 一.实验目的和要求 1. 熟练掌握用while语句.do while语句和for语句实现循环的方法.掌握在程序设计中用循的方法实现一些常用 ...

  10. c语言50个小程序,C语言50小程序.doc

    C语言50小程序 一 基础部分: 输入1~10之间的一个数字,输出它对应的英文单词. /* Note:Your choice is C IDE */ #include "stdio.h&qu ...

最新文章

  1. appium 控件定位
  2. Android弹窗组件工作机制之Dialog、DialogFragment(二)
  3. Stream流中的常用方法_skip
  4. Hadoop入门(十一)Mapreduce的InputFomrat各种子类
  5. 轻松弄懂var、let、const之间的区别(一看就懂)
  6. P2240 【深基12.例1】部分背包问题
  7. Mr.J--俄罗斯方块实现(框架)
  8. java View转换类型_java强制类型转换.
  9. 以mysql为例有几种隔离级别_mysql隔离级别有几种
  10. Hbuilder如何创建并运行Vue项目
  11. windows .ssh文件位置 hosts位置
  12. html追加消除,HTML/CSS:在中间清除浮动元素而不添加不需要的标签
  13. 迅雷的FLV文件迷你播放器
  14. 2019顺网无盘服务器配置,顺网无盘如何不安装网维客户端上传系统到无盘服务器...
  15. HTML中abbr标记,html中abbr和acronym标签的区别
  16. 友盟分享error:包名错误,确认与开放平台包名一致
  17. 人体存在感应雷达应用,智能马桶自动响应,低功耗雷达感应模块
  18. 离职,见人品,显格局
  19. CPLD个人学习笔记
  20. Java/Sacla 获取间隔内的全部日期

热门文章

  1. dell2900服务器做系统,dell2900如何重装系统
  2. 程序员的一百万种变现方式 03,努力多赚零花钱
  3. 等差乘等比数列求和公式
  4. vivo Z1的USB调试模式在哪里,打开vivo Z1USB调试模式的经验
  5. 高中数学基础-1.2.2函数的表示法(上):解析法、列表法、图形法
  6. Android解决“此用户无法使用开发者选项“异常
  7. python爬虫 | 同步刷新网页爬取实例 | 小白篇
  8. 持续降库纯碱增仓大涨,沪铝认购小涨,螺纹10-01季节性正套2022.5.19
  9. mysql bcnf_bcnf范式
  10. 宝马冷却系统及电动冷却液泵部件(电子水泵)功能特性及标准