【无标题】

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值