| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2373 人关注过本帖
标题:[讨论]用函数指针和矩形法求定积分的通用程序,运行出错。敬请各位指点!
只看楼主 加入收藏
whut先行者
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2005-6-25
收藏
 问题点数:0 回复次数:5 
[讨论]用函数指针和矩形法求定积分的通用程序,运行出错。敬请各位指点!

一个用矩形法求定积分的通用程序。编译,连接均无问题,但运行结果为:floating point divided by 0.

程序如下: #include<math.h> #define E 1e-8 main() { double integral(float low,float up,double (*fun)()); double i_value; printf("\nThe integral of sin(x) from 0 to 1 is:\n"); i_value=integral(0,1,sin); printf("%.8f\n",i_value); printf("The integral of cos(x) from -1 to 1 is:\n"); i_value=integral(-1,1,cos); printf("%.8f\n",i_value); printf("The integral of exp(x) from 0 to 2 is:\n"); printf("%.8f\n",i_value); }

double integral(float low,float up,double (*fun)()) { double h,sum=0,intg1,intg2=0; int i,n=10; h=(up-low)/n; for(i=0;i<n;i++) sum+=(*fun)(low+i*h); intg1=sum*h; for(;fabs(intg2-intg1)>E;) { n*=2; h=(up-low)/n; for(sum=0,i=0;i<n;i++) sum+=(*fun)(low+i*h); intg2=sum*h; } return intg2; }

搜索更多相关主题的帖子: 矩形法 指针 函数 integral 
2005-10-03 22:12
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:0 
i_value=integral(0,1,sin);
i_value=integral(-1,1,cos);

九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2005-10-03 23:30
whut先行者
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2005-6-25
收藏
得分:0 

不好意思,刚才的程序中有明显的低级错误,如:主函数中漏掉了语句{i_value=integral(0,2,exp);},函数integral的形参表中(*fun)后的括号中漏掉了double x(这是一棵芦苇兄找出的错误)。但做了改正后的程序仍然出现同样的运行结果:

The integral of sin(x) from 0 to 1 is:

Floating point error:Davide by 0

改正后的程序如下:

#include<math.h> #define E 1e-8 main() { double integral(float low,float up,double (*fun)(double x)); double i_value;

printf("\nThe integral of sin(x) from 0 to 1 is:\n"); i_value=integral(0,1,sin); printf("%.8f\n",i_value);

printf("The integral of cos(x) from -1 to 1 is:\n"); i_value=integral(-1,1,cos); printf("%.8f\n",i_value);

printf("The integral of exp(x) from 0 to 2 is:\n"); i_value=integral(0,2,exp); printf("%.8f\n",i_value); }

double integral(float low,float up,double (*fun)(double x)) { double h,sum=0,intg1,intg2=0; int i,n=10; /*先求一个初始值*/

h=(up-low)/n; /*h为步长*/ for(i=0;i<n;i++) sum+=(*fun)(low+i*h); intg1=sum*h; /*若相邻两次的积分值绝对值之差不超过所设精度E,就结束循环*/

for(;fabs(intg2-intg1)>E;) { n*=2; h=(up-low)/n; for(sum=0,i=0;i<n;i++) sum+=(*fun)(low+i*h); intg2=sum*h; } return intg2; }

2005-10-04 09:28
whut先行者
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2005-6-25
收藏
得分:0 
难道没有人看出来错在哪里吗?
2005-10-06 01:34
他们
Rank: 1
等 级:新手上路
帖 子:70
专家分:0
注 册:2005-3-22
收藏
得分:0 
可能在那个函数里数据类型出了问题

2005-10-06 10:43
whut先行者
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2005-6-25
收藏
得分:0 
已经知道这个程序有两个严重错误,分别由风 影子兄和撒播阳光兄指出。非常感谢他们的指点!想要知道这两个错误或是发现其它错误的哥们,敬请跟帖!
2005-10-07 15:29
快速回复:[讨论]用函数指针和矩形法求定积分的通用程序,运行出错。敬请各位指点 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.058639 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved