2014-04-11 77 views
0

我必須編寫一個程序,檢查矩形矩陣(nxn)的主對角線中的元素(數字)是否相同(如果是,則返回1,如果不是則返回0)使用被調用的函數由main()。矩陣從文件中讀取,在main()中完成。如何檢查矩形矩陣主對角線上的元素是否相同?

這裏是我的功能至今:(功能checkdiag()似乎並不奏效,只有main()功能是打印出的數據)

#include <stdio.h> 
int checkdiag(int matrix[][100], int size) 
{ 
    int i,j; 
    for (i=0; i<size; i++) 
    { 
     for (j=0; j<size; j++) 
     { 
      if (matrix[i][100]==matrix[j][100]) 
      { 
       return (1); 
       printf ("\nThe elements in the main diagonal of the matrix are the same.\n"); 
      } 
      else 
      { 
       return (0); 
       printf ("\nThe elements in the main diagonal are not the same.\n"); 
      } 
     } 
    } 
} 
int main (void) 
{ 
    int matrix[100][100]; 
    int size, diag; 
    int i,j; 
    FILE *data; 
    data= fopen("data10.txt", "r");` 

    fscanf (data, "%d", &size); 
    printf ("The size of the matrix is %dx%d, and the matrix is:\n", size, size); 
    for (i=0; i<size; i++) 
    { 
     for (j=0; j<size; j++) 
     { 
      fscanf (data, "%d", &matrix[i][j]); 
      printf (" %d% ", matrix[i][j]); 
     } 
     printf ("\n"); 
    } 
    diag= checkdiag(matrix, size); 
} 

如果有人可以請幫我看看,我要去的地方錯了, 我會很感激!

P.S我使用的文件是:

3 
4 5 6 
7 8 9 
3 6 7 

當文件中的第一個值(3)爲矩陣的大小。 (即3x3)

+0

return(1)應該只發生在完成循環之後。所有條目必須匹配才能保持一致,但只有一個不匹配表明對角線不是全部的一個值。 – Jiminion

回答

0
#include <stdio.h> 

int main (void){ 

FILE *file = fopen("data.txt","r"); 
int size, i, j; 

fscanf(file, "%d" , &size); 
int matrix[size][size]; 

// Read the data into the matrix 
for(i=0; i<size; i++){ 
    for(j=0; j<size; j++){ 
     fscanf(file, " %d", &matrix[i][j]); 
    } 
} 

//determine if all diagonal entries in the matrix match the one at matrix[0][0] 
i=matrix[0][0]; 
j=0; 
while(j < size){ 
    if(matrix[j][j] != i) 
     break; 
    else{ 
     j++; 
    } 
} 

//if j is equal to the size of the matrix then voila! diagonal entries match. 
if(j==size){ 
    printf("The diagonal is the same\n"); 
    return 1; 
}else{ 
    printf("The diagonal is not the same\n"); 
    return 0; 
} 
} 

這將返回:對角線是不一樣的。對於輸入:

5 
1 2 3 4 5 
2 1 4 5 6 
2 3 1 5 6 
2 3 4 1 6 
2 3 4 4 2 

這將返回:對角線是相同的。對於輸入:

5 
1 2 3 4 5 
2 1 4 5 6 
2 3 1 5 6 
2 3 4 1 6 
2 3 4 4 1 
+0

注意:這需要一個可變大小的矩陣。您不必像您所做的那樣將尺寸設置爲100。 – benileo

0

您的printf語句位於您的返回語句之後,因此它們將永遠不會執行。更高的編譯器警告級別應該警告您無法訪問的代碼。此外,您使用的值爲100,您的意思是使用變量j

但是,你會發現你的算法在任何情況下都是不正確的。它在第一次比較後停止比較。你需要檢查所有的對角元素。

0

請試試這個checkdiag()int checkdiag(int matrix[size][size], int size)

  • 元素:

    int checkdiag(int matrix[][100], int size) 
    { 
        int i; 
        for (i=1; i<size; i++) 
        { 
         if (matrix[i][i] != matrix[0][0]) 
         { 
          printf ("\nThe elements in the main diagonal are not the same.\n"); 
          return 0; 
         } 
        } 
        printf ("\nThe elements in the main diagonal of the matrix are the same.\n"); 
        return 1; 
    } 
    
  • 0
    • 由於此功能就永遠只能處理方陣,和你通過大小,也許你應該適當的原型使用在主對角線上有相同的列索引和行索引,因此您只需要一個循環。
    • 您可以返回您發現主對角線上的第一個元素與[0] [0]上的元素不同的時刻,但如果第一個比較爲真,則無法成功結束。您必須比較所有元素。
    • 執行return語句後沒有語句執行,除非存在避免return的控制語句。
    • " %d% "printf的錯誤格式字符串。你一定要逃逸格式字符串字面%與第二%個字符數,像這樣:%%
    0

    代替cout<<;語句返回1或0相應。

    #include <iostream> 
        using namespace std; 
    
        int main(int arc, char *argv[]) { 
         int array[100][100]; 
         int size; 
         cout << "Enter size\n"; 
         cin >> size; 
         cout << "Enter matrix\n"; 
         for (int i = 0; i < size; i++) { 
          for (int j = 0; j < size; j++) { 
           cin >> array[i][j]; 
          } 
         } 
    
         for (int i = 1; i < size; i++) { 
          if (array[i][i] != array[i-1][i-1]) { 
           cout << "Not Same "; 
           break;  
          } else if (i == (size - 1)) { 
           cout << "Same"; 
          } else { 
           continue; 
          } 
         } 
    
    
    
        } 
    
    +0

    像這樣的被破壞的代碼是醜陋的,難以閱讀的,並且在大多數編碼標準/格式化規則集成到門中的代碼商店中被壓垮了。僅僅因爲你*可以快速/輕鬆地格式化代碼並避免所有的語法考慮並不意味着你應該這樣做。谷歌的「編碼標準」和「代碼格式」,並試圖爲您的代碼培養更好的規範,以提高其可維護性,不僅僅針對您而且針對其他人。如果每個人都應用自己特有的想法,那麼它就是一個動物園。最好有一些可行的一致標準。 – clearlight

    +0

    我編輯了答案並添加了空格,正如你所看到的,它看起來好多了,而且更容易看到每個參數, – clearlight