C++编写函数实现一个m阶方阵的转置运算,要求m的值以及矩阵中各个元素的值在程序中由用户动态输入,并对转置前和转置后的矩阵进行显示输出(要求利用原有的存储空间实现原地转置)
时间: 2024-12-11 11:36:59 浏览: 18
在C++中,为了实现一个m阶方阵的转置运算,我们可以创建一个二维数组来表示矩阵,然后让用户输入每个元素的值。由于题目要求原地转置,即不需要额外的空间,我们可以通过交换行和列的方式来完成这一操作。下面是一个简单的示例函数:
```cpp
#include <iostream>
using namespace std;
// 函数声明,接受整数m和二维数组作为参数
void transpose(int m, int matrix[m][m]);
int main() {
int m;
cout << "请输入矩阵的阶数(m): ";
cin >> m;
// 检查输入是否合法(这里简化了检查)
if (m <= 0) {
cerr << "阶数应大于0,退出程序...\n";
return -1;
}
// 初始化m x m的矩阵
int matrix[m][m];
// 用户输入矩阵元素
cout << "请输入矩阵的元素:\n";
for (int i = 0; i < m; ++i) {
for (int j = 0; j < m; ++j) {
cin >> matrix[i][j];
}
}
// 转置矩阵
transpose(m, matrix);
// 输出转置后的矩阵
cout << "转置后的矩阵:\n";
for (int i = 0; i < m; ++i) {
for (int j = 0; j < m; ++j) {
cout << matrix[j][i] << " ";
}
cout << "\n";
}
return 0;
}
// 定义转置函数
void transpose(int m, int matrix[m][m]) {
for (int i = 0; i < m / 2; ++i) { // 只需要遍历一半,因为另一半会自动对齐
for (int j = i; j < m - i - 1; ++j) {
// 交换行i和列j的元素
swap(matrix[i][j], matrix[j][i]);
}
}
}
```
在这个例子中,`transpose`函数接收m和矩阵数组作为参数,通过嵌套循环实现行和列的交换,实现了原地转置。
阅读全文