为什么我的C矩阵没有按照我期望的方式运行?

时间:2014-01-29 04:47:11

标签: c gcc matrix

我正在用C语言尝试一个项目,我对我得到的结果感到很困惑。我已经对如何处理数组进行了相当多的研究,我觉得它应该可行。以下是我的代码:

for( i = 0; i<1000;i++)
    {
        for( j = 0; j<1000; j++)
            {   
                if(j==0)
                    matrix[i][j] =i;
                else{
                    double value = (i-j)/j;
                    printf("%s%d\n","value of i-j: ",value);
                    matrix[i][j] = value;
                    printf("%s%d\n","value stores in matrix: ",*matrix[i][j]);
                }


        }
    }

matrix是在任何函数之外声明的双数组:

double matrix[1000][1000];

当我运行程序时,我得到一个单独的值'打印输出'value'和一个不同的值打印输出矩阵[i] [j],我不明白它们为什么不同。

提前谢谢!

3 个答案:

答案 0 :(得分:2)

你不应该将星号放在printf中的矩阵前面,因为它会将数据解释为地址和&#34; dereferences&#34;它。 此外,如果要打印双精度数,则需要使用%f而不是%d。 如果你想将(i-j)/j计算为double(而不是整数除法),你需要在除法运算符的一个操作数上使用强制转换。

for( i = 0; i < 1000;i++)
{
    matrix[i][0] = i;
    for( j = 1; j < 1000; j++)
    {   
        double value = (i-j)/(double)j;
        printf("value of i-j: %f\n", value);
        matrix[i][j] = value;
        printf("value stored in matrix: %f\n", matrix[i][j]);
    }
}

答案 1 :(得分:0)

您正在取消引用matrix [i] [j]的结果,这是错误的,因为默认情况下数组表示法会取消引用索引。在矩阵访问之前删除*。同时将格式说明符更改为%lf。

答案 2 :(得分:0)

printf("%s%d\n","value stores in matrix: ",*matrix[i][j]);

你为什么要尊重矩阵?

将其更改为

printf("value stored in matrix: %lf ", matrix[i][j]);

你不能像C中那样指定字符串文字。如果你还想打印字符串试试

char * s =“矩阵中的值存储:”

然后

printf("%s%lf\n",s,matrix[i][j]);