应用题 1.  请使用VC6或使用【答题】菜单打开考生文件夹proj3下的工程proj3,其中包含了类Integers和主函数main的定义。一个Integers对象就是一个整数的集合,其中包含0个或多个可重复的整数。成员函数add的作用是将一个元素添加到集合中,成员函数remove的作用是从集合中删除指定的元素(如果集合中存在该元素),成员函数sort的作用是将集合中的整数按升序进行排序。请编写这个sort函数。此程序的正确输出结果应为:
    5 28 2 4 5 3 2 75 27 66 31
    5 28 2 4 5 3 2 75 27 66 31 6
    5 28 2 4 5 3 2 75 27 66 31 6 19
    5 28 4 5 3 2 75 27 66 31 6 19
    5 28 4 5 3 2 75 27 66 31 6 19 4
    2 3 4 4 5 5 6 19 27 28 31 66 75
    要求:
    补充编制的内容写在“// *******333*******”与“// *******666*******”之间。不得修改程序的其他部分。
    注意:相关文件包括:main.cpp、Integers.h。
    程序最后调用writeToFile函数,使用另一组不同的测试数据,将不同的运行结果输出到文件out.dat中。输出函数writeToFile已经编译为obj文件。
    //Integers.h
    #ifndef INTEGERS
    #define INTEGERS   
    #include <iostream>
    using namespace std;   
    const int MAXELEMENTS = 100;
    //集合最多可拥有的元素个数   
    class Integers{
    int elem[ MAXELEMENTS];
    //用于存放集合元素的数组
    int counter;
    //用于记录集合中元素个数的计数器
    public:
    Integers(): counter(0) {}
    //创建一个空集合
    Integers (int data[], int size);
    //利用数组提的数据创建一个整数集合
    void add (int element);
    //添加一个元素到集合中
    void remove (int element);
    //删除集合中指定的元素
    int getCount() const {return counter;}
    //返回集合中元素的个数
    int getElement (int i) const {return elem[i];}
    //返回集合中指定的元素
    void sort();
    //将集合中的整数按由小到大的次序进行排序
    void show() const;
    //显示集合中的全部元素
    };
    void writeToFile(const char * path);
    #endif   
    //main.cpp
    #include "Integers.h"
    #include <iomanip>   
    Integers::Integers (int data[], int size): counter(0) {
    for (int i=0; i<size; i++)
    add(data[i]);
    }   
    void Integers::add (int element) {
    if(counter < MAXELEMENTS)
    elem [counter + +] = element;
    }   
    void Integers::remove(int element) {
    int j;
    for(j = counter-1; j >=0; j--)
    if(elem[j] == element)
    break;
    for(int i=j; i<counter-1; i++)
    elem[i] = elem[i+1];
    counter--;
    }   
    void Integers::sort() {
    // ********333********
    // *******666*******
    }   
    void Integers::show() const {
    for(int i=0; i<getCount(); i++)
    cout << setw (4) << getElement(i);
    cout << endl;
    }
    int main() {
    int d[] = {5,28,2,4,5,3,2,75,27,66,31};
    Integers s (d,11);
    s.show();
    s.add(6); s.show();
    s.add(19); s.show();
    s.remove(2); s.show();
    s.add(4); s.show();
    s.sort(); s.show();
    writeToFile(" ");
    return 0;
    }
【正确答案】for (int i = 0; i < counter; i++)  //遍历数组elem
   for (int j = counter -1; j > i; j --)  //从最后一位到i到前一位遍历elem
   if (elem[i] > elem[j])
   //如果elem[i]大于elem[j],则两值替换
   {
   int temp = elem[i];  //定义整形变量temp并赋值为elem[i];
   elem[i] = elem[j];  //给elem[i]赋值elem[i]
   elem[j] = temp;  //给elem[j]赋值temp
   }
   
【答案解析】[考点] 本题考查Integers类,其中涉及数组、构造函数、成员函数、const函数和排序算法。
主要考查考生对排序算法的掌握,要排序的数组为elem,元素个数为counter,在这里使用下标i和j进行比较,当elem[i]>elem[j]时,数组元素通过中间变量temp进行交换。