1、矩阵问题
题目描述
编写以下函数:
(1)在一个二维数组中形成以下形式的n阶矩阵:
1 1 1 1 1
2 1 1 1 1
3 2 1 1 1
4 3 2 1 1
5 4 3 2 1
(2)去掉靠边的元素,生成新的n-2阶矩阵;
(3)求生成的n阶矩阵主对角线上的元素之和;
(4)以方阵形式输出数组。
在main函数中调用以上函数进行测试。
输入
输入生成矩阵的阶数(n>=2)
输出
以方阵形式输出生成的n阶矩阵、去掉靠边的元素生成的新的n-2阶矩阵、以及生成的n阶矩阵主对角线上的元素之和,最后一行要回车
样例输入
5
样例输出
Generated matrix:
1 1 1 1 1
2 1 1 1 1
3 2 1 1 1
4 3 2 1 1
5 4 3 2 1
del the elements on the side:
1 1 1
2 1 1
3 2 1
The sum of the diagonal:5
————————————————
#include "iostream"
using namespace std;
void create(int *&app, int n);
void del(int *&app, int *&bpp, int n);
int maindiagonal(int *&app, int n);
void output(int *&app, int);
int main() {
int *ap = NULL, *bp = NULL, n;
cout << "输入矩阵的阶:";
cin >> n;
create(ap, n);
cout << "\n形成矩阵:\n";
output(ap, n);
cout << "去掉靠边元素生成的矩阵:\n";
del(ap, bp, n);
output(bp, n - 2);
cout << "a主对角线元素之和:" << maindiagonal(ap, n) << endl;
cout << "b主对角线元素之和:" << maindiagonal(bp, n-2) << endl;
}
//形成n阶矩阵函数
void create(int *&app, int n) {
app = new int[n * n];
int i, j, k = 0;
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
if (i <= j)
app[k] = 1;
else
app[k] = i - j + 1;
k++;
}
}
}
//去掉靠边元素生成n-2阶矩阵函数
void del(int *&app, int *&bpp, int n) {
int i, j, k = 0;
bpp = new int[(n - 2) * (n - 2)];
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
if (i && j && i) {
bpp[k] = *(app + i * n + j);
k++;
}
}
}
}
//求主对角线元素之和函数
int maindiagonal(int *&app, int n) {
int i, j, k = 0, sum = 0;
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++)
if (i == j)
sum += *(app + i * n + j);
}
return sum;
}
//以方阵的形式输出数组函数
void output(int *&app, int n) {
int i, j;
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++)
cout << *(app + i * n + j) << '\t';
cout << endl;
}
cout << endl;
}