题目.编程将一个二维数组元素变换为逆向存放,即按元素在内存中的物理排列位置,第一个元素变成倒数第一个元素,第二个元素变成倒数第二个元素,依此类推。
例如,原始二维数组为,逆向存放后变为。试建立一个类REVARR,完成上述工作。具体要求如下:
(1)私有数据成员
int a[M][N]:初始化时存放原始二维数组,最终存放逆向存放后的二维数组。
(2)公有成员函数
REVARR(int x[M][N]):构造函数,用形参x初始化数据成员a。
void reverse():按题目要求处理二维数组。
void print():按二维数组方式输出a数组值。
(3)在主函数中完成对该类的测试。在程序的开头,定义符号常数M和N的值分别为3
和4,表示数组的行数和列数。在主函数中定义数组int data[M][N],其初值如上。定义一个REVARR类的对象arr,并用数组data初始化该对象的成员a,输出原数组值,然后调用成员函数逆序存放二维数组,最后输出逆序后的二维数组。
#include <iostream>
using namespace std;
class ARRAY{
public:
void init(float a[10]); //初始化数组data。
void process(); //将数组data中的最大值、最小值和平均值分别存入max、min、average中。
void print();
private:
float m_data[10]; //存储待处理的数组元素。
float m_max; //存储数组中元素的最大值。
float m_min; //存储数组中元素的最小值。
float m_average; //存储数组中元素的平均值。
};
void ARRAY::init(float a[10])
{
int i;
for (i = 0; i < 10; i++)
{
m_data[i] = a[i];
}
}
void ARRAY::process()
{
int i;
float s = 0;
//求最大值
for (i = 0; i < 10; i++)
{
if (m_data[i] >m_max)
{
m_max = m_data[i];
}
}
//求最小值
for (i = 1, m_min = m_data[0]; i < 10; i++)
{
if (m_data[i] < m_min)
{
m_min = m_data[i];
}
}
//求平均值
for (i = 0; i < 10; i++)
{
s += m_data[i];
}
m_average = s / 10;
}
void ARRAY::print()
{
for (int i = 0; i < 10; i++)
{
cout << m_data[i] << "\t";
if (4 == i || 9 == i)
{
cout << endl;
}
}
cout << "max = " << m_max << endl;
cout << "min = " << m_min << endl;
cout <<"average = "<< m_average << endl;
}
int main()
{
float b[10] = { 3.0, 4, 5, 2, 1, 10, 5.5, 7.5, 8, 9 };
ARRAY arr;
arr.init(b);
arr.process();
arr.print();
system("pause");
return 0;
}
运行结果