我目前正在开展一项任务,其中包含以下内容:
输入二维阵列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();
}
答案 0 :(得分: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)矩阵来完成任务。
答案 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
}
}