这是我第一次在这里发帖,我可能没有以正确的方式做到这一点,对不起提前。
我无法理解如何将两个单独的一维数组复制到一个多维数组中。这是我的任务的一部分,但我已经把它转过来,我可能会失去它的分数,但它没关系。只要我了解它是如何完成的,我仍然会感到高兴。
我遇到问题的具体部分是第5部分,我得到了其他一切,也许是因为它是漫长的一天,但我似乎无法得到它。我将发布整个作业以及我的代码。感谢您抽出时间阅读所有这些内容。
编写一个C ++程序,用于测试第1至第7部分中讨论的函数main和函数。(根据需要添加其他函数,例如打印二维数组。)。
考虑以下函数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>
编写setZero函数的定义,将int类型的任何一维数组初始化为0(alpha和beta)。
写出函数inputArray的定义,提示用户输入20个数字并将数字存储到alpha中。
编写函数doubleArray的定义,将beta元素初始化为alpha中相应元素的两倍。确保阻止该功能修改alpha元素。
写出函数copyGamma的定义,它将inStock的第一行元素从gamma和inStock的剩余行设置为inStock前一行的三倍。确保这一点 你阻止该函数修改gamma元素。
5。写入函数copyAlphaBeta的定义,将alpha存储到inStock的前五行,将beta存储到inStock的最后五行。确保阻止该功能修改 alpha和beta的元素。
编写printArray函数的定义,该函数打印int类型的任何一维数组。
写出函数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 - 需要帮助理解过去的作业,我只是想知道正确的方法。也请批评,寻找改进的方法。谢谢!
编辑: 我遇到的问题是这部分:
我的问题的这部分代码是:
<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>
感谢您的链接,我暂时不允许使用矢量,但我肯定会研究它们。
答案 0 :(得分:1)
首先,如果您被允许使用std::vector
,您应该使用它。请阅读std::vector,了解更多详情。
Vector提供了一个动态分配(在后面)的内存块,可以根据添加/删除元素在运行时“扩展”和更改。您可能想学习使用矢量,因为它们非常有用。
但是,您并不需要矢量来进行复制。您可以使用std::copy
为您执行此操作。这里有更多信息:std::copy
您可以使用它为您的案例选择3个输入。前两个是开始和结束指针,最后一个输入是目标的起始指针。你应该能够弄清楚它们对你的项目是什么。
答案 1 :(得分:0)
在你的嵌套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列,将填充4个alpha和beta数组元素。