Jasonbelic 2022-05-31 08:32 采纳率: 100%
浏览 35
已结题

这个有关数组的C++编程问题,如何求解?

试定义一个数组类CArray,声明如下:

class CArray{
 int *arr;    //数组
 int n;     //数组元素个数
public:
 CArray();    //构造函数
 CArray(int a[],int n); //构造函数
 CArray(CArray &t);  //拷贝构造函数
 ~CArray();    
 int Insert(int x);  //在数组中插入整数x,保持数组从小到大排序
 void Print();   //输出数组
};

在如下主函数中对该类进行测试。

int main() {
 int a[] = { 3,6,9 },x;
 CArray a1(a, 3),a2(a1);
 for (int i = 0; i < 5; i++) {
  cin >> x;
  a2.Insert(x);
 }
 a2.Print();
 return 0;
}

输入输出示意如下:
1 2 3 4 5
1 2 3 3 4 5 6 9
请在答题窗口录入编写的完整程序。

  • 写回答

1条回答 默认 最新

  • 赵4老师 2022-05-31 09:34
    关注
    
    #include <iostream>
    using namespace std;
    class CArray {
        int *arr;              //数组
        int n;                 //数组元素个数
    public:
        CArray();              //构造函数
        CArray(int a[],int n); //构造函数
        CArray(CArray &t);     //拷贝构造函数
        ~CArray();
        int Insert(int x);     //在数组中插入整数x,保持数组从小到大排序
        void Print();          //输出数组
    };
    CArray::CArray() {
        arr=NULL;
        n=0;
    }
    CArray::CArray(int a[],int an) {
        n=an;
        arr=new int[n];
        for (int i=0;i<n;i++) arr[i]=a[i];
        for (int i=0;i<n-1;i++) {
            for (int j=i+1;j<n;j++) {
                if (arr[i]>arr[j]) {
                    int t;
                    t=arr[i];arr[i]=arr[j];arr[j]=t;
                }
            }
        }
    }
    CArray::CArray(CArray &t) {
        arr=new int[t.n];
        n=t.n;
        for (int i=0;i<n;i++) arr[i]=t.arr[i];
    }
    CArray::~CArray() {
        delete[] arr;
    }
    int CArray::Insert(int x) {
        int *arr1=new int [n+1];
        for (int i=0;i<n;i++) arr1[i]=arr[i];
        arr1[n]=x;
        delete[] arr;
        arr=arr1;
        n++;
        for (int i=0;i<n-1;i++) {
            for (int j=i+1;j<n;j++) {
                if (arr[i]>arr[j]) {
                    int t;
                    t=arr[i];arr[i]=arr[j];arr[j]=t;
                }
            }
        }
        return n;
    }
    void CArray::Print() {
        if (n<=0) {cout<<endl;return;}
        if (n==1) {cout<<arr[0]<<endl;return;}
        cout<<arr[0];
        for (int i=1;i<n;i++) cout<<" "<<arr[i];
        cout<<endl;
    }
    int main() {
        int a[] = { 3,6,9 },x;
        CArray a1(a, 3),a2(a1);
        for (int i = 0; i < 5; i++) {
            cin >> x;
            a2.Insert(x);
        }
        a2.Print();
        return 0;
    }
    //输入
    //1 2 3 4 5
    //输出
    //1 2 3 3 4 5 6 9
    //
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 6月8日
  • 已采纳回答 5月31日
  • 创建了问题 5月31日

悬赏问题

  • ¥20 java-OJ-健康体检
  • ¥15 rs485的上拉下拉,不会对a-b<-200mv有影响吗,就是接受时,对判断逻辑0有影响吗
  • ¥15 使用phpstudy在云服务器上搭建个人网站
  • ¥15 应该如何判断含间隙的曲柄摇杆机构,轴与轴承是否发生了碰撞?
  • ¥15 vue3+express部署到nginx
  • ¥20 搭建pt1000三线制高精度测温电路
  • ¥15 使用Jdk8自带的算法,和Jdk11自带的加密结果会一样吗,不一样的话有什么解决方案,Jdk不能升级的情况
  • ¥15 画两个图 python或R
  • ¥15 在线请求openmv与pixhawk 实现实时目标跟踪的具体通讯方法
  • ¥15 八路抢答器设计出现故障