2013-09-10 170 views
1

我有這個二維數組,我正在檢查[5] [5]的值。值應該是1/11或0.0909作爲雙倍。問題是我得到0作爲返回值。二維數組返回0

我正在檢查以確保我已經正確實施了二維數組。這是主要的。

//start clock 
clock_t time = clock(); 

int n; 

printf("Please enter a value for n: "); 

//get n 
cin >> n; 

printf("\nn = %i \n", n); 

//allocate space for matrix A 
double **A_n = new double*[n]; 
for (int k = 0; k < n; ++k) { 
    A_n[k] = new double[n]; 
} 

for (int i = 1; i <= n; ++i) { 
    for (int j = 1; j <= n; ++j) { 
     A_n[i-1][j-1] = (double)(1/(i+j-1)); 
    } 
} 

//Test Matrix A_n 
printf("A_n[5][5] = %e \n", A_n[5][5]); 

回答

4

您的類型轉換錯誤。你的表情

(double)(1/(i+j-1)) 

由於整數除法幾乎總是0i == j == 1時,您將獲得1。你可能想:

1.0/(i+j-1) 
1

這裏是你的問題:

(double)(1/(i+j-1)) 

你把int型,這將產生一個int一個int之後,你投它翻一番。在投射時它已經是0. 表達式的一個方面必須是雙重的。你可以做到這一點

1/(double)(i + j + 1) 

1.0/(i + j + 1) 
+1

'1.0f'是'float',而不是一個'double'。 –

+0

Ups我的壞:)晚了一點,大腦不再運作:) – LemonMooseTom