c语言矩阵转置oj,为什么会错误百分之五十

Problem A: Matrix Problem : Array Practice
Time Limit: 1 Sec Memory Limit: 4 MB
Submit: 20828 Solved: 7609
[Submit][Status]
Description
求一个m×n阶矩阵A的转置矩阵AT。矩阵A的每个元素都在int类型的范围之内。

Input
输入的第一行为一个整数M(M>0),后面有M组输入数据。每组数据以两个正整数m和n开始,满足0<m,n<=100,接下来为一个m行n列的矩阵A。

Output
输出为多组,每组输出A的转置矩阵AT。矩阵的输出为:每行两个元素之间用一个空格分开,每行最后一个元素之后为一个换行,在下一行开始输出矩阵的下一行。每两组输出之间用一个空行分隔开。

Sample Input
1
3 3
1 2 3
4 5 6
7 8 9
Sample Output
1 4 7
2 5 8
3 6 9
HINT
二维数组存储矩阵。

Append Code

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

int main()
{
   int  a,b,n;
   int m[102][102];
   int i,o,j;

   scanf("%d",&n);
   for(j=1; j<=n;j++){

   scanf("%d %d",&a,&b);
   for(i=0; i<a;i++){
   for(o=0;o<b; o++){
      scanf("%d",&m[i][o]);
      }

   }
   for(i=0; i<a;i++){

         for(o=0; o<b;o++){
               if(o==0)printf("%d",m[o][i]);
               else printf(" %d",m[o][i]);
         }
         printf("\n");

   }
   printf("\n");
   }
    return 0;
}


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

付费文章详见(需要的话可以联系我开试读):