【问题标题】:C++ assignment to copy parts of One-dimensional array to multidimensional array将一维数组的部分复制到多维数组的 C++ 赋值
【发布时间】:2018-02-05 16:24:36
【问题描述】:

这是我第一次在这里发帖,我可能做的不对,提前抱歉。

我无法理解如何将两个单独的一维数组复制到一个多维数组中。这是我作业的一部分,但我已经上交了,可能会因此而失分,但没关系。只要我明白它是如何完成的,我仍然会很高兴。

我遇到问题的具体部分是第 5 部分,我把其他所有内容都记下来了,也许是因为这一天很长,但我似乎无法理解。我将发布整个作业以及我的代码。感谢您花时间阅读所有这些内容。

编写一个 C++ 程序来测试函数 main 和第 1 部分到第 7 部分中讨论的函数。(根据需要添加其他函数,例如打印二维数组。)。

考虑以下函数 main:

<code>int main()
{
     int inStock[10][4];
     int alpha[20];
     int beta[20];
     int gamma[4] = {11, 13, 15, 17};
     int delta[10] = {3, 5, 2, 6, 10, 9, 7, 11, 1, 8};
     .
     .

     .
}</code>
  1. 编写函数 setZero 的定义,该函数将任何 int 类型的一维数组初始化为 0(alpha 和 beta)。

  2. 编写函数inputArray的定义,提示用户输入20个数字,并将数字存储为alpha。

  3. 编写函数 doubleArray 的定义,该函数将 beta 的元素初始化为 alpha 中对应元素的两倍。确保您阻止该函数修改 alpha 的元素。

  4. 编写函数 copyGamma 的定义,该函数将 inStock 第一行的元素从 gamma 和 inStock 的其余行设置为 inStock 前一行的三倍。确保 你阻止函数修改 gamma 的元素。

5.编写函数 copyAlphaBeta 的定义,它将 alpha 存储到 inStock 的前五行,将 beta 存储到 inStock 的后五行。确保您阻止函数修改 alpha 和 beta 的元素。

  1. 编写函数 printArray 的定义,该函数打印任何 int 类型的一维数组。

  2. 编写函数 setInStock 的定义,提示用户输入 inStock 第一列的元素。然后,该函数应将剩余列中的元素设置为 上一列中的对应元素,减去delta中的对应元素。

这是我的代码:

<code>
#include <iostream>
using namespace std;

int setZero(int alpha[], int beta[]);
int inputArray(int alpha[]);
int doubleArray(const int alpha[], int beta[]);
int copyGamma(const int gamma[], int inStock[][4]);
void copyAlphaBeta(int inStock[][4], const int numberOfRows, const int 
alpha[], const int beta[], int numSize);
void printArray(int print[], int n);
int setInStock(int inStock[][4],const int delta[]);


int main()
{
    int inStock[10][4];
    int alpha[20];
    int beta[20];
    int gamma[4]={11,13,15,17};
    int delta[10]={3,5,2,6,10,9,7,11,1,8};

    setZero(alpha, beta);
    cout << "Alpha after initialization" << endl;
    printArray(alpha, 20);

    inputArray(alpha);
    cout << "Alpha after reading 20 numbers" << endl;
    printArray(alpha, 20);

    doubleArray(alpha, beta);
    cout << "Beta after a call to doubleArray" << endl;
    printArray(beta, 20);

    copyGamma(gamma, inStock);

    copyAlphaBeta(inStock, 10, alpha, beta, 20);
    for (int row=0; row<10;row++)
        for (int col=0; col<4; col++)
        {
            if (col%4==0)
                cout << endl;
            cout << inStock[row][col] << '\t';
        }
    cout << endl;

    setInStock(inStock, delta);

    return 0;
}

int setZero(int alpha[], int beta[])
{
    for (int i=0; i<20; i++)
    {
        alpha[i]=0;
        beta[i]=0;
    } 
    cout << endl;
}
int inputArray(int alpha[])
{
    cout << endl;
    cout << "Enter 20 integers" << endl;
    for (int i=0; i<20; i++)
    {
        cin >> alpha[i];
    }
    cout << endl;
    return 0;
}
int doubleArray(const int alpha[], int beta[])
{
    cout << endl;

    for (int i=0; i<20; i++)
    {
        beta[i]=alpha[i]*2;
    }
    cout << endl;
    return 0;
}
int copyGamma(const int gamma[], int inStock[][4])
{
    cout << endl;
    cout << "inStock after a call to copyGamma" << endl;
    for (int row=0;row<10;row++)
    for (int column=0;column<4;column++)
    {
        if (row==0)
            inStock[row][column]=gamma[column];
        else
            inStock[row][column]=3*inStock[row-1][column];
    }
    cout << endl;
    for (int r=0;r<10;r++)
    for (int c=0; c<4;c++)
    {
        if (c==0)
            cout << endl;
        cout << inStock[r][c] << '\t';
    } 
    cout << endl;
    return 0;
 }
void copyAlphaBeta(int inStock[][4], const int numberOfRows, const int 
alpha[], const int beta[], int numSize)
{
    cout << endl;
    cout << "inStock after a call to copyAlphaBeta" << endl;

    for(int r=0;r<numberOfRows;r++)
    {
        for(int c=0;c<4;c++)
        {
            for (int counter=0; counter<numSize; counter++)
            {
                if(r<5)
                {
                    inStock[r][c]=alpha[counter];
                }
                else if (r>=5)
                {
                    inStock[r][c]=beta[counter];
                }
            }
        }
    }

    cout << endl;
}
void printArray(int print[], int n)
{
    cout << endl;
    for (int i=0;i<n;i++)
        cout << print[i] << " ";
    cout << endl;
}
int setInStock(int inStock[10][4],const int delta[])
{

    int input;
    cout << endl;
    cout << "Enter 10 integers" << endl;

    for (int r=0;r<10;r++)
    for (int c=0;c<4;c++)
    {
        if(c==0)
        {
            cin >> inStock[r][c];
        }
        else
            inStock[r][c] = 2 * inStock[r][c-1] - delta[r];
    }
    for (int row=0; row<10;row++)
    for (int col=0; col<4; col++)
    {
        if (col%4==0)
            cout << endl;

        cout << inStock[row][col] << " ";
    }
}

TL;DR - 需要帮助了解过去的作业,我只想知道正确的方法。也请批评,寻找改进的方法。谢谢!

编辑: 我遇到的问题是这部分:

  1. 编写函数 copyAlphaBeta 的定义,该函数将 alpha 存储到 inStock 的前五行,并将 beta 存储到 inStock 的后五行。确保您阻止函数修改 alpha 和 beta 的元素。

我与这部分问题相关的代码是:

<code>
void copyAlphaBeta(int inStock[][4], const int numberOfRows, const int 
alpha[], const int beta[], int numSize)
{
    cout << endl;
    cout << "inStock after a call to copyAlphaBeta" << endl;

    for(int r=0;r<numberOfRows;r++)
    {
        for(int c=0;c<4;c++)
        {
            for (int counter=0; counter<numSize; counter++)
            {
                if(r<5)
                {
                    inStock[r][c]=alpha[counter];
                }
                else if (r>=5)
                {
                    inStock[r][c]=beta[counter];
                }
            }
        }
    }

    cout << endl;
}</code>

感谢您提供的链接,目前我不允许使用向量,但我肯定会研究它们。

【问题讨论】:

  • 您能否将问题和代码缩小到相关部分?

标签: c++ arrays multidimensional-array


【解决方案1】:

首先,如果你被允许使用std::vector,你应该使用它。在此处阅读std::vector 了解更多详情。

Vector 提供动态分配(在后面)的内存块,可以根据添加/删除元素在运行时“扩展”和更改。您可能想学习使用向量,因为它们非常有用。

但是,您实际上并不需要矢量来进行复制。您可以使用std::copy 为您执行此操作。更多信息在这里:std::copy

您可以使用它为您的案例获取 3 个输入。前两个是开始和结束指针,最后一个输入是目的地的开始指针。您应该能够弄清楚它们对您的项目有什么作用。

【讨论】:

  • 谢谢你,我一定会阅读std::copy,它将来对我有帮助。我目前不允许使用矢量,但我也会阅读。
【解决方案2】:

在嵌套的 for 循环中,最后一个循环是错误的,它会反复将不同的 alpha[count] 和 beta[count] 值放入同一个 inStock[r][c] 元素中。

您可以删除此循环并更改代码

for(int r=0;r<numberOfRows;r++)
    {
        for(int c=0;c<4;c++)
        {
                if(r<5)
                {
                    inStock[r][c]=alpha[c]; // assuming size of alpha is 4
                }
                else if (r>=5)
                {
                inStock[r][c]=beta[c]; //assuming size of beta is 4
                }
         }
    }

在这段代码中,您假设 inStock 有 4 列,每行的这 4 列将被 alpha 和 beta 数组的 4 个元素填充。

【讨论】:

    猜你喜欢
    • 2020-01-13
    • 1970-01-01
    • 1970-01-01
    • 2010-11-09
    • 1970-01-01
    • 1970-01-01
    • 2011-07-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多