2013-06-27 35 views
-4

所以我想創建一個矩陣的一般形式,當2N = 6樣子(6×6)陣列間斷

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列中的象限
和列中的從0到N-1的-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,但是當嘗試增加N的值時,我遇到了一些非常奇怪的結果,並且無法弄清楚爲什麼,任何人都可以幫忙? (例如N = 4,a [2] [0]會變成一個巨大的數字),因爲它沒有編譯和運行的「調試錯誤」。不要讓人們去調試,但是想知道我缺少的是數組的一般屬性嗎?

感謝

+0

你遇到什麼奇怪的結果?您是否嘗試過使用調試器來遍歷代碼? –

+3

要求人們發現代碼中的錯誤並不是特別有效。您應該使用調試器(或者添加打印語句)來分析問題,追蹤程序的進度,並將其與預期發生的情況進行比較。只要兩者發生分歧,那麼你就發現了你的問題。 (然後,如果有必要,你應該構建一個[最小測試用例](http://sscce.org)。) –

+2

*沒有「調試錯誤」,因爲它編譯和運行* - 我不認爲你理解「調試」一詞的含義。 –

回答

1

初始化您的數組有全部爲零入手:

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

否則你永遠不會寫的值有不確定的數值的元素。

+0

太棒了,非常感謝你! – Tom