2013-07-09 215 views
1
时获得的地址作为输出

您好我有一个关于相乘两个矩阵相乘两个矩阵

这个问题是我写的

#include <stdio.h> 

void getData(int matrix1[20][20], int matrix2[20][20], int row1, int row2, int col1, int col2); 
void matrixMult(int matrix1[20][20], int matrix2[20][20], int matrix3[20][20], int row1, int row2, int col1, int col2); 

int main(void) 
{ 
    // global declarations 
    int matrix1[20][20]; 
    int matrix2[20][20]; 
    int matrix3[20][20]; 
    int row1; 
    int row2; 
    int col1; 
    int col2; 


     printf("Enter first matrix dimension: "); 
     scanf("%d %d", &row1, &col1); 
     printf("%d x %d\n", row1, col1); 
     printf("Enter first matrix dimension: "); 
     scanf("%d %d", &row2, &col2);  
     printf("%d x %d\n", row2, col2); 
     printf("\n"); 

     if(col1 == row2) 
     { 
      getData(matrix1, matrix2, row1, row2, col1, col2); 
      matrixMult(matrix1, matrix2, matrix3, row1, row2, col1, col2); 
     } 




    return 0; 
} 

void getData(int matrix1[20][20], int matrix2[20][20], int row1, int row2, int col1, int col2) 
{ 
    // local declarations 
    int i = 0; 
    int j = 0; 

    printf("Enter number by row and column: "); 
    printf("\n"); 
    // input first matrix 
    for(i = 0; i < row1; i++) 
     for(j = 0; j < col1; j++) 
     { 

      scanf("%d", &matrix1[i][j]); 
     } 
    // reset i and j 
    i = 0; 
    j = 0; 

    printf("Enter number by row and column: "); 
    printf("\n"); 
    // intput second matrix 
    for(i = 0; i < row2; i++) 
     for(j = 0; j < col2; j++) 
     { 
      scanf("%d", &matrix1[i][j]); 
     } 


    return; 
} 


void matrixMult(int matrix1[20][20], int matrix2[20][20], int matrix3[20][20], int row1, int row2, int col1, int col2) 
{ 
    int i = 0; 
    int j = 0; 
    int k = 0; 
    int sum = 0; 
    for(i = 0; i < row1; i++) 
    { 
     for(j = 0; j < col2; j++) 
     { 
      for (k= 0; k < row2; k++) 
      { 
       sum += matrix1[i][k] * matrix2[k][j]; 
      } 

      matrix3[i][j] = sum; 
      sum = 0; // set sum to 0 
     } 
    } 
    //reset i and j 
    i = 0; 
    j = 0; 
    printf("product of matrix 1 and 2: "); 
    printf("\n"); 
    for(i = 0; i < row1; i++) 
    { 
     for(j = 0; j < col2; j++) 
     { 
      printf("%d\t", matrix3[i][j]); 
     } 
     printf("\n"); 
    } 

    return; 
} 

乘法,而不是它的打印输出后不打印值的代码出那些逝去矩阵1,矩阵和matrix3时有什么不好的代码,我是不是做错事的matrixMult函数值

Enter first matrix dimension: 2 2 
2 x 2 
Enter first matrix dimension: 2 3 
2 x 3 

Enter number by row and column: 
1 2 
2 3 
Enter number by row and column: 
1 2 3 
1 2 4 
product of matrix 1 and 2: 
40829548  41222770  41615992 

40829548  41222770  41615992 

的地址?

提前致谢。


我重新写了只有主要的代码,但这次的产品矩阵的最后一列还打印出垃圾

#include <stdio.h> 



int main(void) 
{ 
    // global declarations 
    int matrix1[20][20]; 
    int matrix2[20][20]; 
    int matrix3[20][20]; 
    int row1; 
    int row2; 
    int col1; 
    int col2; 
    int i = 0; 
    int j = 0; 
    int k = 0; 
    int sum = 0; 

     printf("Enter first matrix dimension: "); 
     scanf("%d %d", &row1, &col1); 
     printf("%d x %d\n", row1, col1); 
     printf("Enter first matrix dimension: "); 
     scanf("%d %d", &row2, &col2);  
     printf("%d x %d\n", row2, col2); 
     printf("\n"); 

     if(col1 != row2) 
     { 
      printf("Matrices cannot be multiply!"); 
     } 

     else 
     { 
      printf("Enter first matrix: "); 
      printf("\n"); 
      for(i = 0; i < row1; i++) 
       for(j = 0; j < col1; j++) 
        scanf("%d", &matrix1[i][j]); 

      printf("Enter second matrix: "); 
      printf("\n"); 
      for(i = 0; i < row1; i++) 
       for(j = 0; j < col1; j++) 
        scanf("%d", &matrix2[i][j]); 

      for(i = 0; i < row1; i++) 
      { 
       for(j = 0; j < col2; j++) 
       { 
        for (k= 0; k < row2; k++) 
        { 
         sum += matrix1[i][k] * matrix2[k][j]; 
        } 

        matrix3[i][j] = sum; 
        sum = 0; // set sum to 0 
       } 
      } 

      printf("product of matrix 1 and 2: "); 
      printf("\n"); 
      for(i = 0; i < row1; i++) 
      { 
       for(j = 0; j < col2; j++) 
       { 
        printf("%d\t", matrix3[i][j]); 
       } 
       printf("\n"); 
      } 


     } 


    return 0; 
} 

这是我的输出

Enter first matrix dimension: 2 2 
2 x 2 
Enter first matrix dimension: 2 3 
2 x 3 

Enter first matrix: 
1 2 
3 4 
Enter second matrix: 
2 1 4 
2 5 6 
product of matrix 1 and 2: 
10  5  1717986916 
22  11  -1717986924 

为什么最后一栏是否打印出垃圾?

+0

我通常把括号中这样的说法&(matrix1 [i] [j]),比其他更清晰,因为运算符的优先顺序会正确地处理它... http://www.difranco.net/compsci/C_Operator_Precedence_Table.htm – Antonio

+0

你的代码工作正常后,我做了更改。 – 0decimal0

回答

0

在你的代码的问题就出在这里:

printf("Enter number by row and column: "); 
    printf("\n"); 
    // intput second matrix 
    for(i = 0; i < row2; i++) 
     for(j = 0; j < col2; j++) 
     { 
      scanf("%d", &matrix1[i][j]);// you were entering the values in matrix1 and leaving the matri2 blank so make it matrix2 instead. 
     } 

更改此:

scanf("%d", &matrix1[i][j]);

这样:

scanf("%d", &matrix2[i][j]);

+1

数组不会被复制:您正在传递一个副本,但地址是这样的,因此您需要在原始矩阵中写入数据。 – Antonio

0

我不认为你所看到的是地址:你的printf语句似乎是正确的。你必须检查你填充矩阵的函数,错误可能在那里。如果您在程序开始时重置目标矩阵,它可以提供帮助。

我也建议您在阅读后输入您的输入矩阵。