双打的2D数组返回0

时间:2013-09-10 22:34:57

标签: c++ arrays multidimensional-array

我有这个2D数组,我正在检查[5] [5]的值。该值应为1/11或0.0909作为double。问题是我得到0作为返回值。

我正在检查以确保我已正确实施2D阵列。这是主要的。

    //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]);

2 个答案:

答案 0 :(得分:4)

您的类型转换位置错误。你的表达

(double)(1/(i+j-1))
由于整数除法,

几乎总是01时,您会收到i == j == 1。你可能想要:

1.0/(i+j-1)

答案 1 :(得分:1)

这是你的问题:

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

将int分隔为int,这将生成一个int,然后将其转换为double。在施法时它已经是0。 表达的一面必须是双重的。你可以那样做

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

    1.0 / ( i + j + 1 )