我正在用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],我不明白它们为什么不同。
提前谢谢!
答案 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]);