矩阵计算——C++练习

高数/线性代数知识补充---矩阵、行列式、数学符号、内外积 高数知识补充笔记:矩阵计算、行列式计算、数学符号及读法&数学运算符号及含义等 向量与矩阵的内外积。 阅读详情

【问题描述】

矩阵是线性代数中的重要概念,应用领域非常广泛,在C/C++中,通常将矩阵定义为一个二维数组。

本问题中,将输入两个矩阵 A 和 B,实现对矩阵的数乘、矩阵加法、矩阵乘法以及行列式的计算。

如果对矩阵的算法不了解,请查阅相关资料。

【输入形式】

输入的第一行为两个正整数 M 和 N,分别表示矩阵 A 的行数和列数;

接下来的 M 行,每行 N 个用空格分隔的整数,表示矩阵 A 的元素值;

接下来的一行,为一个整数 x, 用于对矩阵 A 进行数乘;

接下来的一行为两个正整数 K 和 L, 分别表示矩阵 B 的行数和列数;

接下来的 K 行,每行为 L 个用空格分隔的整数,表示矩阵 B 的元素值。

【输出形式】

输出的第一部分为 M 行,每行为 N 个用空格分隔的整数,表示 x 数乘 A 的结果;

接下来(如果有),如果 A 和 B 可以相加,则输出 M 行,每行为 N 个用空格分隔的整数,表示矩阵 A+B 的结果;

接下来(如果有),如果 A 和 B 可以相乘,则输出 M 行,每行为 L 个用空格分隔的整数,表示矩阵 A×B 的结果;

接下来一行(如果有),如果 A 的行列式存在,则输出一个整数,表示 A 的行列式的值;

接下来一行(如果有),如果 B 的行列式存在,则输出一个整数,表示 B 的行列式的值。

【样例输入1】

2 2
29 51
7 84
9
2 9
1 1 4 8 5 7 4 5 9
2 5 5 1 6 1 4 8 6
【样例输出1】

261 459
63 756
131 284 371 283 451 254 320 553 567
175 427 448 140 539 133 364 707 567
2079

#include  <iostream>
#include  <cstdlib>
using  namespace  std;
class  matrix
{
private:
        int  rows,  cols;
        int  **p;
public:
        matrix();
        matrix(int  &M,  int  &N);
        matrix(matrix  &A,  int  &&m,  int  &n);//“&&”传右值,也就是传一个常数,我觉得这里根本没必要弄这个,纯粹是为了用&&而编的
        ~matrix();

        matrix  multi(int  x);      //  数乘
        int  det();                      //  计算行列式
        void  out();        //输出矩阵
        void  input();

        matrix  operator+(matrix  &another);  //重载加法运算实现矩阵相加
        matrix  operator*(matrix  &another);  //重载乘法运算实现矩阵相乘
};
matrix::matrix(int  &M,  int  &N)
{
        rows=M,  cols=N;
        p=new  int*[rows];
        for(int  i=0;i<M;i++)
        {
                p[i]=new  int[cols];
        }
}

matrix::matrix(matrix  &A,  int  &&m,  int  &n)      //从矩阵A中删除第m行第n列后得到新的矩阵
{
    rows = A.rows - 1;//新的对象中被删除了一行一列所以要减掉
    cols = A.cols - 1;
    p = new int *[rows];//每一个矩阵都要有自己的数组空间,所以这里要再次new出空间来
    for (int i = 0; i < rows; i++){
        p[i] = new int[cols];
    }
    for (int i = 0; i < rows;i++){//因为m为0,所以每次去的都是第一行的第n列,所以只需要考虑赋值的数组在n列前还是在n列后
        for (int j = 0; j < cols;j++){
            if(j>=n)
            {
                p[i][j] = A.p[i + 1][j + 1];
            }
            else
            {
                p[i][j] = A.p[i + 1][j];
            }
        }
    }
}

matrix::~matrix()
{
        for(int  i=0;  i<rows;  i++)
                delete[]  p[i];//删掉创建出来的空间,可以想象成先删列后删行

        delete[]  p;
}

matrix  matrix::multi(int  x)      //  数乘
{
        matrix  tmp(rows,  cols);//比较简单,不用解释
        for (int i = 0; i < rows;i++){
            for (int j = 0; j < cols; j++)
            {
                tmp.p[i][j] = p[i][j] * x;
            }
        }

            return tmp;
}

void  matrix::out()        //输出矩阵
{
          /*  逐行输出,数据间用空格分隔  */
          for (int i = 0; i < rows;i++){//同上
              for (int j = 0; j < cols;j++){
                  cout << p[i][j] << " ";
              }
              cout << "\n";
          }
}

void  matrix::input()
{
        for(int  i=0;  i<rows;  i++)
                for(int  j=0;  j<cols;  j++)
                        cin>>p[i][j];

}

matrix  matrix::operator+(matrix  &another)  //重载加法运算实现矩阵相加
{
        matrix  tmp(rows,  cols);
        /*  矩阵对应位置元素相加  */
        for (int i = 0; i < rows;i++){//同上
            for (int j = 0; j < cols;j++){
                tmp.p[i][j] = p[i][j] + another.p[i][j];
            }
        }

            return tmp;
}

matrix  matrix::operator*(matrix  &another)    //重载乘法运算实现矩阵相乘
{
        matrix  tmp(rows,  another.cols);
        for(int  i=0;  i<rows;  i++)
        {
                for(int  j=0;  j<another.cols;  j++)
                {
                      /*  计算A矩阵的第i行与B矩阵的第j列元素对应相乘后之和,作为新矩阵的第i行第j列元素的值  */
                      int sum = 0;
                      for (int k = 0; k < cols;k++){//只需了解矩阵乘法即可
                          sum += p[i][k] * another.p[k][j];
                      }
                      tmp.p[i][j] = sum;
                }
        }
        return  tmp;
}

int  matrix::det()//拉普拉斯展开定理了解一下,大数3 P18页
{
        if  (rows==1)
                return  p[0][0];
        else
        {
                int  result=0,  flag;
                for(int  i=0;  i<cols;  i++)
                {
                        flag=(i%2)?-1:1;//都是从第一行展开的,所以只需要判断是第几列来取正负号
                        matrix  tmp(*this,  0,  i);//求余子式
                        result=result+flag*p[0][i]*tmp.det();        //  使用代数余子式求行列式的值,  递归
                }
                return  result;
        }
}
int  main()
{
        int  M,N;

        //  A矩阵的行和列
        cin>>M>>N;

        matrix  mA(M,  N);        //生成A矩阵

        //  输入矩阵值

        mA.input();

        //  输入数乘值

        int  x;
        cin>>x;

        matrix  mm1=mA.multi(x);

        mm1.out();

        //B矩阵的行和列
        int  K,  L;
        cin>>K>>L;

        matrix  mB(K,  L);    //生成B矩阵
        mB.input();

        /*  求矩阵A和矩阵B的和  */

        if  (M==K  &&  N==L)
        {
                matrix  mm2=mA+mB;
                mm2.out();
        }

      /*  求矩阵A和矩阵B的乘积矩阵  */
        if  (N==K)
        {
                matrix  mm3=mA*mB;
                mm3.out();
        }

        /*  矩阵A的行列式的值  */
        if  (M==N)
                cout<<mA.det()<<endl;

        if  (K==L)
                cout<<mB.det()<<endl;

        return  0;
}
矩阵的常用运算法则 文章目录矩阵的概念矩阵的加法矩阵的乘法矩阵的转置矩阵的逆伴随矩阵矩阵的行列式矩阵的导数 矩阵的概念 矩阵的加法 矩阵的乘法 矩阵的转置 矩阵的逆 伴随矩阵 矩阵的行列式 矩阵的导数 参考资料 [1] 《工程数学线性代数》(同济大学第6版),第2章 ... 阅读详情

相关推荐

学习笔记之MOOC《计算机程序设计C++》第4周基础练习

第4周基础练习 依照学术诚信条款,我保证此作业是本人独立完成的。 温馨提示: 1.本次作业属于Online Judge题目,提交后由系统即时判分。 2.学生可以在作业截止时间之前不限次数提交答案,系统将取其中的最高分作为最终成绩。 1数组元素反序输出(10分) 题目内容: 编写程序,先输入n,再输入n个整数,按相反的顺序输出这n个整数。如输入5个整数:1 2 3 4 5,输出为:5 4 3 2 1...

qq_35076612的博客 3437

矩阵的基本运算

矩阵的运算举例一、矩阵加法二、矩阵减法三、矩阵乘法四、矩阵转置五、逆矩阵六、对称矩阵七、矩阵性质总结 举例 a=[abcd](1) a= \left[ \begin{matrix} a & b \\ c & d \\ \end{matrix} \right] \tag{1} a=[ac​bd​](1) b=[a1a2b1b2](2) b= \lef

有的话没说出来之前,你是他的主人,一旦说出来你就成了他的奴隶||想要干好事,别太把自己当人,别把别人太不当人||认识这个人就是开了一扇窗户,就能看到不一样的东西,听到不一样的声音,能让你思考、觉悟,这已经够了 29万+

线性代数【5】矩阵和矩阵运算

1矩阵和行列式区别: 1.1 加减法 2 矩阵乘除法: 2.1 矩阵性质: 2.2 矩阵的重要概念 2.3 矩阵的运算性质 初等矩阵: 矩阵的逆: 参考: 爱奇艺视频 ...

山云的专栏 3581

矩阵如何运算?——线性代数

矩阵

课题分离 2万+

硬件基础——mos管

文章目录前言一、寄生参数二、使用步骤1.引入库2.读入数据总结 前言 MOS管设计重点 一、寄生参数 1.寄生电容 mos管有寄生电容Cgs,此电容大小一般为pF级别,一般规格书可以查到。 使用时,要特别注意GS管教的寄生电容Cgs,控制MOS管的导通与截止,本质上是控制Cgs电容的充放电。(最好要加限流) 二、使用步骤 1.引入库 代码如下(示例): import numpy as np import pandas as pd import matplotlib.pyplot as plt imp

Malqaq的博客 6601

【语音识别】基于MFCC特征实现说话人语音识别matlab源码

1 模型 采用能够反映人对语音的感知特性的Mel频率倒谱系数(MFCC)作为特征参数,以及为避免时间规整问题采用矢量量化技术开发的说话人识别系统.MFCC主要的是模拟人耳的听觉过程,相对于其它参数它对语音波形的变化不敏感,更加稳定,系统取得很好的识别结果,实验表明系统训练和识别的计算量和存储量都比较低. 2 部分代码 functionvarargout=Main(varargin) % MAIN M-file for Main.fig % MAIN, by itself...

qq_59747472的博客 850

蓝桥杯题目练习(矩阵乘法)

基础练习VIP 矩阵乘法 题目描述 给定一个N阶矩阵A,输出A的M次幂(M是非负整数) 例如: A = 1 2 3 4 A的2次幂 7 10 15 22 输入 第一行是一个正整数N、M(1< =N< =30, 0< =M< =5),表示矩阵A的阶数和要求的幂数 接下来N行,每行N个绝对值不超过10的非负整数,描述矩阵A的值 输出 输出共N行,每行N个整数,表示A...

122&&113的博客 641

基于混合智能框架的景区边界范围预测与补全系统

摘要 本文提出一种混合智能框架,结合随机森林模型和GIS规则约束,解决景区边界缺失问题。系统基于Python和ArcGIS平台,利用多源地理空间数据训练随机森林分类器预测景区范围,并集成地形、水文、道路等GIS规则进行优化。实验结果表明,该方法能有效预测15000个景区的边界,精度优于单一模型。创新点在于: 1)数据驱动与知识驱动相结合的混合智能范式; 2)面向全国尺度的大规模边界补全; 3)提供完整的Python+ArcGIS实现方案。该系统为景区精细化管理提供了技术支撑,具有实用价值。

huanghm88的专栏 284

C语言/C++练习题

C语言/C++基础练习题,冒泡排序、一维数组、二维数组、字符串、结构体等。

qq_43884946的博客 1911

CANoe之I/O功能采集电压

在进入ECU自动化测试中,有时会用到采集ECU电压,CANoe除了可以仿真、监听CAN、ETH、LIN等网络报文外,部分设备(如VN5650、VN1630等)上还有一个I/O口,这个I/O口就可以用来满足我们自动化测试中采集电压的需求。CANoe上的I/O功能用处还是特别大,比如网络管理测试、相关诊断都会用到。

测试领域技术分享 4830

OpenClaw插件配置错误修复完全指南

插件文件名是插件目录结构正确package.json配置正确OpenClaw的插件系统还在快速迭代,偶尔会遇到这种配置问题。看错误信息检查配置文件检查实际文件对比差异修复问题大部分问题都能解决。查看官方文档:https://openclaw.ai/docs提Issue:https://github.com/openclaw/openclaw/issues加入Discord社区求助快速修复命令汇总。

Maynor的博客 4096

蓝桥杯试题 基础练习 矩阵乘法

蓝桥杯试题 基础练习 矩阵乘法 提交此题 资源限制 时间限制:1.0s 内存限制:512.0MB 问题描述   给定一个N阶矩阵A,输出A的M次幂(M是非负整数)   例如:   A =   1 2   3 4   A的2次幂   7 10   15 22 输入格式   第一行是一个正整数N、M(1<=N<=30, 0<=M<=5),表示矩阵A的阶数和要求的幂数   接...

weixin_43850639的博客 846

2025华为杯第二十二届中国研究生数学建模竞赛C题:围岩裂隙精准识别与三维模型重构 - 完整解题分析+完整MATLAB源码!(下篇)

🎓 本文收录于 《滚雪球学数学建模》专栏,本专栏专注于从零基础出发,带你循序渐进掌握数学建模的核心方法与思维路径。通过“滚雪球式”学习法,从最简单的生活化案例到经典建模工具,再到省赛、国赛真题实战演练,逐步积累知识与技能,帮助你搭建完整的建模体系。无论你是刚接触建模的新生,还是希望提升科研与竞赛能力的学者与工程师,本专栏都将为你提供一条清晰、高效、可实操的建模成长路线,助力你快速进阶,突破难点,迈向数学建模竞赛与实际应用的更高峰 🚀!

**My Coding Family** 1620

蓝桥杯 基础练习 矩阵乘法c++

试题 基础练习 矩阵乘法 题目要求 资源限制 时间限制:1.0s 内存限制:512.0MB 问题描述   给定一个N阶矩阵A,输出A的M次幂(M是非负整数)   例如:   A =   1 2   3 4   A的2次幂   7 10   15 22    输入格式   第一行是一个正整数N、M(1<=N<=30, 0<=M<=5),表示矩阵A的阶数和要求的幂数   接下来N行,每行N个绝对值不超过10的非负整数,描述矩阵A的值    输出格式   输出共N行,每行N个整数,表示

m0_50631706的博客 218

【嘉立创EDA】从AD21导入pcb边界到嘉立创EDA专业版

有许多前期工程由AD进行完成,在后续update的过程中,由于开模等原因限制,部分pcb外型需要继续沿用,本文将此过程记录,以供有需要的读者参考。

l64481000的博客 4523

2020年大连理工大学《计算机控制技术》期末试卷

2020年大连理工大学《计算机控制技术》期末试卷 2020年大连理工大学《计算机控制技术》期末试卷 2020年大连理工大学《计算机控制技术》期末试卷 2020年大连理工大学《计算机控制技术》期末试卷 ...

无名何许人的博客 650

C++基础编程DAY18

45、写一函数,在一数组里查找某个值 //写一函数,在一数组里查找某个值 #include<iostream> #include<stdlib.h> using namespace std; int Search(int a[], int n, int key) { int i; for(i=0; i<n; i++) { if(a[i]==key) ...

茄子爱跑步的博客 660

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

[蓝桥杯][基础练习VIP]矩阵乘法

问题 1472: [蓝桥杯][基础练习VIP]矩阵乘法 时间限制: 1Sec 内存限制: 128MB 提交: 1598 解决: 485 题目描述 给定一个N阶矩阵A,输出A的M次幂(M是非负整数) 例如: A = 1 2 3 4 A的2次幂 7 10 15 22 输入 第一行是一个正整数N、M(1< =N< =30, 0< =M< =5),表示矩阵A的阶数和要求...

qq_42732912的博客 213

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

蓝桥杯BASIC-17 基础练习 矩阵乘法

蓝桥杯BASIC-17 基础练习 矩阵乘法 问题描述   给定一个N阶矩阵A,输出A的M次幂(M是非负整数)   例如:   A =   1 2   3 4   A的2次幂   7 10   15 22 输入格式   第一行是一个正整数N、M(1<=N<=30, 0<=M<=5),表示矩阵A的阶数和要求的幂数   接下来N行,每行N个绝对值不超过10的非负整数,描述矩阵A的...

qq_43541423的博客 239

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

基础练习 矩阵乘法

题目链接 蓝桥杯---基础练习 题解 问题描述   给定一个N阶矩阵A,输出A的M次幂(M是非负整数)   例如:   A =   1 2   3 4   A的2次幂   7 10   15 22 注意:幂次为0的特殊情况。 #include &lt;iostream&gt; using namespace std; long long a[31][31...

Nicolas的博客 692

50道C/C++编程练习题 复习必备(41-50)

C/C++编程练习题 (41-50)41. 写一个字符串拷贝函数42. 写一个字符串比较函数43. 写一个字符串连接函数44. 写一个求字符串长度函数45.写一函数,在一数组里查找某个值。46. 编一程序,求两个矩阵的乘积47. 计算某日是某年的第几天 使用C/C++两种语言完成50道题目,体会两种语言之间的不同。编译环境都是在VS2019,完成时间2020.06.21-2020.06.22 。由于C++ 对C的兼容性,部分main()函数没有写return 0 也可以执行成功,但是不提倡,最好加上,否则其

qq_40575024的博客 4504

 华为机试矩阵乘法

华为机试矩阵乘法 校招时部分企业笔试将禁止编程题跳出页面,为提前适应,练习时请使用在线自测,而非本地IDE。 题目描述 如果A是个x行y列的矩阵,B是个y行z列的矩阵,把A和B相乘,其结果将是另一个x行z列的矩阵C。这个矩阵的每个元素是由下面的公式决定的 矩阵的大小不超过100*100 输入描述: 输入包含多组数据,每组数据包含: 第一行包含一个正整数x,代表第一个矩阵的行数 第二行包含一个正整数y,代表第一个矩阵的列数和第二个矩阵的行数 第三行包含一个正整数z,代表第二个矩阵的列.

xinlongkun的博客 555

c++基础代码练习考试必备(冒泡,求3*3矩阵对角线元素的积,求素数,密码验证)...

1.求1-100之间的素数 int j; int i; for (i=2; i <= 100; i++) { for (j=2; j <= i; j++) { if (i%j == 0) { break; } } ...

aoqian8439的博客 648

CPP第三版课本课后题

2.8将“China”译成密码,密码规律是:用原来的字母后面第4个字母代替原来的字母。 #include<iostream> using namespace std; int main() { char c1='C',c2='h',c3='i',c4='n',c5='a'; cout<<(c1+=4)<<(c2+=4)<<(c3+=4)<<(c4+=4)<<(c5+=4)<<endl; return 0; }.

weixin_54955598的博客 1699

C++个人练习题

数据来源于校友提供,转载需注明 常见练习题 1. ★找出二维数组中的最大值 //找出二维数组中的最大值。 #include<iostream> using namespace std; int main() { int arry[3][5] = { {25,15,6,10,3}, {32,36,85,9,4,},

qq_42283861的博客 836

C++面向对象练习

马上要期末了,复习的同时写一篇博客也巩固一下基础知识,这些练习虽然简单,但是一不小心还是会出错,比如在练习1中重载输出流是将<<写成>>,练习4中忘记预先分配数组内存,在练习7中忘记给类加public,所以就算是再简单的项目,再简单的题也要注意好细节,不然调试半天才发现竟然是自己的粗心导致的;另外,你如果感兴趣的话可以关注我,看看我其他的博客对你有没有帮助,我后续也会持续产出更高质量的博客。最后,希望这篇博客能帮助到你。

2401_88685396的博客 928
上一篇: 约瑟夫问题——学C练针
下一篇: 3D山脉——java实现山脉模型
南懿烨曦
博客等级 码龄6年 108粉丝 35原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值