产出
CSDN 技术博客 1 篇
一、 问题
将矩阵转置效果如下图
二、思路
1、创建a, b两个数组,a存放转置前的矩阵, b存放转置后的矩阵
2、观察可得转置后的矩阵行列序号互换,此步由b数组实现
三、代码实现
#include <stdio.h>
int main()
{
int a[3][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}}, b[4][3], i, j;
//a[3][4]为转置前数组, b[4][3]为转置后数组。i, j 分别计行、列数
printf("矩阵转置前\n"); //输出转置前的矩阵
for(i = 0; i < 3; i++) //控制行数
{
for(j = 0; j < 4; j++) //控制列数
{
printf("%d\t", a[i][j]); //输出第i行第j列数据
b[j][i] = a[i][j]; //进行矩阵转置操作
}
printf("\n"); //每输出一行即换行
}
printf("矩阵转置后\n"); //输出转置后的矩阵
for(i = 0; i < 4; i++) //控制行数
{
for(j = 0; j < 3; j++) //控制列数
{
printf("%d\t", b[i][j]); //输出第i行第j列数据
}
printf("\n"); //每输出一行即换行
}
return 0;
}
四、代码优化
方向:可自行输入数据
五、优化代码实现
#include <stdio.h>
int main()
{
int r, c, i, j;//r为行数,c为列数。i, j 分别计行、列数。
printf("请输入需转置矩阵的行数\n");
scanf("%d", &r);
printf("请输入需转置矩阵的列数\n");
scanf("%d", &c);
int a[r][c], b[c][r];
printf("请输入矩阵数据\n");
for(i = 0; i < r; i++)
{
for(j = 0; j < c; j++)
scanf("%d", &a[i][j]);
}
printf("矩阵转置前\n"); //输出转置前的矩阵
for(i = 0; i < r; i++) //控制行数
{
for(j = 0; j < c; j++) //控制列数
{
printf("%d\t", a[i][j]); //输出第i行第j列数据
b[j][i] = a[i][j]; //进行矩阵转置操作
}
printf("\n"); //每输出一行即换行
}
printf("矩阵转置后\n"); //输出转置后的矩阵
for(i = 0; i < c; i++) //控制行数
{
for(j = 0; j < r; j++) //控制列数
{
printf("%d\t", b[i][j]); //输出第i行第j列数据
}
printf("\n"); //每输出一行即换行
}
return 0;
}