曾几何时我也被矩阵的转置弄得头大,但是学了动态数组之后一切难题烟消云散,具体实现如下
1.预备知识
二级指针,指针数组,new动态开辟空间
2.具体代码实现如下
#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;
//开辟x行y列的动态数组的函数
int** CreateArray(int x,int y)
{
//开辟x行y列的动态数组
int** p = new int* [x];
for (int i = 0; i < x; i++)
{
p[i] = new int[y];
}
return p;
}
int main()
{
int x,y;
cout << "请输入行数" << endl;
cin >> x;//行数
cout << "请输入列数" << endl;
cin >> y;//列数
//创建x列y行的数组
int** a = CreateArray(x,y);
//对动态数组进行赋值
for (int i = 0; i < x; i++)
{
for (int j = 0; j < y; j++)
{
cout << "请输入第" << i + 1 << "行" << j + 1 << "列的元素" << endl;
cin >> a[i][j];
}
}
//输出得到的矩阵
cout << "输入完毕,得到矩阵如下:" << endl;
for (int i = 0; i < x; i++)
{
for (int j = 0; j < y; j++)
{
cout << a[i][j] << " ";
}
cout << endl;
}
//创建存放转置后的y行x列的数组b[y][x]
int** b = CreateArray(y, x);
//将矩阵a的转置后的值存入矩阵b
for (int i = 0; i < y; i++)
{
for (int j = 0; j < x; j++)
{
b[i][j] = a[j][i];
}
}
//输出转置后的矩阵
cout << "转置后的矩阵如下:" << endl;
for (int i = 0; i < y; i++)
{
for (int j = 0; j < x; j++)
{
cout << b[i][j];
}
cout << endl;
}
return 0;
}
运行结果如下:
代码大部分已给出较为清晰的注释,若有疑问的地方可在下方留言
欢迎大家指出不足和讨论