鱼C论坛

 找回密码
 立即注册
查看: 982|回复: 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];`,这样就能为动态数组分配`i`个整数的内存空间。

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

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

下面是修改后的完整代码:
#include <iostream>using namespace std;//打印帕斯卡三角形int main(){    int i;    cout << "请输入行数: ";    cin >> i;    int* array = new int[i];//动态数组,记得要释放掉内存    for (int k = 0; k < i; k++)    {        //左右边界赋初值1        array[0] = 1;        array[k] = 1;        //打印格式        for (int l = 1; l < i -k; l++)        {            cout << " ";        }        //计算并打印中间的数值        for (int j = 1; j < k; j++)        {            array[j] = array[j-1] + array[j];        }        for (int j = 0; j <= k; j++)        {            cout << array[j] << " ";        }        cout << endl;    }    delete[] array; // 释放内存    return 0;}
现在你应该能够正确地打印出帕斯卡三角形了。

以上回复来自 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];`,这样就能为动态数组分配`i`个整数的内存空间。

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

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

下面是修改后的完整代码:
#include <iostream>using namespace std;//打印帕斯卡三角形int main(){    int i;    cout << "请输入行数: ";    cin >> i;    int* array = new int[i];//动态数组,记得要释放掉内存    for (int k = 0; k < i; k++)    {        //左右边界赋初值1        array[0] = 1;        array[k] = 1;        //打印格式        for (int l = 1; l < i -k; l++)        {            cout << " ";        }        //计算并打印中间的数值        for (int j = 1; j < k; j++)        {            array[j] = array[j-1] + array[j];        }        for (int j = 0; j <= k; j++)        {            cout << array[j] << " ";        }        cout << endl;    }    delete[] array; // 释放内存    return 0;}
现在你应该能够正确地打印出帕斯卡三角形了。

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

使用道具 举报

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

使用道具 举报

发表于 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*[i];  // 创建动态二维数组        for (int k = 0; k < i; k++){        array[k] = new int[k + 1];  // 每一行的元素个数为行数加1        // 左右边界赋初值1        array[k][0] = 1;        array[k][k] = 1;        // 计算每一行的其他元素        for (int l = 1; l < k; l++){            array[k][l] = array[k-1][l-1] + array[k-1][l];        }    }        // 打印帕斯卡三角形    for (int k = 0; k < i; k++){        for (int l = 0; l <= k; l++){            cout << array[k][l] << " ";        }        cout << endl;    }        // 释放动态数组占用的内存空间    for (int k = 0; k < i; k++){        delete[] array[k];    }    delete[] array;        return 0;}
在这个代码中,我们使用了一个二维动态数组`array`来存储帕斯卡三角形的值。首先,我们为每一行分配了对应个数的内存空间。然后,在循环中,我们通过计算上一行的元素来确定当前行的元素值。最后,我们打印出每一行的元素,完成帕斯卡三角形的输出。请注意,在使用完动态数组后,我们需要逐行释放内存空间。

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-23 00:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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