일차원 배열로 2차원 배열의 덧 빼 곱셈을 표현하는 소스거든

덧 뺄은 되는데
곱셈에서
3*3 행렬 끼리 곱하면
3*3 행렬이 나와야되잔아

근데 이부분이 해결이 안되네
한줄만나와

소스 보고 좀알려주면 안되 ? 제발..


#include <stdio.h>
#include <stdlib.h>
int main(void)
{
 int x1,x2,y1,y2;
 int *a,*b,*c,*d,*e,i,k,x,p,j,z,com=0;
 e=0;
 printf("a행열의 행을 입력하세요 :");
    scanf("%d",&x1);
 printf("a행열의 열을 입력하세요 :");
    scanf("%d",&y1);
    a = (int *)malloc(sizeof(int)*x1*y1);
 printf("b행열의 행을 입력하세요 :");
    scanf("%d",&x2);
 printf("b행열의 열을 입력하세요 :");
    scanf("%d",&y2);
 b = (int *)malloc(sizeof(int)*x2*y2);


 for(i=0;i<x1*y1;i++)
 {   printf("a[%d]를 입력하세요:",i);
  scanf("%d",&a[i]);

 }
    for(k=0;k<x2*y2;k++)
    {
  
     printf("b[%d]를 입력하세요:",k);
  scanf("%d",&b[k]);
 
 }
 
/* if(y1==x2)
  {
  e = (int *)malloc(sizeof(int)*x1*y2);
       
      printf("a,b행렬의 곱셈결과:");
  
  
  for(x=0;x<x1;((x)+(y1)))
  { 
   for(j=0;j<y2;j++)
  {
   for(p=0;p<y1;p++)
    
  com+=a[p+x]*b[p*y2+j];
  e[x*y2+j]=com;
 
  }
  }
 }
 for(x=0;x<x1;((x)+(y1)))
 {
  for(j=0;j<y2;j++)
  {
  printf("%2d",e[x*y2+j]);
  }
 }
   
     
*/
  

 


    if(x1==x2&&y1==y2)
   {
   
    c = (int *)malloc(sizeof(int)*x1*y1);
    d = (int *)malloc(sizeof(int)*x1*y1);
    for(x=0;x<x1*y1;x++)
    {
     c[x]=a[x]+b[x];
     d[x]=a[x]-b[x];
    }
    printf("a,b행열의 덧셈결과:\n");
    for(x=0;x<x1*y1;x++)
 {
  printf("%2d",c[x]);
  if(((x+1)%y1)==0)
   printf("\n");
    }
    printf("a,b행열의 뺄셈결과:\n");
  
 for(x=0;x<x1*y1;x++)
 {
  printf("%2d",d[x]);
  if(((x+1)%y1)==0)
   printf("\n");
 }

   }
   else
   {
    printf(" \n덧셈불가 \n");
    printf(" \n뺄셈불가 \n");
   }
 
   if(y1==x2)
  {
  e = (int *)malloc(sizeof(int)*x1*y2);
       
      printf("a,b행렬의 곱셈결과:");
  
  
  for(x=0;x<x1;x+=y1)
  { 
   for(j=0;j<y2;j++)
  { com=0;
   for(p=0;p<y1;p++)
    
   {
    com+=a[p+x]*b[p*y2+j];
    e[x*y2+j]=com;
   }
    
  }
  }
 }
 for(x=0;x<x1;x+=y1)
 {
  for(j=0;j<y2;j++)
  {
  printf("%2d",e[x*y2+j]);
  }
 }

 return 0;
}