如何编辑For循环包含多维数组的行总和?

时间:2014-07-08 15:42:31

标签: c++ arrays

我正在学习数组(至少可以说是C ++的新手)并且我正在尝试执行以下操作:

  1. 创建一个12x12的随机数组(带有给定的种子)
  2. 总结每列的元素
  3. 对每行的元素求和
  4. 显示13x13矩阵,包括随机数和行总和(步骤3)和列(步骤2)
  5. 我的代码是:

    #include "stdafx.h"
    #include <iostream>
    #include <cstdlib>
    #include <iomanip>
    
    using namespace std;
    
    const int M = 12;
    const int N = 12;
    
    int myArray[M + 1][N] = { 0 };
    
    void generateArray();
    void sumRowsAndColumns();
    void printSumRowsAndColumns();
    
    int _tmain(int argc, _TCHAR* argv[])
    {
        generateArray();
        sumRowsAndColumns();
    
        return 0;
    }
    
    void generateArray()
    {
        // set the seed
        unsigned setSeed = 1023;
    
        srand(setSeed);
    
        // generate the matrix using pseudo-random numbers
    
        for (int i = 0; i < M; i++)
        {
            for (int j = 0; j < N; j++)
            {
                myArray[i][j] = rand() % 100;
    
                // outputs the raw matrix (in case we need to see it)
                //          cout << left << setw(4) << myArray[i][j] << " ";
            }
            //      cout << endl;
        }
        //  cout << endl << endl;
    }
    
    void sumRowsAndColumns()
    {
        cout << endl;
    
        // for the columns
        for (int i = 0; i < M; i++)
        {
            for (int j = 0; j < M; ++j)
                myArray[M][j] += myArray[i][j];
        }
        printSumRowsAndColumns();
    }
    
    void printSumRowsAndColumns()
    {
    
        // for the columns
        for (int i = 0; i < M + 1; i++)
        {
            for (int j = 0; j < N; j++)
            {
                cout << left << setw(6) << myArray[i][j];
            }
            cout << endl;
        }
    }
    

    除了上面的#3,我能做到。我已经尝试过(非常不成功!)包含一些for循环来处理行元素的总和,但似乎无法让它运行(并且有时会导致无限循环)。是否有人能够就如何解决这个问题给我一些指导?

    提前致谢。 莱恩

    P.S。我知道向量是这里的方法,但从技术上讲我们还没有了解它们,所以期望我们使用数组。

    *更新*

    我根据下面的建议调整了sumRowsAndColumns()函数,我看到了列总和的预期结果。但是,当我尝试总结列时,我看到了一个错误。新代码是:

    void sumRowsAndColumns()
    {
        cout << endl;
    
        for (int i = 0; i < M; i++)
        {
            for (int j = 0; j < M; ++j)
            {
                rowSum[i] += myArray[i][j];
                colSum[j] += myArray[i][j];
            }
            cout << left << setw(6) << rowSum[i] << endl;
    //      cout << left << setw(6) << colSum[j] << endl;
        }
    }
    

    注释掉的那一行:

    //      cout << left << setw(6) << colSum[j] << endl;
    

    导致错误(“j”:未声明的标识符)。我认为'j'和'我'一样。我在for循环中的错误位置是否有这行代码?提前谢谢。

1 个答案:

答案 0 :(得分:0)

不确定为什么要制作13x12阵列。如果要将行和和列总和存储在同一个数组中,则需要13x13。我建议你把它设为12x12并制作两个12x1数组来保存总和。

int col_sum [M],row_sum [M];

并将它们初始化为零。

然后你的循环看起来像这样:

for (int i = 0; i < M; i++)
{
    for (int j = 0; j < M; ++j)
        {
         row_sum[i] += myArray[i][j];
         col_sum[j] += myArray[i][j];
        }
}

如果它必须全部在一个数组中,您应该能够以13x13的形式进行处理。 row_sum数组是第13列,col_sum是第13行。我个人认为在这样的数组中混合数据并不是一个好主意 - 12x12用于随机数据,12x1数组用于结果。

如果你遇到困难,只需将它绘制在一张较小阵列的纸上,然后用它来理解循环如何穿过阵列。