【问题标题】:Trying to add array elements gives zero [closed]尝试添加数组元素给出零 [关闭]
【发布时间】:2018-10-16 15:57:56
【问题描述】:

所以我一直在尝试使用过时的 turbo c++ 编译器(是的,我们仍然使用它!)使用辛普森一家 1/3 规则计算双积分的小程序(是的,我们仍然使用它!)但遗憾的是,我似乎受到了打击扼杀故障。每当我尝试在以下程序中添加数组 ax[i] 的元素时,它给了我一个零。这些元素似乎完美地显示在它们自身之中,但由于某种奇怪的原因,添加它们会导致零。这是一段代码。

#include<iostream.h>
#include<conio.h>
#include<math.h>

double f(double, double);

void main()
{
    clrscr();
    double a, b, c, d, h, k, ans, z[10][10], ax[10];
    int i, j, nx, ny;
    clrscr();
    a=0.0; b=1.0; c=0.0; d=1.8; h=0.25; k=0.30;
    nx = (b-a)/h;
    ny = (d-c)/k;

    for(i=0; i<10; i++)
    {
        for(j=0; j<10;j++)
            z[i][j] = 0;
        ax[i] = 0;
    }

    //Generating the table
    for(i=0; i<=nx; i++)
    {
        for(j=0; j<=ny; j++)
        {
            z[i][j] = f(a+i*h, c+j*k);
        }
    }

    for(i=0; i<=nx; i++)
    {
        ax[i] = 0.0;

        for(j=0; j<=ny; j++)
        {
            if(j==0 || j==ny)
                ax[i] += z[i][j];
            else if(j%2==1)
                ax[i] += 4*z[i][j];
            else
                ax[i] += 2*z[i][j];
        }
        ax[i] *= k/3.0;
        cout<<ax[i]<<endl;
    }

    ans=  1.0;
    //for(int q=0; q<=nx; q++)
        ans= (ax[0])+(ax[1])+(ax[2]);


    cout<<"Value of integral is: "<<ans;
    getch();
}

double f(double x, double y)
{
    float r;
    r = 2*x*y/sqrt(x*x+y*y);
    return r;
}

想法?

【问题讨论】:

  • 在添加之前是否调试或打印了 a[]?这就是“元素似乎完美呈现”背后的原因吗?
  • 是时候学习如何使用 TurboC++ 调试器(IIRC 还不错),以及如何使用它逐行执行代码并查看所有相关变量的值。跨度>
  • 你能告诉我们你得到了什么输出吗?

标签: c++ numerical-integration turbo-c++


【解决方案1】:
double f(double x, double y)
{
    float r;
    r = 2 * x*y / sqrt(x*x + y*y);
    return r;
}

x=0y=0 时除以零,所以ax[0] 等于nan。当您将数字相加时,您将得到nan 作为输出。您需要使用 L'Hopital 的规则来评估该限制,并以不同方式处理第一个元素。

【讨论】:

  • 我想知道为什么 OP 说他们得到了0...
  • 阿汉!完美的捕捉。谢谢。完全错过了我的眼睛。
  • Turbo C++ 知道NaN?
猜你喜欢
  • 2020-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-17
相关资源
最近更新 更多