[题目] 设a为M行N列的二维数组,编程将a中的行和列交换, 交换后的数组仍然存放在a中,试建立一个类TDarray,完成以上操作。 例如,原始数组以及移动元素之后的数组如下: 1 2 3 4 5 6 7 8 9 交换后 1 4 7 2 5 8 3 6 9 [编程要求] (1) 私有数据成员。 int a[M][M]:存入二维数组的值,M为预定义的符号常量。 (2) 公有成员函数。 TDarray(int x[M][M]):构造函数,用x数组初
时间: 2024-03-17 21:40:29 浏览: 71
下面是C++的实现:
```cpp
const int M = 100;
class TDarray {
private:
int a[M][M];
public:
TDarray(int x[M][M]) {
for(int i = 0; i < M; i++) {
for(int j = 0; j < M; j++) {
a[i][j] = x[i][j];
}
}
}
void swapRowCol() {
for(int i = 0; i < M; i++) {
for(int j = i + 1; j < M; j++) {
swap(a[i][j], a[j][i]);
}
}
for(int i = 0; i < M; i++) {
for(int j = 0; j < M / 2; j++) {
swap(a[i][j], a[i][M - j - 1]);
}
}
}
void print() {
for(int i = 0; i < M; i++) {
for(int j = 0; j < M; j++) {
cout << a[i][j] << " ";
}
cout << endl;
}
}
};
```
这个程序中,首先定义了一个常量M,表示数组的最大行数和最大列数。然后定义了一个TDarray类,其中私有数据成员为一个二维数组a,公有成员函数包括构造函数TDarray(int x[M][M])、swapRowCol()和print()。构造函数用来初始化a数组,swapRowCol()函数用来交换行和列,print()函数用来将交换后的数组打印出来。
在swapRowCol()函数中,首先遍历a数组的上半部分,将第i行第j列的元素与第j行第i列的元素交换,实现行列交换。然后再遍历a数组的每一行,将每一行的前M/2个元素和后M/2个元素交换,实现行内元素翻转。
最后,我们可以使用下面的代码来测试这个TDarray类:
```cpp
int main() {
int a[M][M];
for(int i = 0; i < M; i++) {
for(int j = 0; j < M; j++) {
a[i][j] = i * M + j + 1;
}
}
TDarray arr(a);
arr.swapRowCol();
arr.print(); // 打印交换后的数组
return 0;
}
```
这个程序首先初始化一个二维数组a,并将它作为参数传递给TDarray类的构造函数,创建一个TDarray对象arr。然后调用arr.swapRowCol()函数交换行和列,最后调用arr.print()函数打印交换后的数组。
阅读全文