代码之家  ›  专栏  ›  技术社区  ›  Itqan Ullah

尝试添加数组元素得到零[闭合]

  •  0
  • Itqan Ullah  · 技术社区  · 8 年前

    因此,我一直在尝试使用过时的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;
    }
    

    想法?

    1 回复  |  直到 8 年前
        1
  •  4
  •   Mikhail    8 年前
    double f(double x, double y)
    {
        float r;
        r = 2 * x*y / sqrt(x*x + y*y);
        return r;
    }
    

    当 x=0 和 y=0 所以 ax[0] 等于 nan .当你把这些数字加起来,你会得到 南安 作为输出。您需要使用L'Hopital规则来评估该限制,并以不同的方式处理第一个元素。

    推荐文章