-2

行列にシーケンシャル メモリを使用する方法を学んでいます。次のプログラムを作成しましたが、間違った結果が得られます。誰かが私が間違っている場所を教えてもらえますか? シーケンシャル メモリを使用しているプログラムと、使用していない正しいプログラムの両方を貼り付けています。シーケンシャル メモリで間違った結果が得られます。

#include <stdio.h>
#include <stdlib.h>
 int main() 
 {
    int i, m, n, p, q, c, d, k, sum = 0;
    int *first, *second, *multiply;
    printf("Enter the number of rows and columns of first matrix\n");
    scanf("%d%d", &m, &n);
    printf("Value entered %d%d \n",m,n);
    first = malloc(m*n*sizeof(int*));
    printf("Enter the number of rows and columns of second matrix \n");
    scanf("%d%d", &p,&q); 
    printf("value entered %d%d \n",p,q); 
    second = malloc(p*q*sizeof(int));
    multiply = malloc(m*n*sizeof(int));
    printf("Enter the elements of first matrix\n");
    for( c = 0 ; c < m ; c++ )
       for ( d = 0 ; d < n ; d++ )
         scanf("%d", &first[c*m+d]);
      if ( n != p )
     printf("Matrices with entered orders can't be multiplied with each other.\n");
     else {
      printf("Enter the elements of second matrix\n");
     for ( c = 0 ; c < p ; c++ ){
        for ( d = 0 ; d < q ; d++ )
        scanf("%d", &second[c*p+d]);
   }

 for ( c = 0 ; c < m ; c++ ) {
  for ( d = 0 ; d < q ; d++ ) {
    for ( k = 0 ; k < p ; k++ ) {
      sum = sum + first[c*m+k]*second[k*p+d];
    }
    multiply[c*m+d] = sum;
    sum = 0;
    }

  }

     printf("Product of entered matrices:-\n");
     for ( c = 0 ; c < m ; c++ ) {
       for ( d = 0 ; d < q ; d++ )
    printf("%d\t", multiply[c*m+d]);
  printf("\n");
   }

    free(second);

   free(multiply);
} 

  free(first);
   return 0;
}
4

2 に答える 2

3
sum = sum + first[c*m+k]*second[k*p+d];

でなければなりません

sum = sum + first[c*n+k]*second[k*q+d];

の行の長さはであり、の行のfirstnさはであるためsecondですq

于 2013-03-20T00:17:29.953 に答える
0
for( c = 0 ; c < m ; c++ )
   for ( d = 0 ; d < n ; d++ )
     scanf("%d", &first[c*m+d]); // error
                          ^ n    // fix

何度も同じエラー

于 2013-03-20T00:18:12.693 に答える