应用题
请使用VC6或使用[答题]菜单打开考生文件夹proj3下的工程proj3,其中定义的IntArray是一个用于表示整型一维数组的类。成员函数swap可以将数组中的两个指定元素交换位置;成员函数sort的功能是将数组元素按照升序排序。请编写成员函数sort。在main函数中给出了一组测试数据,此时程序运行中应显示:
读取输入文件…
---排序前---
a1=3 1 2
a2=5 2 7 4 1 6 3
---排序后---
a1=1 2 3
a2=1 2 3 4 5 6 7
要求:
补充编制的内容写在“//********333********”与“//********666********”之间,不得修改程序的其他部分。
注意:程序最后将结果输出到文件out.dat中。输出函数WriteToFile已经编译为obj文件,并且在本程序中调用。
//IntArray.h
#include <iostream>
#include <string.h>
using namespace std;
class IntArray {
public:
IntArray(unsigned int n)
{
size = n;
data = new int[size];
}
~IntArray() { delete [] data; }
int getSize() const { return size; }
int& operator [] (unsigned int i) const { return data[i]; }
void swap(int i, int j)
{
int temp = data[i];
data[i] = data[j];
data[j] = temp;
}
void sort();
friend ostream& operator << (ostream &os, const IntArray &array)
{
for (int i=0; i<array.getSize (); i++)
os << array[i] << '';
return os;
}
private:
int * data;
unsigned int size;
};
void readFromFile ( const char *, IntArray&);
void writeToFile (char*, const IntArray &);
//main.h
#include <fstream>
#include 'IntArray. h'
void IntArray::sort ()
{
//******** 333********
//******** 666********
}
void readFromFile (const char * f, IntArray& m)
{
ifstream infile (f);
if (infile.fail ()) {
cerr << '打开输入文件失败!';
return;
}
int i=0;
while (!infile.eof()) {
infile >> m[i++];
}
}
int main ()
{
IntArray a1(3), a2(7), a3(1000);
a1[0]=3, a1[1]=1, a1[2]=2;
a2[0]=5, a2[1]=2, a2[2]=7, a2[3]=4, a2[4]=1, a2[5]=6, a2[6]=3;
readFromFile ('in.dat', a3);
cout << '---排序前---\n';
cout <<'a1=' << a1 <<endl;
cout <<'a2=' << a2 <<endl<<endl;
a1.sort ();
a2.sort();
a3.sort();
cout <<'---排序后--- \n';
cout <<'a1=' <<a1<<endl;
cout <<'a2=' <<a2<<endl<<endl;
writeToFile('', a3);
return 0;
}
【正确答案】for(int i=0; i<size; i++) //i从0到size-1遍历 for(int j=i+1; j<size; j++) //j从(i+1)到(size-1)遍历 if(data[i]>data[j]) //如果data[i]>data[j] swap(i, j); //i与j交换位子
【答案解析】[考点] 本题考查的是IntArray类,其中涉及动态数组、构造函数、析构函数和成员函数。 主要考查考生对排序算法的掌握,sort函数的功能是将数组元素按照从小到大的顺序排序。使用for循环遍历数组元素,变量i和j代表数组元素下标,将数组元素i和j进行比较,顺序不对就调用swap函数交换元素。