矩阵转置:给定一个n×n的整数矩阵(1<=n<=20)按主对角线转置,即行、列互换,然后输出转置后的矩阵.

#include<stdio.h>

int main()
{
int n=0,i=0,j=0,a[30][30],b[30][30];

scanf("%d",&n);//输入阶数
if(n>0 && n<=20)
{
    for(i=0;i<n;i++)//输入矩阵
    {
        for(j=0;j<n;j++)
        {
            scanf("%d",a[i]+j);
            if(a[i][j]>99) printf("input error!");
        }
    }
}



for(i=0;i<n;i++)//矩阵转置
{
    for(j=0;j<n;j++)
    {
        b[i][j]=a[j][i];
    }
}

for(i=0;i<n;i++)//输出矩阵
{
    for(j=0;j<n;j++)
        printf("%3d",b[i][j]);
    if(i<n-1)
        printf("\n");
}
return 0;

}

(pta上显示答案错误,哪里错了?)

就输出来说,可以。但作业的目的可能是在同一个二维数组中转置,而不是产生一个新的二维数组吧

应该是输出矩阵的格式不对
printf("%3d",b[i][j]);
改成 printf("%d ",b[i][j]);看看

for(i = 0;i < n;i++)//矩阵转置
    for(j = 0;j < i;j++)
    {
        int temp = a[i][j];
        a[i][j] = a[j][i];
        a[j][i] = temp;
    }

可以这样写,在原数组进行转置~