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

新手上路,请多包涵

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

输入一个二维数组 A (m,n) [m < 10, n < 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();
}

原文由 Ava Barbilla 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 711
2 个回答

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

给你

#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。

就这些。:)

原文由 Vlad from Moscow 发布,翻译遵循 CC BY-SA 3.0 许可协议

从声明开始:确保您的程序使用 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) 矩阵来完成任务。

原文由 Sergey Kalinichenko 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题