指针实现矩阵转置

C语言指针编程实现n*m阶矩阵转置

  • 纯指针实现,m,n均不大于5

纯指针实现,m,n均不大于5

#include <stdio.h>
#include <stdlib.h>

void InputMatrix(int *p, int m, int n);
void Transpose(int *p,int *q,int m,int n);
void PrintMatrix(int *q, int m, int n);

int main()
{
     
    int n,m;
    int *p=NULL;
    int *q=NULL;

    do{
     
        printf("请输入n和m的值(n与m均不大于5):\n");
	    scanf("%d%d",&n,&m);
    }while(m>5||n>5);

	p=(int*)malloc(n*m*sizeof(int));
	q=(int*)malloc(m*n*sizeof(int));
    if(p!=NULL)
    {
     
      InputMatrix(p,m,n);
      if(q!=NULL)
      {
     
          Transpose(p,q,m,n);
          PrintMatrix(q,m,n);
      }
      else{
     
        printf("q_malloc_error!\n");
        exit(-1);
	}
    }
	else{
     
        printf("p_malloc_error!\n");
        exit(-1);
	}

	free(p);
	free(q);
	p=NULL;
	q=NULL;
    return 0;
}

void InputMatrix(int *p, int m, int n)
{
     
    int i,j;
    printf("\n输入 %d*%d 矩阵:\n",n,m);
    for(i=0;i<n;i++)
		{
     
		    for(j=0;j<m;j++)
            {
     
               scanf("%d",p+m*i+j);
            }
		}
}

void Transpose(int *p,int *q,int m,int n)
{
     
    int i,j;
    for(i=0;i<m;i++)
	{
     
		for(j=0;j<n;j++)
			{
     
			   *(q+m*i+j)=*(p+m*j+i);
			}
	}

}
void PrintMatrix(int *q, int m, int n)
{
     
    int i,j;
    printf("\n转置矩阵为:\n");
    for(i=0;i<m;i++)
	{
     
		for(j=0;j<n;j++)
			{
     
			    printf("%d ",*(q+m*i+j));
			}
		printf("\n");
	}
}

你可能感兴趣的:(c语言,指针,算法)