使用指针在c中进行矩阵乘法

时间:2014-12-15 22:17:51

标签: c pointers matrix

我想用c中的指针乘以2矩阵。棘手的是我必须在linux终端中使用 gcc -Werror -o run filename file.c,所以我的代码中甚至没有警告。

我有myArray矩阵 nxn (其中n是偶数 - 4,6,8 ......),我必须将它分成4个部分,之后,我必须将这部分相乘像:

1x2 = a,ax3 = b且bx4 = c(其中1,2,3,4是我的初始矩阵的4个部分)。

问题很简单但我无法处理。 代码是:

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
//---------------------------------------------initialize and adding elements!!!
void init_matrix(int **myArray, int n)
{
  int i,j;
    printf("Insert data:\n");
    for (i = 0; i < n; i++)
        for (j = 0; j < n; j++)
        {
            scanf("%d", &*(*(myArray+i)+j));
        }

    printf("The introduced Array:\n");
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < n; j++)
            printf("%d ", *(*(myArray+i)+j));
          printf("\n");
        }
        printf("\n");
        {
    }

}

//---------------------------------------------devisation in 4 parts!!!
void first_matrix(int **myArray,int n)
{  int i,j,m;

    printf("\nThe first matrix is: \n");

       for (i = 0; i < n/2; i++)
    {
        for (j = 0; j < m/2; j++)
            printf("%d ", *(*(myArray+i)+j));
                  printf("\n"); 
        }
        printf("\n");
        {
    }
}

void second_matrix(int **myArray,  int n)
{  int i,j,m;

    printf("\nThe second matrix is: \n");

       for (i = 0; i < n/2; i++)
    {
        for (j = m/2; j < m; j++)
            printf("%d ", *(*(myArray+i)+j));
          printf("\n");
        }
        printf("\n");
        {
    }
}

void third_matrix(int **myArray,  int n)
{  int i,j,m;

    printf("\nThe third matrix is: \n");

       for (i = n/2; i < n; i++)
    {
        for (j = 0; j < m/2; j++)
            printf("%d ", *(*(myArray+i)+j));
          printf("\n");
        }
        printf("\n");
        {
    }
}

void fourth_matrix(int **myArray,  int n)
{  int i,j,m;

    printf("\nThe fourth matrix is: \n");

       for (i = n/2; i < n; i++)
    {
        for (j = m/2; j < m; j++)
            printf("%d ", *(*(myArray+i)+j));
          printf("\n");
        }
        printf("\n");
        {
    }
}

int main(void)//----------------------------------------------------main function!!!
{
    int **myArray,i, n;

        printf("Enter the dimmension of Array: ");
        scanf("%d", &n);

    //alloc memory
    myArray = (int **) malloc( n * sizeof(int*));
    for(i = 0; i< n; i++)
    myArray[i] = (int *) malloc(sizeof(int));


    init_matrix(myArray,n);
    first_matrix(myArray,n);
    second_matrix(myArray,n);
    third_matrix(myArray,n);
    fourth_matrix(myArray,n);

     //some methods for mutiply

    //free memory
    for(i = 0; i< n; i++)   
    free(myArray[i]);
    free(myArray);

   printf("\n");
    return 0;
}

1 个答案:

答案 0 :(得分:1)

  

棘手的是我必须使用gcc -Werror -o run filename file.c   在linux终端中,所以我的代码中甚至没有警告

对于初学者来说,代码的所有应该在没有警告的情况下进行编译。警告是编译器说的方式“您的代码可能无法以可预测的方式运行,或者您认为它的方式,直到您解决此问题。”编译器很少出错。

接下来,使用指针的一般矩阵乘法,只需要遵循矩阵乘法的规则。这意味着您可以将m x n矩阵(matrix_a)与n x p矩阵(matrix_b)相乘,其结果的维度为m x p({{1 }})。有关详细信息,请参阅Matrix Multiplication

您需要分配空间来容纳product matrix。最简单的方法是声明一个乘法函数,该函数返回指向产品矩阵所需类型的指针。您需要将product matrixmatrix_amatrix_b一起传递,以便分配,计算并返回dimensions for each。以下是此实现的一种方法。

注意:,因为您要为product分配空间,您也负责释放它。另外注意,建议将product matrix初始化为product matrix。为行分配选择0可以为您自动执行此操作,而无需显式归零。 (显示下面的错误检查,但未实现)

calloc