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



我目前正在处理一项任务,内容如下:

输入二维数组 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();
}

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

给你

#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 初始化它有关。

仅此而已.:)

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

解决方案:在全局化后对数组使用这种函数。

    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
    }
}

最新更新