请使用菜单命令或直接用VC6打开考生文件夹下的工程proj2,其中有元素类Element和集合类MySet的定义。请在程序中的横线处填写适当的代码,然后删除横线,以实现上述类定义。此程序的输出结果应为: 0 3 5 8 0 3 8

admin2016-08-19  22

问题 请使用菜单命令或直接用VC6打开考生文件夹下的工程proj2,其中有元素类Element和集合类MySet的定义。请在程序中的横线处填写适当的代码,然后删除横线,以实现上述类定义。此程序的输出结果应为:
    0  3  5  8
    0  3  8
    注意:只能在横线处填写适当的代码,不要改动程序中的其他内容,也不能删除或移动“//**********found**********”。
1  #inClude
2  #include
3  using namespace std;
4  #define MaxElement 100
5  class Element{  //“元素”类
6   public:
7    int n;
8    Element(int i=0):n(i){)
9  };
10  class MySet {//“集合”类
11    Element*element;  //指向存储元素的数组的指针
12    int size;  //数组大小
13    int counter;  //数组中元素的个数
14    int current;  //用于表示扫描位置,及当前被扫描元素在数组中的下标
15   public:
16    MySet():element(new Element[100]),size(100),counter(0),cur-rent(0){)
17    ~MySet(){delete[]element;}
18    void add(Element ele);  //向集合中添加一个元素,保持由小到大的顺序。
19    void remOve(Element ele);  //删除集合中指定的元素
20    void ScanFirst(){current=0;)//将扫描位置定位于首元素
21    //**********found**********
22 void scanNext(){_____;}//将扫描位置定位于下一个元素
23    Element get()const{return ele-ment[current];}//返回当前被扫描的元素
24    bool isEnded()const{return cur-rent>=counter;}//如果已经没有更多的元素可扫描了,返回true。
25    void show();  //显示集合中所有元素
26  };
27  void MySet::add(Element ele){
28    int pos=counter;  //pos用于确定元素应插入的位置
29    while(pos>0){  //从后往前寻找该位置
30    if(ele.n>element[pos-1].n)break;  //找到应插入的位置,退出循环
31    //**********found**********
32    if(_______)return;//发现相同元素,终止添加过程。
33    pos--;
34    }
35    if(counter>=size){  //如果没有足够空间,扩充空间(增加100个元素的容量)
36    Element木tmp=element;//tmp指向原来的数组
37    //**********found**********
38    element=______;//申请一个新的数组,容量扩大100个元素的容量
39    for(int i=0;i=tmp
40    size+=100;
41    delete[]tmp;
42    }
43    for(int i=counter;i>pos;i--)element=element[i-1];//后移相关元素,腾出存放新元素的空间
44    element[pos]=ele;//插入新元素counter++;
45  }
46  void MySet::show(){
47    scanFirst();  //扫描位置定位于首元素
48  while(!isEnded()){
49    cout<50    //**********found**********
51    _____;//扫描定位于下一个元素
52    }
53    cout<54  }
55  void MySet::remove(Element ele){
56    int pos=counter-1;  //pos用于确定要删除的元素的位置
57    while(pos>=0){//从后往前寻找该位置
58    if(ele.n>element[pos].n)return;//集合中没有该元素,终止删除过程。
59    if(ele.n==element[pos].n)break;  //找到删除的元素,退出循环。
60 pos--;
61    }
62    if(pos<0)return;  //集合中没有该元素,终止删除过程。
63    for(int i=pos;i64    element=element[i+1];  //删除该元素,后面的元素顺序前移。
65    counter--;
66    if(counter+l 00<=size){  //如果未使用的存储单元超过100,缩减存储空间,减少100个单元
67    Element*tmp=element;
68    element=new Element[size-100];
69    for(int i=0;i70    element=tmp
71    size-=100;
72   delete[]tmp;
73    }
74  }
75  int main(){
76    MySet set;
77    set.add(Element(3));
78    set.add(Element(8));
79    set.add(Element(5));
80    set.add(Element(0));
8l    set.show();
82    set.remove(Element(5));
83    set.remove(Element(4));
84    set.add(Element(8));
85    set.show();
86    return 0;
87    }

选项

答案(1)++current (2)ele.n==element,[pos-1].n (3)new Elementl[size+100] (4)scanNext()

解析 (1)主要考查考生对数组和自增运算符的掌握情况,扫描数组元素,将扫描位置定位到下一个元素,需要将下标加1,使用自增运算符。
    (2)主要考查考生对数组元素的访问和比较运算符的掌握,pos初值为数组元素个数,所以访问element元素使用pos-1,避免访问数组越界;另外需要判断插入元素与当前元素是否相等来决定程序是否返回,使用相等运算符。
    (3)主要考查考生对动态内存分配的掌握,题意需要申请一个新的数组,并将当前数组容量size扩大100个,所以答案为new Element[size+100]。
    (4)主要考查考生对类成员函数的掌握,show函数用来输出数组的所有元素,所以从首元素开始一次输出,输出一个元素需要将扫描定位到下一个元素,对应于前面的scan-First(),使用成员函数scanNext()最合适不过了。
转载请注明原文地址:https://jikaoti.com/ti/67E0FFFM
0

最新回复(0)