#include<iostream>
using namespace std; class Matrix
{
int row;//矩阵的行
int col;//矩阵的列
int **a;//保存二维数组的元素
public:
Matrix();//默认构造函数
Matrix(int r, int c);
Matrix(const Matrix &is);//拷贝构造函数
void Set();//输入矩阵元素
void Madd(const Matrix &is);//矩阵加
Matrix Mmul(const Matrix &is);//矩阵乘
void display();//显示矩阵元素
}; Matrix::Matrix(int r, int c)
{
row = r;
col = c;
a = (int **)malloc(sizeof(int*)*row);
for (int r = ; r < row; r++)
{
*(a + r) = (int*)malloc(sizeof(int)*col);
}
} Matrix::Matrix(const Matrix & is)
{//拷贝构造函数
row = is.row;
col = is.col;
a = new int*[row];
for (int i = ; i < row; i++)
{
a[i] = new int[col];
}
a = is.a;
} void Matrix::Set()
{
printf("请输入数:\n");
for (int i = ; i < row; i++)
for (int j = ; j < col; j++)
cin >> a[i][j];
} void Matrix::Madd(const Matrix & is)
{
if (row != is.row || col != is.col)//判断两矩阵是否符合相加条件
{
cout << "相加的矩阵必须行和列一致";
}
else
{
for (int i = ; i < row; i++)
{
for (int j = ; j < col; j++)
{
a[i][j] += is.a[i][j];
}
}
}
} Matrix Matrix::Mmul(const Matrix & is)
{
Matrix M3(this->row, is.col);
if (this->col != is.row)//判断是否符合相乘条件
{
cout << "不符合两矩阵相乘的条件";
}
else
{
for (int i = ; i < M3.row; i++)
{
for (int j = ; j < M3.col; j++)
{
M3.a[i][j] = ;
for (int n = ; n < is.row; n++)
{
M3.a[i][j] += this->a[i][n] * is.a[n][j];
}
}
}
}
return M3;
} void Matrix::display()
{//输出矩阵
for (int i = ; i < row; i++)
{
for (int j = ; j < col; j++)
{
cout << a[i][j] << " ";
}
cout << endl;
}
cout << endl;
} int main()
{
Matrix m1(, );
m1.Set();
m1.display();
Matrix m2(, );
m2.Set();
m2.display();
Matrix m3(, );
m3.Set();
m3.display();
cout << "m1+m2=" << endl;
m1.Madd(m2);
m1.display();
Matrix m4(m1.Mmul(m3));
cout << "m1*m3=" << endl;
m4.display();
system("pause");
return ;
}

运行结果:

定义一个Matrix类,实现矩阵的加法和乘法的更多相关文章

  1. 实验四 (1):定义一个形状类(Shape)方法:计算周长,计算面积

    (1)定义一个形状类(Shape)方法:计算周长,计算面积子类:矩形类(Rectangle) :额外的方法:differ() 计算长宽差圆形类(Circle)三角形类(Triangle)正方形类(Sq ...

  2. 定义一个Rectangle类,该类提供getLength和getWidth方法。

    import java.util.Comparator; /** * 定义一个Rectangle类,该类提供getLength和getWidth方法.利用图1-18中的findMax例程编写 * 一种 ...

  3. java定义一个Circle类,包含一个double型的radius属性代表圆的半径,一个findArea()方法返回圆的面积

    需求如下:(1)定义一个Circle类,包含一个double型的radius属性代表圆的半径,一个findArea()方法返回圆的面积. (2)定义一个类PassObject,在类中定义一个方法pri ...

  4. 定义一个Person类,其中包括:1.定义属性:姓名、年龄、民族作为成员变量。定义静态成员变量:人数2.定义构造方法:对成员变量进行初始化。3.定义多个方法:分别显示相应的属性值,例如getName(){System.out.print("名称="+name+";"); }4.定义一个方法“成长”:实现年龄的增加,每执行一次年龄增加1

    题目显示不全,完整题目描述: (1)定义一个Person类,其中包括:1.定义属性:姓名:年龄:民族作为成员变量.定义静态成员变量:人数2.定义构造方法:对成员变量进行初始化.3.定义多个方法:分别显 ...

  5. Java初学者作业——定义一个计算器类, 实现计算器类中加、 减、 乘、 除的运算方法, 每个方法能够接收2个参数。

    返回本章节 返回作业目录 需求说明: 定义一个计算器类, 实现计算器类中加. 减. 乘. 除的运算方法, 每个方法能够接收2个参数. 实现思路: 定义计算器类. 定义计算器类中加.减.乘.除的方法. ...

  6. 34 异常机制 异常体系结构 Java把异常当做对象来处理 并定义一个基类java.lang.Throwable作为所有异常的超类 Error Exception

    异常体系结构 概念 Java把异常当做对象来处理,并定义一个基类java.lang.Throwable作为所有异常的超类. 在Java API中已经定义了许多异常类,这些异常类分为两大类,错误Erro ...

  7. C++:如何正确的定义一个接口类

    C++中如何定义接口类?首先给接口类下了定义:接口类应该是只提供方法声明,而自身不提供方法定义的抽象类.接口类自身不能实例化,接口类的方法定义/实现只能由接口类的子类来完成. 而对于C++,其接口类一 ...

  8. 144、Java链表之定义一个Node类并输出

    01.代码如下: package TIANPAN; class Node { // 每一个链表实际上就是由多个节点组成的 private String data; // 要保存的数据 private ...

  9. 065、Java面向对象之定义一个Book类,在主类中使用Book类

    01.代码如下: package TIANPAN; class Book { // 定义一个新的类 String title; // 书的名字 double price; // 书的价格 public ...

随机推荐

  1. js基本语法与变量

    1.//声明变量,js是弱类型语言,变量类型声明示没有意义的.变量类型是随时可以变化的.var a = 1;      a = "haha";    a = false;2.注释与 ...

  2. 蓝桥杯练习系统— 算法训练 Beaver's Calculator

    问题描述 从万能词典来的聪明的海狸已经使我们惊讶了一次.他开发了一种新的计算器,他将此命名为"Beaver's Calculator 1.0".它非常特别,并且被计划使用在各种各样 ...

  3. [DeeplearningAI笔记]ML strategy_1_1正交化/单一数字评估指标

    机器学习策略 ML strategy 觉得有用的话,欢迎一起讨论相互学习~Follow Me 1.1 什么是ML策略 机器学习策略简介 情景模拟 假设你正在训练一个分类器,你的系统已经达到了90%准确 ...

  4. 安装puppeteer

    Puppeteer是一个node库,他提供了一组用来操纵Chrome的API,默认headless也就是无UI的chrome,也可以配置为有UI. 其实有点类似于PhantomJS,但Puppetee ...

  5. JAVA并发编程学习笔记------基础构建模块

    一.并发容器:ConcurrentHashMap:1.分段锁机制: 任意数量的读取线程可以并发的访问map,执行读取操作的线程和执行写入操作的线程可以并发的访问Map,并且一定数量的写入线程可以并发的 ...

  6. JAVA中的数据存储空间简述

    在 JAVA 中,有六个不同的地方可以存储数据: 1. 寄存器( register ): 最快的存储区,因为它位于不同于其他存储区——处理器内部.但是寄存器的数量极其有限,所以寄存器由编译器根据需求进 ...

  7. Linux下php+imagemagick支持webp格式的图片

    摘要 ImageMagick是一款功能强大的图片处理工具包,很多互联网应用中都会涉及到图片处理工作,比如切割.缩放.水印.格式转换等.ImageMagick就是一个理想的工具包. 安装基础依赖 先检查 ...

  8. Java I/O基础

    字节流和字符流的区别,字节流一次读取一个字节,字符流一次读取的是一个Unicode码,读取了2个字节. 可以以文本编辑器打开的可以使用字符流读取,否则用字符流读取可能就会出错.图像文件就需要用字节流读 ...

  9. 小甲鱼OD学习第13-14讲

    这次我们的任务是破解这个需要注册码的软件,如下图所示 我们搜索上图相应的提示字符串,看看能找到什么线索,我们搜索  invalid  code  试试看,如下图 然后下断点,如下图所示 我们来到断点处 ...

  10. 在linux内核中实现自己的系统调用

    如实现一个简单的打印:printk 1.cd linux-ok6410/kernel/ vim printk.cvoid sys_pk(){printk("<0>this is ...