例7-9原题:输入一个正整数n(1<n<=6),根据下式生成一个nxn的方阵,将该方阵转置(行列互换)后输出。
a[i][j]=i*n+j+1(0<=i<n, 0<=j<n)
我的代码及解释:
#include<stdio.h>
int main()
{
int n;
scanf("%d",&n);
int i,j,a[6][6];
for(i=0;i<n;i++)
for(j=0;j<n;j++)
a[i][j]=i*n+j+1;//按要求得到方阵
//下面进行方阵的转置
int temp;
for(i=0;i<n;i++)
for(j=0;j<i;j++)
//注意这里只用进行一半的转置,如果j<n则方阵又转置回来了
{
temp=a[i][j];
a[i][j]=a[j][i];
a[j][i]=temp;
//常规的交换操作
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%d ",a[i][j]);
printf("\n");
}//输出矩阵
return 0;
}
我的备注是我踩过的一些坑 -_-|||
课本的代码:
#include<stdio.h>
int main()
{
int n,i,j,temp;
int a[6][6];
//给二维数组赋值
printf("Enter n: ");
scanf("%d",&n);
for(i=0;i<n;i++)
for(j=0;j<n;j++)
a[i][j]=i*n+j+1;
//行列互换
for(i=0;i<n;i++)
for(j=0;j<n;j++)
if(i<=j) //只遍历上三角
{
temp=a[i][j];
a[i][j]=a[j][i];
a[j][i]=temp;
}
//按矩阵的形式输出a
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%4d",a[i][j]);
printf("\n");
}
return 0;
}