设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数组初始化数组a。 void move():将数组a的每个元素交换。 void print():按矩阵方式输出数组a。 (3) 在主函数中完成对该类的测试。在程序的开头定义符号常数M的值为3。 在主函数中定义二维数组int x[M][M],用以上数据赋初值。 定义一个TDarray类的对象arr,用数组x初始化该对象, 通过arr调用成员函数,转置并输出转置后的数组。:#include<iostream.h> #include<fstream.h> #include<iomanip.h> #define M 3 class TDarray { int a[M][M]; public: TDarray(int x[M][M]); void move(); void print(); }; TDarray::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 TDarray::move() { /********** Begin **********/ /********** End ***********/ } void TDarray::print() { for(int i=0;i<M;i++) { for(int j=0;j<M;j++) cout<<setw(4)<<a[i][j]; cout<<'\n'; } //此处将结果输出到文件"bc02.in",请勿改动,否则影响判分 ofstream outf("bc02.in"); for(i=0;i<M;i++) { for(int j=0;j<M;j++) outf<<setw(4)<<a[i][j]; outf<<'\n'; } outf.close(); } void main() { int x[M][M]={1,2,3,4,5,6,7,8,9}; TDarray arr(x); arr.move(); arr.print(); }
时间: 2024-01-29 19:02:37 浏览: 148
二维数组,选择排序和冒泡排序
您的问题是关于一个二维数组的交换操作,需要使用一个名为TDarray的类来实现。在这个类中,私有数据成员是一个M行M列的二维数组a,公有成员函数包括构造函数TDarray,用于将传入的二维数组x初始化到a中;move函数,用于交换a中的行和列;print函数,用于按矩阵方式输出a。在主函数中,您需要定义一个名为arr的TDarray类的对象,使用x数组初始化该对象,然后调用arr的成员函数进行转置和输出。
下面是一个实现该类的示例代码,您可以参考一下:
```c++
#include <iostream>
#include <fstream>
#include <iomanip>
#define M 3
class TDarray {
private:
int a[M][M];
public:
TDarray(int x[M][M]);
void move();
void print();
};
TDarray::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 TDarray::move() {
int temp;
// 交换行和列
for (int i=0; i<M; i++) {
for (int j=0; j<i; j++) {
temp = a[i][j];
a[i][j] = a[j][i];
a[j][i] = temp;
}
}
}
void TDarray::print() {
for (int i=0; i<M; i++) {
for (int j=0; j<M; j++) {
std::cout << std::setw(4) << a[i][j];
}
std::cout << '\n';
}
// 将结果输出到文件"bc02.in"
std::ofstream outf("bc02.in");
for (int i=0; i<M; i++) {
for (int j=0; j<M; j++) {
outf << std::setw(4) << a[i][j];
}
outf << '\n';
}
outf.close();
}
int main() {
int x[M][M] = {1,2,3,4,5,6,7,8,9};
TDarray arr(x);
arr.move();
arr.print();
return 0;
}
```
在move函数中,我们使用两重循环遍历a的上三角部分,进行行和列的交换。注意,这里的循环条件是j<i,是因为我们只需要交换a的上三角部分,避免将交换操作重复执行。
在print函数中,我们首先使用两重循环遍历a,按矩阵方式输出a的元素。然后,我们将结果输出到文件"bc02.in"中,以便后续的判分。注意,这里使用了头文件<iomanip.h>中的setw函数,用于控制输出宽度。
最后,在主函数中,我们定义了一个名为arr的TDarray类的对象,使用x数组初始化该对象,然后调用arr的成员函数进行转置和输出。
阅读全文