叶落了 发表于 2023-12-20 21:08:20

动态数组里的值怎么修改呢?为什么打印不出来

#include<iostream>

using namespace std;
//打印帕斯卡三角形
int main()
{
        int i;
        cout << "请输入要打印的行数:";
        cin >> i;

        int* array = new int();//动态数组,记得要释放掉内存
        for (int k = 0; k < i; k++)
        {
                //左右边界赋初值1
                array = 1;
                array = 1;

                //打印格式
                for (int l = 1; l < i -k; l++)
                {
                        cout << " ";
                }
                //打印每行的数值
                for (int n = i - k; n <= i + k; n = n + 2)
                {
                        cout << array<<" ";
                }
                cout << endl;

                //为下一行赋值
                for (int m = i - k + 1; m < i + k; m = m + 2)
                {
                        if (k == i - 1)
                        {
                                break;
                        }
                        array = array + array;
                        //cout << array << endl;
                        cout << array << endl;
                }
        }
        delete[] array;
        return 0;
}

FishC 发表于 2023-12-20 21:08:21

动态数组中的值可以通过索引来修改。在你的代码中,使用`array = 1;`尝试给数组元素赋值是不正确的。

首先,你需要为动态数组分配内存空间。在你的代码中,你已经为动态数组分配了内存空间,但是只有一个数组元素,并没有给它分配足够的内存空间。

所以,首先要修改的地方是:将`int* array = new int();`改为`int* array = new int;`,这样就能为动态数组分配`i`个整数的内存空间。

然后,你可以使用数组索引来给数组赋值。例如,`array = 1;`和`array = 1;`可以分别给数组的第一个和第二个元素赋值为1.

最后,你需要在循环结束之前,使用`delete[] array`释放动态数组占用的内存空间。

下面是修改后的完整代码:

#include <iostream>

using namespace std;

//打印帕斯卡三角形
int main()
{
    int i;
    cout << "请输入行数: ";
    cin >> i;

    int* array = new int;//动态数组,记得要释放掉内存
    for (int k = 0; k < i; k++)
    {
      //左右边界赋初值1
      array = 1;
      array = 1;

      //打印格式
      for (int l = 1; l < i -k; l++)
      {
            cout << " ";
      }

      //计算并打印中间的数值
      for (int j = 1; j < k; j++)
      {
            array = array + array;
      }
      for (int j = 0; j <= k; j++)
      {
            cout << array << " ";
      }

      cout << endl;
    }

    delete[] array; // 释放内存

    return 0;
}

现在你应该能够正确地打印出帕斯卡三角形了。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

叶落了 发表于 2023-12-25 19:30:13

我在打印的那个地方出错了

FishC 发表于 2023-12-25 19:30:23

叶落了 发表于 2023-12-25 19:30
我在打印的那个地方出错了

抱歉,我看到你在打印帕斯卡三角形的代码中存在一些错误。下面是修正后的代码:

#include <iostream>
using namespace std;

int main(){
    int i;
    cout << "请输入帕斯卡三角形的行数:";
    cin >> i;
   
    int** array = new int*;// 创建动态二维数组
   
    for (int k = 0; k < i; k++){
      array = new int;// 每一行的元素个数为行数加1
      // 左右边界赋初值1
      array = 1;
      array = 1;
      // 计算每一行的其他元素
      for (int l = 1; l < k; l++){
            array = array + array;
      }
    }
   
    // 打印帕斯卡三角形
    for (int k = 0; k < i; k++){
      for (int l = 0; l <= k; l++){
            cout << array << " ";
      }
      cout << endl;
    }
   
    // 释放动态数组占用的内存空间
    for (int k = 0; k < i; k++){
      delete[] array;
    }
    delete[] array;
   
    return 0;
}

在这个代码中,我们使用了一个二维动态数组`array`来存储帕斯卡三角形的值。首先,我们为每一行分配了对应个数的内存空间。然后,在循环中,我们通过计算上一行的元素来确定当前行的元素值。最后,我们打印出每一行的元素,完成帕斯卡三角形的输出。请注意,在使用完动态数组后,我们需要逐行释放内存空间。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: 动态数组里的值怎么修改呢?为什么打印不出来