c++编程题

1. 编程将一个二维数组元素变换为逆向存放。即按元素在内存中的物理排列位置,最前面的元素变成最后面的元素,前面第二个元素变成最后倒数第二个元素,依此类推。

如:原始二维数组为:,逆向存放后变为:


算法提示:对二维数组进行变换处理时,可以将二维数组当作一维数组来处理。试建立一个类REVARR,完成上述工作。

具体要求如下:

(1) 私有数据成员

l int a[M][N] :初始化时,存放原始二维数组。最终,存放逆向存放后的二维数组。

(2) 公有成员函数

l REVARR(int x[M][N]) :构造函数,用形参x初始化数据成员a。

l void reverse( ) :按题目要求处理二维数组。

l void show( ) :按二维方式输出a数组值。
(3) 在主函数中完成对该类的测试。 在程序的开头,定义符号常数M和N的值分别为3和4,表示数组的行数和列数。在主函数中定义数组int data[M][N],其初值如上。定义一个REVARR类的对象arr,并用数组data初始化该对象的成员a,输出原数组值;然后调用成员函数逆序存放二维数组,最后输出逆序后的二维数组

#include <iostream>
#include <string>
using namespace std;

#define M 3
#define N 4
class REVARR
{
private:
int a[M][N];
public:
REVARR(int x[M][N])
{
for( int i=0; i<M; i++)
{
for( int j=0; j<N; j++)
{
a[i][j] = x[i][j];
}
}
}
void reverse( )
{
for( int i=0; i<M*N; i++)
{

int *p = (int *)a;
int temp = p[i];
p[i] = p[M*N -i];
p[M*N-i] = temp;
}
}
void show()
{
for(int i=0;i<M;i++)
{
for( int j=0; j<N;j++)
{
cout<<a[i][j]<<" ";
}
cout<<endl;
}
cout<<endl;
}
};
int main()
{
int input[M][N]={ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
REVARR a(input);
a.show();
a.reverse();
a.show();
return 0;

}
温馨提示:答案为网友推荐,仅供参考
相似回答