矩阵2D阵列的转置

时间:2014-12-04 07:44:52

标签: c arrays

请告诉我如何创建一个C程序,找到由二维(2D)数组表示的5阶矩阵的转置。使用初始化列表在原始矩阵中使用如下所示的元素初始化2D数组。显示原始矩阵和转置。程序中只能有一个2D数组。

示例:

原始矩阵

1    2    3    4       5

6      7       8       9       10

11     12      13      14      15

16     17      18      19      20

21     22      23      24      25

矩阵的转置:

1      6       11      16      21

2      7       12      17      22

3      8       13      18      23

4      9       14      19      24

5      10      15      20      25

4 个答案:

答案 0 :(得分:3)

给定矩阵的转置可以如下计算:

#include<stdio.h>
void main()
{
    int c,r,i,j;
    printf("Enter number of rows and columns : ");
    scanf("%d %d",&r,&c);
    int arr[r][c];
    for(i=0;i<r;i++)
    {
        for(j=0;j<c;j++)
        {
            printf("\nEnter element : ");
            scanf("%d",&arr[i][j]);
        }
    }
    printf("\nOriginal array is : \n");
    for(i=0;i<r;i++)
    {
        for(j=0;j<c;j++)
        {
            printf("%d\t",arr[i][j]);
        }
        printf("\n");

    }
    printf("\nTranspose array is : \n");
    for(i=0;i<c;i++)
    {
        for(j=0;j<r;j++)
        {
            printf("%d\t",arr[j][i]);
        }
        printf("\n");

    }
}

答案 1 :(得分:1)

由于程序中只能有一个数组,因此有效的方法是将矩阵就地转置,这可以通过以下嵌套循环来完成。

for( int i = 0; i < n; i++)
{
    for ( j = i+1; j < n; j++ ) // only the upper is iterated
    {
        swap(&(a[i][j]), &(a[j][i]));
    }
}

以下子例程将执行交换,其中使用指向int的指针。在上面的调用代码中,这些是通过使用要交换的元素的地址获得的。

void swap(int* arg1, int* arg2)
{
    int buffer = *arg1;
    *arg1 = *arg2;
    *arg2 = buffer;
}

答案 2 :(得分:0)

int array[5][5]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25};

//transpose
cout<<"TRANSPOSE"<<endl;
for(int i=0;i<=4;i++){   
  for(int j=0;j<=4;j++)  {      
    if(array[i]>array[j]){           
      int temp;              
      temp=array[i][j];               
      array[i][j]=array[j][i];                
      array[j][i]=temp;
    }      
  }
}

答案 3 :(得分:0)

由于问题只是要求显示转置...应该很容易。

int matrix[5][5] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25};
for(int i=0;i<5;i++) {
    for (int j=0;j<5;j++) {
        std::cout<<matrix[j][i]<<" ";
    }
    std::cout<<"\n";
}

编辑1:用printf替换cout以使其在C编译器中工作