请打开考生文件夹下的解决方案文件proj3,其中包含主程序文件main.cpp和用户定义的头文件Array.h,整个程序包含有XArray类的定义和main主函数的定义。请把主程序文件中的XArray类的成员函数twoMinSum()的定义补充完整,补充的

admin2020-04-10  30

问题 请打开考生文件夹下的解决方案文件proj3,其中包含主程序文件main.cpp和用户定义的头文件Array.h,整个程序包含有XArray类的定义和main主函数的定义。请把主程序文件中的XArray类的成员函数twoMinSum()的定义补充完整,补充的内容填写在“//*******333*******”与“//******* 666 *******”两行之间。
    经修改后运行程序,得到的输出为:
    3 5 7 9 8 6 4 2
    5
    注意:只允许在“//*******333*******”和“//*******666*******”两行之间填写内容.不允许修改其他任何地方的内容。
    //Array.h
    #include<iostream>
    using namespace std;
    class XArray{//数组类
         int * a;
         int size;
    public:
         XArray(int b[],int len):size(len)//构造函数
         {
         a=new int[size];
         for(int i=0;i<size;i++)a=b
     }
     int length()const{return size;}//返回数组长度
     int& operator[](int i){//返回下标为i的元素
         if(i<0 ||i>=size){
           cout<<"下标越界!"<<endl;
          delete[]a;
          exit(1);
       }
       return a
    }
    int twoMinSum();//成员函数声明,返回数组a中两个最小元素值之和
    ~XArray(){delete[]a;}
    };
    void writeToFile(const char *);//不用考虑此语句的作用

    //main.cpp
    #include"Array.h"
    //返回成员数组a中的两个最小元素值之和
    int XArray::twoMinSum()
    {
        int x1,x2;
        if(1ength()<2)exit(1);
          if(a[0]<=a[1])
       {x1=a[0];x2=a[1];}
       else{x1=a[1]; x2=a[0];}
       //********333********

  
      //********666********
      return x1+x2;
    }
    void main(){
      int a[8]={3,5,7,9,8,6,4,2};
      XArray X(a,8);
      for(int i=0;i<x.length();i++)
      cout<<X<<’ ’;
      cout<<endl<<x.twoMinSum ()<<endl;

      writeToFile("");//不用考虑此语句的作用
    }

选项

答案int XArray::twoMinSum() { int x1,x2; if(length()<2)exit(1); if(a[0]<=a[1]){x1=a[0];x2=a[1];} else(x1=a[1];x2=a[0];} //********333******** for(int i=2; i<size;i++){ if(a[i]<x1){ x2=x1; x1=a[i]; }else if(a[i]<x2){ x2=a[i]; } } //********666******** return x1+x2; }

解析 根据题意,twoMinSum成员函数需要在成员a指向的size个数组元素中,找到最小的两个元素x1和x2,返回x1和x2之和。函数首先判断a指向的数组中元素个数是否大于等于2个,接着将a[0]和a[1]两个元素的较小值赋给x1,较大值赋给x2,使得x1始终指向处理过元素中的最小值,x2始终指向处理过元素的次小值;然后从数组a中下标为2的位置开始遍历各个元素,若当前元素a<x1,说明a是当前处理过元素中的最小值,x1是次小值;用x1更新x2,再用a更新x1;若a>=x1且a<x2,说明a是次小值,只更新x2即可;若a>=x2,则不作处理;完成遍历后,返回x1和x2之和。
转载请注明原文地址:https://jikaoti.com/ti/mwA0FFFM
0

最新回复(0)