c语言存储转置矩阵,C语言实现矩阵转置(附带源码)

这是一个C语言示例:输入一个 n 行 n 列的整数矩阵,输出其转置矩阵(2≤n≤100)。

要解决该问题应该清楚什么是矩阵的转置。矩阵的转置就是将原矩阵第 i 行的所有数据,依次放入新矩阵的第 i 列,即原矩阵中第 n 行第 m 列的数据被放在了新矩阵的第 m 行第 n 列中(见图 1)。

ba422f5057259c9b11a3d47c7ceab7ea.gif

图 1:矩阵转置示例

解决矩阵问题时通常都是先将矩阵元素存放在一个二维数组中,使用双重 for 循环语句来遍历这个二维数组,从而实现对矩阵中所有元素数据的操作。例如,我们可以将图 1 中的矩阵存放在二维数组 A(int A[3][3];)中。

仔细观察图 1 转置前后的矩阵可知,转置后矩阵主对角线上的元素 A[1][1]、A[2][2]、A[3][3] 的值并没有发生变化,只是位于对角线右上方的三个元素与位于对角线左下方的三个元素的值进行了交换,即 A[1][2] 和 A[2][1] 进行了交换,A[1][3] 和 A[3][1] 进行了交换,A[2][3] 和 A[3][2] 进行了交换。进一步观察进行交换的两个数组元素,会发现它们的行号和列号互换了。

根据这个发现我们可以设计算法,用双重 for 循环遍历数组 A,找出对角线左下角的元素(行号大于列号),将其值与对角线右上角的对应元素(行号和列号互换后的元素)的值互换,就可以实现矩阵的转置操作。

for(i=0;i

for(j=0;j

{

if(i>j)

{

k = a[i][j];

a[i][j] = a[j][i];

a[j][i] = k;

}

}

代码清单 1:输入一个 n×n 整数矩阵,输出其转置矩阵(2≤n≤100)

#include

#include

int n,a[100][100];

void doubleCycle(int s)

{

int i,j,k;

for(i=0;i

{

for(j=0;j

{

if(s==0) scanf("%d",&a[i][j]); //读入矩阵

if(s==1) printf("%5d",a[i][j]); //输出矩阵

if(s==2 && i>j) //转置

{

k=a[i][j]; a[i][j]=a[j][i]; a[j][i]=k;

}

}

if(s==1) printf("\n"); //输出矩阵行结束符

}

}

int main( )

{

printf("输入一个正整数n(1

scanf("%d",&n);

printf("依次输入%d*%d矩阵所有%d个元素:\n",n,n,n*n);

doubleCycle(0); //调用函数读入矩阵

printf("原始矩阵:\n");

doubleCycle(1); //调用函数输出原矩阵

doubleCycle(2); //调用函数将原矩阵转置

printf("转置以后的矩阵:\n");

doubleCycle(1); //调用函数输出转置结果

system("pause");

return 0;

}

运行结果为:

输入一个正整数n(1

依次输入5*5矩阵所有25个元素:

3 4 2 5 6 6 7 7 7 8 8 3 2 5 4 8 8 4 2 6 1 0 5 7 7

原始矩阵:

3    4    2    5    6

6    7    7    7    8

8    3    2    5    4

8    8    4    2    6

1    0    5    7    7

转置以后的矩阵:

3    6    8    8    1

4    7    3    8    0

2    7    2    4    5

5    7    5    2    7

6    8    4    6    7

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值