给出一个n*n的矩阵,输出它的转置矩阵,即行列互换后输出。

/Description
给出一个n
n的矩阵,输出它的转置矩阵,即行列互换后输出。
Input
测试数据有多组,第一行的整数T表示测试数据的组数,后跟T组测试数据。
每组的第一行是一个正整数n(1<n<10),后面有一个nn的矩阵。所有数据之间
用空格分隔,都是整数。
Output
对于每组测试数据,输出对应的转置矩阵,输出时按n
n的格式,数据之间用一个
空格分隔。
Sample Input
2
3
1 2 3
4 5 6
7 8 9
2
1 2
3 4
Sample Output
1 4 7
2 5 8
3 6 9
1 3
2 4*

实现代码如下:


#include<stdio.h>
#define M 100
#define N 100
int main()
{
    int i,j,n,m,c[M][M];
    scanf("%d", &m);
    while (m--)
    {
        scanf("%d", &n);
        for (i = 0; i < n; i++)
            for (j = 0; j < n; j++)
                scanf("%d", &c[i][j]);
        for (i = 0; i < n; i++)
        {
            for (j = 0; j < n; j++)
                printf("%d ", c[j][i]);
            printf("\n");
        }
    }
    return 0;
}

结果:

img

供参考:

#include <stdio.h>
#define N 10
void InputMatrix(int* a, int Row, int Col)
{
     int i,j;
     for (i = 0; i < Row; i++)
        for (j = 0; j < Col; j++)
            scanf("%d", a + i * Col + j);
}
void TransMatrix(int* a, int Row, int Col)
{
    int i,j,tmp;
    for(i = 0; i < Row; i++){
        for(j = i; j < Col; j++){
            tmp = *(a + i * Col + j);
            *(a + i * Col + j) = *(a + j * Row + i);
            *(a + j * Row + i) = tmp;
        }
    }
}
void PrintMatrix(int* a, int Row, int Col)
{
    int i, j;
    for (i = 0; i < Row; i++){
        for (j = 0; j < Col; j++)
        {
            printf("%d ", *(a + i * Col + j));
        }
        printf("\n");
    }
}

int main()
{
    int a[N][N] = { 0 }, n = 3, T;
    scanf("%d", &T);
    while (T--){
          scanf("%d", &n);
          InputMatrix(a[0], n, n);
          TransMatrix(a[0], n, n);
          PrintMatrix(a[0], n, n);
    }
    return 0;
}