C中矩阵的乘法

时间:2012-08-31 09:30:55

标签: c

我必须输入三个正整数n,m和p。然后输入两个矩阵。第一个是n(行)乘m(列)矩阵。第二个是m(行)乘p(列)矩阵然后输出矩阵乘积(应该是n行x列)并使用堆存储器来存储矩阵。这是我到目前为止所拥有的,

long double adjProduct(int n, int m, int ** matrix)
{
int j, k, l;
long double product = 0.0;
long double temp = 0.0;

for(i = 0; i < n; i++)
{
    for(j = 0; j < n; j++)
    {

        if((i + (1*(m - 1))) < n)
        {
            temp = 1;
            for(k = 0; k < m; k++)
                temp *= matrix[i + k][j];

            if(temp > product)
                product = temp;
        }


        if(j + (1*(m-1)) < n)
        {
            temp = 1;

            for(k = 0; k < m; k++)
                temp *= matrix[i][j + k];

            if(temp > product)
                product = temp;
        }



        if((i + (1*(m-1)) < n) && (j + (1*(m-1)) < n))
        {
            temp = 1;

            for(k = 0; k < m; k++)
                temp *= matrix[i + k][j + k];

            if(temp > product)
                product = temp;
        }


        if((i + (1*(m-1)) < n) && (j - (1*(m-1)) >= 0))
        {
            temp = 1;

            for(k = 0; k < m; k++)
                temp *= matrix[i + k][j - k];

            if(temp > product)
                product = temp;
          }

     }
 }

return product;
}

 main(){

int ** matrix;
int n = 0; 
int m = 0;
int i, j;

scanf("%d %d", &n, &m);


matrix = (int **)malloc(sizeof(int *)*n);
if(matrix == NULL)
    exit(0);

for(i = 0; i < n; i++)
{
    matrix[i] = (int*)malloc(sizeof(int)*n);
    if(matrix[i] == NULL)
        exit(0);
}

for(i = 0; i < n; i++)
{
    for(j = 0; j < n; j++)
        scanf("%d", &matrix[i][j]);
}

printf("%.0Lf", adjProduct(n, m, matrix));

for(i = 0; i < n; i++)
    free(matrix[i]);

free(matrix);
matrix = NULL;
  }

感谢所有帮助!

1 个答案:

答案 0 :(得分:1)

你在哪里成倍增加?乘法应该是这样的:

        for(i=0;i<m;i++)
        {
            for(j=0;j<p;j++)
            {
                product[i][j]=0;
                for(k=0;k<m;k++)
                {   
                         product[i][j]+=matrix1[i][k]*matrix2[k][j];
                }
            }
        }