将一个4阶矩阵转置

来源:百度知道 编辑:UC知道 时间:2024/06/14 09:51:39
#include<stdio.h>
main(){
int i,j,k;
int a[4][4];
for(i=0;i<4;i++)
for(j=0;j<4;j++)
scanf("%d",&a[i][j]);
for(i=0;i<3;i++)
for(j=i+1;j<4;j++){
k=a[i][j];
a[i][j]=a[j][i];
a[j][i]=k;
}
for(i=0;i<4;i++){
for(j=0;j<4;j++)

printf("%2d",a[i][j]);
printf("\n");
}
}
在这个程序中,转置时为什么取值是
for(i=0;i<3;i++)
for(j=i+1;j<4;j++)
而不是
for(i=0;i<4;i++)
for(j=0;j<4;j++)
呢,我是新手,不太明白

呵呵,楼主对矩阵转置还是没搞清楚;
转置矩阵是将关于主对角线对称的元素互换位置。
下面我来给楼主分析下:
for(i=0;i<3;i++)
for(j=i+1;j<4;j++)
当i=0时,我们对以a[0][0]为顶点的第一行(a[0][1]a[0][2]a[0][3])和第一列(a[1][0]a[2][0]a[3][0])的元素进行互换,但主对角线元素不必交换,故内层for循环从i+1开始。
当i=1时,我们对以a[1][1]为顶点的第二行(a[1][2],a[1][3])和第二列(a[2][1],a[3][1])进行互换。
……
因此,当i=4时,我们要对以a[3][3]为顶点的第四行和第四列进行互换,但此时我们发现,剩余的元素只有a[3][3],而主对角线的元素不必进行互换,故不必进行第四次循环。

矩阵转置的本质是 a[i][j]与a[j][i]交换
四阶矩阵,

z00 x01 x02 x03
y10 z11 x12 x13
y20 y21 z22 x23
y30 y31 y32 z33 矩阵元后面数值分别是下标i和j
显然,只要找到上三角矩阵元(x开头的元素),把它与对称位置的矩阵元(y开头)互换即可,对角线矩阵元(z开头)不需考虑
i = 0, j = 1,2,3
i = 1, j = 2,3
i = 2, j = 3