鱼C论坛

 找回密码
 立即注册
查看: 498|回复: 3

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

[复制链接]
发表于 2023-12-20 21:08:20 | 显示全部楼层 |阅读模式
6鱼币
#include<iostream>

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

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

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

                //为下一行赋值
                for (int m = i - k + 1; m < i + k; m = m + 2)
                {
                        if (k == i - 1)
                        {
                                break;
                        }
                        array[m] = array[m - 1] + array[m + 1];
                        //cout << array[i] << endl;
                        cout << array[m] << endl;
                }
        }
        delete[] array;
        return 0;
}
最佳答案
2023-12-20 21:08:21
动态数组中的值可以通过索引来修改。在你的代码中,使用`array = 1;`尝试给数组元素赋值是不正确的。

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

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

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

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

下面是修改后的完整代码:
  1. #include <iostream>
  2. using namespace std;
  3. //打印帕斯卡三角形
  4. int main()
  5. {
  6.     int i;
  7.     cout << "请输入行数: ";
  8.     cin >> i;
  9.     int* array = new int[i];//动态数组,记得要释放掉内存
  10.     for (int k = 0; k < i; k++)
  11.     {
  12.         //左右边界赋初值1
  13.         array[0] = 1;
  14.         array[k] = 1;
  15.         //打印格式
  16.         for (int l = 1; l < i -k; l++)
  17.         {
  18.             cout << " ";
  19.         }
  20.         //计算并打印中间的数值
  21.         for (int j = 1; j < k; j++)
  22.         {
  23.             array[j] = array[j-1] + array[j];
  24.         }
  25.         for (int j = 0; j <= k; j++)
  26.         {
  27.             cout << array[j] << " ";
  28.         }
  29.         cout << endl;
  30.     }
  31.     delete[] array; // 释放内存
  32.     return 0;
  33. }
复制代码

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

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

最佳答案

查看完整内容

动态数组中的值可以通过索引来修改。在你的代码中,使用`array = 1;`尝试给数组元素赋值是不正确的。 首先,你需要为动态数组分配内存空间。在你的代码中,你已经为动态数组分配了内存空间,但是只有一个数组元素,并没有给它分配足够的内存空间。 所以,首先要修改的地方是:将`int* array = new int();`改为`int* array = new int;`,这样就能为动态数组分配`i`个整数的内存空间。 然后,你可以使用数组索引来给数组赋值。例 ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-12-20 21:08:21 | 显示全部楼层    本楼为最佳答案   
动态数组中的值可以通过索引来修改。在你的代码中,使用`array = 1;`尝试给数组元素赋值是不正确的。

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

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

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

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

下面是修改后的完整代码:
  1. #include <iostream>
  2. using namespace std;
  3. //打印帕斯卡三角形
  4. int main()
  5. {
  6.     int i;
  7.     cout << "请输入行数: ";
  8.     cin >> i;
  9.     int* array = new int[i];//动态数组,记得要释放掉内存
  10.     for (int k = 0; k < i; k++)
  11.     {
  12.         //左右边界赋初值1
  13.         array[0] = 1;
  14.         array[k] = 1;
  15.         //打印格式
  16.         for (int l = 1; l < i -k; l++)
  17.         {
  18.             cout << " ";
  19.         }
  20.         //计算并打印中间的数值
  21.         for (int j = 1; j < k; j++)
  22.         {
  23.             array[j] = array[j-1] + array[j];
  24.         }
  25.         for (int j = 0; j <= k; j++)
  26.         {
  27.             cout << array[j] << " ";
  28.         }
  29.         cout << endl;
  30.     }
  31.     delete[] array; // 释放内存
  32.     return 0;
  33. }
复制代码

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-12-25 19:30:13 | 显示全部楼层
我在打印的那个地方出错了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-12-25 19:30:23 | 显示全部楼层
叶落了 发表于 2023-12-25 19:30
我在打印的那个地方出错了

抱歉,我看到你在打印帕斯卡三角形的代码中存在一些错误。下面是修正后的代码:
  1. #include <iostream>
  2. using namespace std;
  3. int main(){
  4.     int i;
  5.     cout << "请输入帕斯卡三角形的行数:";
  6.     cin >> i;
  7.    
  8.     int** array = new int*[i];  // 创建动态二维数组
  9.    
  10.     for (int k = 0; k < i; k++){
  11.         array[k] = new int[k + 1];  // 每一行的元素个数为行数加1
  12.         // 左右边界赋初值1
  13.         array[k][0] = 1;
  14.         array[k][k] = 1;
  15.         // 计算每一行的其他元素
  16.         for (int l = 1; l < k; l++){
  17.             array[k][l] = array[k-1][l-1] + array[k-1][l];
  18.         }
  19.     }
  20.    
  21.     // 打印帕斯卡三角形
  22.     for (int k = 0; k < i; k++){
  23.         for (int l = 0; l <= k; l++){
  24.             cout << array[k][l] << " ";
  25.         }
  26.         cout << endl;
  27.     }
  28.    
  29.     // 释放动态数组占用的内存空间
  30.     for (int k = 0; k < i; k++){
  31.         delete[] array[k];
  32.     }
  33.     delete[] array;
  34.    
  35.     return 0;
  36. }
复制代码

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-28 20:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表