2014-04-11 80 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