应用题 1.  请使用VC6或使用【答题】菜单打开考生文件夹proj3下的工程文件proj3,此工程包含一个源程序文件proj3.cpp,其功能是从文本文件in.dat中读取全部整数,将整数序列存放到intArray类的对象myArray中,然后对整数序列按非递减排序,最后由函数writeToFile选择序列中的部分数据输出到文件out.dat中。文件in.dat中的整数个数不大于300个。
    要求:
    补充编制的内容写在“// **********333**********”与“// **********666**********”两行之间。实现对整数序列按非递减排序,并将排序结果在屏幕上输出。不得修改程序的其他部分。
    注意:程序最后已将结果输出到文件out.dat中。输出函数writeToFile已经给出并且调用。
    // proj3.cpp
    #include <iostream>
    #include <fstream>
    #include <cstring>
    using namespace std;
    class intArray
    {
    private:
    int * array;  //整数序列首地址
    int length;  //序列中的整数个数
    public:
    //构造函数,从文件中读取数据用于初始化新对象。参数是文件名
    intArray(char * filename);
    void sort();  //对整数序列按非递减排序
    ~intArray();
    void writeToFile (char * filename);
    };
    intArray:: intArray (char * filename)
    {
    ifstream myFile(filename);
    int len=300;
    array = new int[len];
    length = 0;
    while(myFile >>array[length++]);
    length--;
    myFile.close();
    }
    void intArray::sort(){
    // **********333**********
    // **********666**********
    }
    intArray:: ~intArray()
    {
    delete [] array;
    }
    void intArray:: writeToFile
    (char * filename)
    {
    int step=0;
    ofstream outFile(filename);
    for(int i=0; i<length; i=i+step)
    {
    outFile << array [i] << endl;
    step ++;
    }
    outFile.close();
    }
    void main()
    {
    intArray myArray ("in.dat");
    myArray.sort();
    myArray, writeToFile ("out.dat");
    }
【正确答案】for (int i = 0; i < length; ++i)  //遍历整个数组
   for (int j = i; j < length; ++j)  //从i++遍历整数组
   if (array[i] > array[j])  //如果array[i]>array[j],把array[i]与array[i]进行对换
   {
   int temp;  //定义一个临时变量temp
   temp = array[i];  //把array[i]值放到变量temp
   array[i] = array[j];  //把array[j]值赋给array[i]
   array[j] = temp;  //把变量temp存放在值array[j]中
   }
   for (int a = 0; a < length; ++a)  //遍历数组,把数组中的所有元素打印到控制台上
   cout << array[a] << " ";
   
【答案解析】[考点] 本题主要考查intArray类,其中涉及构造函数、排序函数和析构函数。常用的排序算法有冒泡排序、选择排序、插入排序、堆排序等。
题目要求对整数序列按非递减排序,要排序就必须要有比较,因此定义两个下标i和j,按题目非递减排序要求,当array[i]比array[j]大时就交换其值,利用中间变量temp来实现。
   排序算法有多种,其基本思想是相同的,即先遍历,后比较,再交换。不同之处在于它们遍历数列的顺序不同。考生可选择一至两种算法重点理解。