二维数组:计算行的总和和列的乘积

时间:2017-01-19 11:18:22

标签: c++ arrays algorithm multidimensional-array

我目前正在开展一项任务,其中包含以下内容:

  

输入二维阵列A(m,n)[m < 10,n&lt; 20。在n + 1列中计算行的总和,并在m + 1行中计算列的乘积。打印出结果矩阵。

根据我对此任务的理解,每列的末尾必须是相应行的总和(在右侧)和列的乘积(在结尾/底部?)。

这项任务令人困惑,我不知道从哪里开始。我找到了一些涵盖这个想法的代码,但不包括产品,并且它没有显示这些值,因为任务要求我:

#include<iostream.h>
#include<conio.h>
void main()
{
    clrscr();
    int a[3][3];
    int i, j, s = 0, sum = 0;

    cout << "Enter 9 elements of 3*3 Matrix \n";
    for (i = 0; i < 3; i++)
        for (j = 0; j < 3; j++)
            cin >> a[i][j];

    cout << "Matrix Entered By you is \n";
    for (i = 0; i < 3; i++)
    {
        for (j = 0; j < 3; j++)
            cout << a[i][j] << " ";
        cout << endl;
    }

    for (i = 0; i < 3; i++)
    {
        for (j = 0; j < 3; j++)
            s = s + a[i][j];
        cout << "sum of" << i + 1 << " Row is" << s;
        s = 0;
        cout << endl;
    }
    cout << endl;
    for (i = 0; i < 3; i++)
    {
        for (j = 0; j < 3; j++)
            s = s + a[j][i];
        cout << "sum of" << i + 1 << " Column is" << s;
        s = 0;
        cout << endl;
    }

    cout << endl;

    for (i = 0; i < 3; i++)
        sum = sum + a[i][i];
    cout << "Sum of Diagnols Elements is \n" << sum;

    getch();
}

3 个答案:

答案 0 :(得分:1)

从声明开始:确保您的程序使用m×n矩阵,而不仅仅是3×3矩阵。由于m和n的限制为10和20,并且因为必须在结果中添加额外的行和列,所以声明应为

int a[11][21];

您还需要声明mn,让最终用户输入它们,并验证它们是否在可接受的范围内:

int m, n;
cin >> m >> n;
... // Do the validation

现在,您可以使用mn重写循环,而不是在整个代码中使用3

通过这些声明,您可以合计数字,即您要编写的每行r

for (int i = 0 ; i != n ; i++) {
    a[r][n+1] += a[r][i];
}

同样,您可以计算产品(不要忘记以1的初始值启动它,而不是0)。

最后你会打印一个(m + 1)×(n + 1)矩阵来完成任务。

答案 1 :(得分:1)

我们初学者应该互相帮助。

你在这里

#include <iostream>
#include <iomanip>

int main()
{
    const size_t M = 10;
    const size_t N = 20;
    int a[M][N] = {};

    std::cout << "Enter number of rows: (less than " << M << "): ";

    size_t m;

    std::cin >> m;

    if (!(m < M) || (m == 0)) m = M - 1;

    std::cout << "Enter number of columns: (less than " << N << "): ";

    size_t n;

    std::cin >> n;

    if (!(n < N) || (n == 0)) n = N - 1;

    std::cout << std::endl;

    for (size_t i = 0; i < m; i++)
    {
        std::cout << "Enter " << n
            << " numbers for the row " << i << ": ";
        for (size_t j = 0; j < n; j++) std::cin >> a[i][j];
    }

    for (size_t j = 0; j < n; j++) a[m][j] = 1;

    for (size_t i = 0; i < m; i++)
    {
        for (size_t j = 0; j < n; j++)
        {
            a[i][n] += a[i][j];
            a[m][j] *= a[i][j];
        }
    }

    std::cout << std::endl;

    for (size_t i = 0; i < m + 1; i++)
    {
        for (size_t j = 0; j < n + 1; j++)
        {
            std::cout << std::setw(3) << a[i][j] << ' ';
        }
        std::cout << '\n';
    }

    std::cout << std::endl;
}

程序输出可能看起来像

Enter number of rows: (less than 10): 3
Enter number of columns: (less than 20): 3

Enter 3 numbers for the row 0: 1 2 3
Enter 3 numbers for the row 1: 4 5 6
Enter 3 numbers for the row 2: 7 8 9

  1   2   3   6
  4   5   6  15
  7   8   9  24
 28  80 162   0

所以你必须声明一个包含10行和20列的数组。用户应输入相应小于10和20的数组维度。为行和产品保留一行和一列。

最好用零初始化数组。

int a[M][N] = {};

在这种情况下,您不需要将最后一列设置为零,因为您必须将最后一行初始化为1。

就是这样。:)

答案 2 :(得分:0)

解决方案:在将数组全局化之后,将这种函数用于数组。

    void Adder(int row, int colum)
{
    for (int i = 0; i < row - 1; i++)
    {
        int temp = 0;
        for (int j = 0; j < colum - 1; j++)
        {
            temp += a[i][j]; // added all other than last one
        }
        a[i][j] = temp; // assigned to last one in row
    }

}

void Mul(int row, int colum)
{
    for (int i = 0; i < colum- 1; i++)
    {
        int temp = 1;
        for (int j = 0; j < row - 1; j++)
        {
            temp *= a[j][i]; // multiplied all element other than last one
        }
        a[j][i] = temp; // assigned to last one in column
    }

}