2023/11/13 使用new创建动态数组及其相关事项(一维数组)

int n;

cin>>n;//输入你所需要的数组内数据个数

int *a = new int[n];  //动态分配的数组a存放在内存中的堆中

for(int i=0;i>a[i];//输入数组

}

for(int i=0;i

下面写一个例题,里面将用到一维动态数组和筛选素数和冒泡排序这三大块内容

【问题描述】编写程序,从任意n个数中找出素数,计算素数之和,并按从大到小顺序排序。

【输入形式】输入分2行:第一行为n的值,第二行为n个整数;

【输出形式】输出分2行:第一行为素数之和,第二行为素数排序结果。 

【样例输入】 

1 3 5 2 0 

【样例输出】

10 

5 3 2 

【样例说明】数列1、3、5、2、0中的素数是3、5、2,它们的和是10,对它们从大到小排序,结果是5 3 2

#include

using namespace std;

int n;

int num;

int* f = new int[num];

int prime(int n)

{

    bool flag = 1;

    if (n < 2)

    {

        flag = 0;

    }

    else

    {

        for (int i = 2; i * i <= n; i++)

        {

            if (n % i == 0)

            {

                flag = 0;

                break;

            }

        }

    }

    return flag;

}//筛选素数

void maopao()

{

    if (num == 0)

    {

        return;

    }

    for (int i = 0; i < num - 1; i++)

    {

        for (int j = 0; j < num - i - 1; j++)

        {

            if (f[j] < f[j + 1])

            {

                swap(f[j], f[j + 1]);

            }

        }

    }

}

//冒泡排序

int main()

{

    cin >> n;

    int* a = new int[n];

    int sum = 0;

    for (int i = 0; i < n; i++)

    {

        cin >> a[i];

        if (prime(a[i]))

        {

            f[num++] = a[i];

            sum += a[i];

        }

    }

    maopao();

    cout << sum << endl;

    for (int i = 0; i < num; i++)

    {

        cout << f[i] << " ";

    }

    cout << endl;

    delete[] a;

    a = 0;

    delete[] f;

    f = 0;

    return 0;

}

本来一开始我的代码是这样的

#include

using namespace std;

int n;

int num=0;

int prime(int n)

{

    bool flag=1;

    if(n<2)

    {

        flag=0;

    }

    else

    {

        for(int i=2;i*i<=n;i++)

        {

            if(n%i==0)

            {

                flag=0;

                break;

            }

        }

    }

    return flag;

}//筛选素数

void maopao()

{

    int f[num];

    if(num==0)

   {

        return ;

   }

    for(int i=0;i>n;

    

    int *a=new int[n];

    int *f=new int[num];

    int sum=0;

    for(int i=0;i>a[i];

        if(prime(a[i]))

        {

            f[num++]=a[i];

            sum+=a[i];

        }

        

    }

    maopao();

    cout << sum<< endl;

    

    for (int i = 0; i < num; i++)

    {

        cout << f[i] << " ";

    }

    cout << endl;

    return 0;

}

输入10出来的是2 3 5,但是按理来说应该是5 3 2;

原因:

maopao函数里面的f数组合插入元素的数组f根本就是两个东西,所以排序无效

int num=0;初始化为0,new int[0]的后续使用会导致数组索引越界,可能会引发异常.

总觉得在现在的学习过程中使用new定义动态数组确实挺麻烦的,但是这个还是很有用。需要注意delete释放内存

你可能感兴趣的:(c++,c++)