2014-01-29 46 views
0

我試圖在C中的項目,我很困惑我得到的結果。我已經做了很多關於如何處理數組的研究,我覺得它應該可以工作。下面是我的代碼:爲什麼我的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]); 
       } 


     } 
    } 

矩陣是宣佈的任何功能外,像這樣一個雙陣列:

double matrix[1000][1000]; 

當我運行程序時,我得到一個單獨的值「值」的打印輸出和矩陣[i] [j]的打印輸出的不同值,我不明白他們爲什麼不同。

預先感謝您!

回答

2

您不應該在printf中將星號放在矩陣的前面,因爲它會將數據解釋爲地址並將其「解除引用」。 另外,如果你想打印一個double,你需要使用%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]); 
    } 
} 
+0

完美!謝謝。 – user2019260

0

您正在取消引用矩陣[i] [j]的結果,這是錯誤的,因爲默認情況下數組表示法將索引解除引用。在矩陣訪問之前刪除*。還要將格式說明符更改爲%lf。

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

你爲什麼要尊重矩陣?

將其更改爲

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

如果你仍然想打印一個字符串嘗試

的char * S =你不能指定字符串文字像在C「的矩陣值店:」

然後

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