将一个二维数组表示的矩阵转置
~
②命令行
#include<stdio.h>
#include<stdlib.h>
~
③定义函数
void fun(int array[3][3])
{int i,j,t
for(i=0i<3i++)
for(j=i+1j<3j++)
/*注意:只遍历了矩阵的右上半部分。
如果for(j=0j<3j++,表示遍历矩阵全部元素,右上与左下交换,左下又与右上交换,导致重复转置,矩阵没有变化。*/
{t=array[i][j]
array[i][j]=array[j][i]
array[j][i]=t}
/*交换语句,矩阵右上半部分,与对应左下半部分,元素交换,完成转置*/
}
~
④主函数(调用)
void main()
{int i,j
int array[3][3]={{1,2,3},{4,5,6},{7,8,9}}
for(i=0i<3i++)
{for(j=0j<3j++)
/*输出原矩阵,遍历全部*/
printf("%7d",array[i][j])
printf("\n")}
fun(array)
/*利用fun函数完成转置*/
printf("converted array:\n")
for(i=0i<3i++)
{for(j=0j<3j++)
printf("%7d",array[i][j])
printf("\n")}
}
根据数学定义可以知道,对于矩阵P,其第m行n列上的元素,是其转置矩阵的n行m列元素。
从此可以得出程序如下:
#define M 10#define N 5
//以10行5列为例,可以任意修改。
void convert(int a[M][N], int b[N][M])//求a的转置矩阵,结果存于b中。
{
int i,j
for(i = 0 i <M i ++)
for(j = 0 j < N j ++)
b[j][i] = a[i][j]//转置运算。
}