24小时热门版块排行榜    

查看: 1696  |  回复: 14

muqiuyan

木虫 (小有名气)

[交流] 【求助】16位 MS-DOS 子系统 已有7人参与

求助 我在用C语言运行一个积分程序时,出现  16位 MS-DOS 子系统  提示
程序如下:#include "math.h"
#include "stdio.h"
double simps1(a,b,f)
double a,b,(*f)();
{
  int n=100,k;
  double t,t2,s,s2,h,x;
  h = (b-a)/n;                       /* 求得初始步长*/
  t = ((*f)(a)+(*f)(b))/2.0;         /* 计算初始的积分值*/
  for(k=1; k   {
    x = a+k*h;
    t = t+(*f)(x);                   /* 累次求和*/
  }
  t = t*h;                           /* 尽量减少乘法次数*/
  s = t;
  do
  {
    t2 = 0.0;
    for(k=0; k     {
      x = a+(k+0.5)*h;               /* 累加计算*/
      t2 = t2+(*f)(x);
    }
    t2 = (t+h*t2)/2.0;
    s2 = (4.0*t2-t)/3.0;             /* 计算新的积分值*/
    t = t2;
    s = s2;                          /* 更新积分值*/
    h = h/2.0;                       /* 更新步长*/
    n = 2*n;                         /* 更新划分数*/
  }while((fabs(s2-s)>1e-8));
  return(s);
}

double cal_c(double zz,double D,double r)
{
  double seigerma=3.2536e-10,rad=0.300e-10,k=1.380658e-23,ipuseilong=152.68*k,T=273.15;
  double c,derlta_4,derlta_5,derlta_10,derlta_11,oumiga_0,oumiga_1,oumiga;
  double f(double);
     derlta_4=1/4*(pow((1-r/D-rad/D),-4)-pow((1+r/D-rad/D),-4));
        derlta_5=1/5*(pow((1-r/D-rad/D),-5)-pow((1+r/D-rad/D),-5));
        derlta_10=1/10*(pow((1-r/D-rad/D),-10)-pow((1+r/D-rad/D),-10));
        derlta_11=1/11*(pow((1-r/D-rad/D),-11)-pow((1+r/D-rad/D),-11));
       
        oumiga_0=pow(seigerma,10)*(derlta_10+rad/D*derlta_11)/pow(D,11)/r;
        oumiga_1=pow(seigerma,6)*(derlta_4+rad/D*derlta_5)/pow(D,5)/r;
       
        oumiga=2*zz*ipuseilong*(oumiga_0-oumiga_1);
       
        c=simps1(0,D,f);        /* 用变步长辛卜生求积法积分*/
        c=4*3.1415/k/T*c;
     printf("simp: c=%2.5f\n",c);
        return(c);
}


main()
{ int i;
  double zz[2]={20,24},D[2]={3.95e-10,4.33e-10};
  double c[2],r;
for(i=0;i=1;i++)
{
  c=cal_c(zz,D,r);
  printf("c[%d]=%.4f\n",i,c);
}

}


#include "math.h"
double f(r)
double r; /* 被积分的函数*/

{ double oumiga,k,T;  
  double y;
    y=exp(-oumiga/k/T)*r*r;
  return(y);
}


请问是什么问题,怎么解决。我在运行其他程序计算积分时没有这种问题
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

jjdg

版主 (知名作家)

优秀版主


muqiuyan(金币+1):谢谢参与
你把提示贴出来吧!
努力学习!以正当途径!获得需要的知识!
2楼2010-05-13 13:35:38
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

muqiuyan

木虫 (小有名气)

运行时, 提示如下

16位MS-DOS子系统
C:\WINDOWS\system32\cmd.exe
NTVDM CPU遇到无效指令。
CS:6857 IP:5ce4 OP:64 65 63 73 3b 选择“关闭”终止应用程序

[ Last edited by muqiuyan on 2010-5-13 at 14:49 ]
3楼2010-05-13 14:48:15
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

holmescn

金虫 (正式写手)

★ ★
muqiuyan(金币+1):谢谢参与
余泽成(金币+1):谢谢参与应助! 2010-05-14 09:39:03
估计是因为那个函数指针的问题,导致调用了一个未知的地址。
4楼2010-05-13 23:48:13
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

muqiuyan

木虫 (小有名气)

引用回帖:
Originally posted by holmescn at 2010-05-13 23:48:13:
估计是因为那个函数指针的问题,导致调用了一个未知的地址。

您是指simps1(a,b,f)的问题吗?我在其他地方调用这个 simps1(a,b,f)子程序时,没有问题。
这个该如何调整呢。
5楼2010-05-14 08:47:53
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

holmescn

金虫 (正式写手)

★ ★
余泽成(金币+2):辛苦了! 2010-05-14 13:31:46
muqiuyan(金币+1): 2010-05-15 09:55:53
CODE:
c=simps1(0,D,f);        /* 用变步长辛卜生求积法积分*/

问题出在这一行。这是一个相当隐蔽的C陷阱,正确的代码是:
CODE:
c=simps1(0.0, D, f);

本来应该类型自动转换的,不知道为什么没有转换,反而这个传递被pass了,结果导致simps1里面a=D,b=&f,f=0。所以调用失败。
PS:动用了多年不用的gdb才解决这个问题。汗啊。
PS2:我在Linux+gcc 4.5下测试成功。其他编译器不知道。
6楼2010-05-14 11:05:23
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

muqiuyan

木虫 (小有名气)

引用回帖:
Originally posted by holmescn at 2010-05-14 11:05:23:
CODE:
c=simps1(0,D,f);        /* 用变步长辛卜生求积法积分*/

问题出在这一行。这是一个相当隐蔽的C陷阱,正确的代码是:
CODE:
c=simps1(0.0, D, f);

本来应该类型自动转换的,不知道 ...

我的是Turbo C 2.01,运行时还是没有结果,显示Floating point error:Overflow再试下又显示 Floating point error:Domain。这是怎么回事啊
7楼2010-05-15 10:04:33
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

muqiuyan

木虫 (小有名气)

这个程序是利用Simpon方法计算定积分。

这个程序是利用Simpon方法计算定积分。
8楼2010-05-15 10:17:14
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wenbo985

金虫 (初入文坛)


muqiuyan(金币+1):谢谢参与
放弃TC,用别的。
一切皆有可能!
9楼2010-05-15 14:07:35
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

holmescn

金虫 (正式写手)


resonant(金币+1):谢谢回帖交流 2010-05-15 16:05:38
我向来BS TC(除了当年没有别的C可以用的年代),并反对用TC学习C语言,当然更加反对把TC用到项目中。

所以throw it away! Try VC or gcc or 其他编译器。
10楼2010-05-15 14:47:56
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 muqiuyan 的主题更新
普通表情 高级回复 (可上传附件)
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[基金申请] 国社科又开始会评了,不知道这次命运如何 +3 雨打竹帘 2026-08-30 3/150 2026-08-30 09:43 by KNIGHT2011
[基金申请] 麻烦专家们看看评委们的意见(F口面上) +6 gdd2018 2026-08-28 11/550 2026-08-30 08:58 by 超级无敌华子
[基金申请] 我就是申请一个面上项目而已,这评审意见是按照杰青的条件评的吧? +6 gouxfjh 2026-08-28 11/550 2026-08-30 07:57 by gouxfjh
[论文投稿] 售SCI文章,我:8O5.5.1.O.54,科目齐全,可+急 +3 G6APbkg8SA6w 2026-08-29 4/200 2026-08-30 07:39 by ZPa0EcMwuECS
[硕博家园] 售SCI一区T0P文章,我:8.O.55.1.O.54,科目齐全,可+急 +3 gy1nBQXYQJqL 2026-08-29 6/300 2026-08-30 06:22 by ZPa0EcMwuECS
[考研] 售SCI一区文章,我:8.O.55.1.O.54,科目齐全,可伽急 +7 ASdOkHsho7FD 2026-08-28 11/550 2026-08-30 05:40 by ZPa0EcMwuECS
[论文投稿] 售SCI一区T0P文章,我:8O.55.1.O.5.4,科目齐全,可+急 +5 gy1nBQXYQJqL 2026-08-29 6/300 2026-08-30 01:58 by ZPa0EcMwuECS
[公派出国] 售SCI一区T0P文章,我:8.O.55.1.O54,科目全,可伽急 +4 gy1nBQXYQJqL 2026-08-29 7/350 2026-08-30 01:36 by ZPa0EcMwuECS
[论文投稿] 售SCI一区文章,我:8.O.551.O.5.4,科目全,可伽急 +4 ASdOkHsho7FD 2026-08-28 5/250 2026-08-30 01:03 by ZPa0EcMwuECS
[基金申请] 国自然面上复盘~欢迎讨论 (金币+15) +15 晴天加油 2026-08-26 16/800 2026-08-29 18:28 by symmetry
[教师之家] 导师吐槽:我怎么摊上了这么个极品研究生! +9 苏东坡二世 2026-08-23 9/450 2026-08-29 14:41 by hustersqt
[基金申请] 国自然评审意见 +13 wangmingqi 2026-08-28 19/950 2026-08-29 10:22 by Poppy1104
[基金申请] 基金系统什么内容也没有 30+4 winsaint 2026-08-27 9/450 2026-08-28 11:06 by maolC
[基金申请] 怎么查啊 +6 huang1991js 2026-08-26 6/300 2026-08-28 08:42 by winsaint
[基金申请] 申请删除本帖 +6 lyz123lyz 2026-08-27 7/350 2026-08-27 17:31 by 宁静致远sy
[基金申请] 怎么看青基中了没有啊 +5 叶九微 2026-08-26 5/250 2026-08-27 10:35 by l_zh2008
[基金申请] 2026年的国家社科基金项目通讯评审的新规则与新动向、新挑战 +7 process2012 2026-08-23 10/500 2026-08-26 19:23 by hmhminy
[基金申请] 2026年8月25日国自然放榜前突然收到列入评审专家邮件,有关系吗? +25 木水思豆 2026-08-25 28/1400 2026-08-26 14:53 by draco1987
[基金申请] 国合里面能看到了 +7 一怀馨秋 2026-08-26 7/350 2026-08-26 11:23 by zhaosm1982
[基金申请] 国合可查了 +3 paperzjh 2026-08-26 3/150 2026-08-26 10:41 by LemmonTr
信息提示
请填处理意见