我目前正在处理一项任务,内容如下:
输入二维数组 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];
您还需要声明m
和n
,让最终用户输入它们,并验证它们是否在可接受的范围内:
int m, n;
cin >> m >> n;
... // Do the validation
现在你可以根据m
和n
重写循环,而不是在整个代码中使用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
}
}