-4

所以我试图创建一个矩阵的一般形式,当 2N=6 看起来像 (6x6)

1 0 0 -1/1!    0    0  
0 1 0 -1/1! -1/1!   0  
0 0 1 -1/2! -1/1! -1/1!  
0 0 0 -1/3! -1/2! -1/1!  
0 0 0 -1/4! -1/3! -1/2!  
0 0 0 -1/5! -1/4! -1/3! 

也就是说,N=3 给出了一个 6x6 矩阵,
其中 TL 象限中的恒等式在
BL 象限中为空,
并且 -1/ 阶乘在列中从 0 到 N-1,向下移动 1。

我正在尝试尽可能普遍地做到这一点。到目前为止,我有:

    #include <stdio.h>
    #include <math.h>

    int main()
    {
     int A, B, C, R, M;
     int i, j, N;
     double n,r,c,rf,x;

     N=3;
     n=N;
     M=(N+N-1);

     double a[(2*N)][(2*N)];

     for(A=0; A<N; A++)
     {a[A][A]=1.0;
     }

    for(C=N; C<=M;C++)
      {
      for(R=(C-N);R<=(M);R++)
        {
        r=R-(C-N);
        rf=1;
        for(x=1; x<=r; x++)
            {
                   rf=rf*x;
            }
                a[R][C]=((-1)/rf);
        }
      }





    for (i = 0; i < 2*N; i++)
      {
        for (j = 0; j < 2*N; j++)
        {
          printf(" %f ", a[i][j]);
          if (j % 3 == 2) printf("  ");
        }
        printf("\n");

      }

       /*
      for(i=0;i<=M;i++)
    {
    for(j=0;j<=M;j++)
      {
      printf("[%d][%d] = %f \n", i, j,a[i][j]);
      }
    }
    */
    return 0;
    }  

我已包含(但已注释掉)打印出的单个元素。这适用于 N=3 但是当尝试增加 NI 的值时会遇到一些非常奇怪的结果并且无法弄清楚为什么,有人可以帮忙吗?(例如 N=4,a[2][0] 达到一个巨大的数字)没有“调试错误”,因为它编译和运行。并不是要求人们进行调试,而是想知道我是否缺少数组的一般属性?

谢谢

4

1 回答 1

1

初始化您的数组以全零开头:

double a[(2*N)][(2*N)] = {0.0};

否则,您永远不会写入值的元素具有不确定的值。

于 2013-06-27T00:36:23.263 回答