求一个矩阵的转置矩阵

c语言求一个矩阵的转置矩阵,怎么写都不对,矩阵是输入给出的。

源码

#include <stdio.h>
#include <string.h>

#define maxn 11
int mat[maxn][maxn];

void swap(int* a, int* b) {                    // (1)
    int tmp = *a;
    *a = *b;
    *b = tmp;
}

void maxtrixT(int n, int mat[][maxn]) {        // (2)
    int i, j;
    for(i = 0; i < n; ++i) {
        for(j = i; j < n; ++j) {               // (3)
            swap( &mat[i][j], &mat[j][i] );    // (4)
        }
    }
}

int main() {
    int n;
    int i, j;
    while(scanf("%d", &n) != EOF) {
        for(i = 0; i < n; ++i) {
            for(j = 0; j < n; ++j) {
                scanf("%d", &mat[i][j]);
            }
        }
        
        maxtrixT(n, mat);
        
        for(i = 0; i < n; ++i) {
            for(j = 0; j < n; ++j) {
                if(j) printf(" ");             // (5)
                printf("%d", mat[i][j]);
            }
            puts("");
        }       
    }
    return 0;
}

解析

( 1 ) (1)(1) 利用指针,实现了变量的交换。
( 2 ) (2)(2) 转置函数的定义,其中第二个参数是个矩阵,二维数组的高维(即第一维)可以不定义;
( 3 ) (3)(3) 注意,这里的 j必须从 i开始枚举,不能从 0 开始,如果不理解,可以试试改成 0 以后,程序的执行结果;
( 4 ) (4)(4) 利用 swap实现mat[i][j]和mat[j][i]的变量交换;
( 5 ) (5)(5) 空格作为矩阵输出时的分隔符,之所以这么些,是因为第一个数字之前不需要分隔符;



#include<stdio.h>
int main()
{
    int a[4][4], b[4][4];
    int i, j;
    //输入a 
    for (i = 0; i < 4; i++)
    {
        for (j = 0; j < 4; j++)
        {
            scanf_s("%d ", &a[i][j]);
        }
    }
    //将a逆时针旋转,赋给b
    for (i = 0; i < 4; i++)
    {
        for (j = 0; j < 4; j++)
        {
            b[3 - j][i] = a[i][j];
        }
    }
    //打印b 
    for (i = 0; i < 4; i++)
    {
        for (j = 0; j < 4; j++)
        {
            printf("%d\t", b[i][j]);  
        }
        printf("\n");   //输出一行之后要换行,不然输出全在一行上
    }
    return 0;
}