栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++ 生成任意矩阵并进行乘法运算

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++ 生成任意矩阵并进行乘法运算

 实现了矩阵的生成、乘法运算。

 1.完整代码如下:
#include 
#include 
#include 
#include 
using namespace std;
struct Matrix
{
	vector> M;
	size_t Rows;
	size_t Columns;
	Matrix(size_t r = 0,size_t c=0,int rv = 1)
	{
		Rows = r;
		Columns = c;
		for (size_t i = 0; i < r; i++)
		{
			vector t;
			for (size_t j = 0; j < c; j++)
			{	

				if (rv > 1)
				{
					t.push_back(rand() % rv);
				}
				t.push_back(rv);
			}
			M.push_back(t);
		}
	}

	bool isNull()
	{
		return Rows == 0 || Columns == 0;
	}

	void printMatrix(const char* msg = "")
	{
		if (strlen(msg)>0)
		{
			printf("%sn", msg);
		}
		for (size_t i = 0; i < Rows; i++)
		{
			for (size_t j = 0; j < Columns; j++)
				printf("%d,",M[i][j]);
			printf("n");
		}
	}
};
// A*B
Matrix mulMatrix(Matrix a, Matrix b)
{
	if (a.isNull() || b.isNull())
	{
		printf("空矩阵n");
		// 此处直接返回一个空的Matrix,也就是0行0列的矩阵
		return	Matrix();
	}
	if (a.Columns != b.Rows)
	{
		printf("不符合乘法要求的矩阵");
		// 此处直接返回一个空的Matrix,也就是0行0列的矩阵
		return	Matrix();
	}

	//如果符合要求,构建一个结果矩阵
	Matrix c(a.Rows, b.Columns);

	for (size_t i = 0; i < a.Rows; i++)
	{
		for (size_t j = 0; j < b.Columns; j++)
		{
			//在进行默认构建时,所有矩阵中的数据全为1,所以此处需要进行置0
			c.M[i][j] = 0;
			for (size_t k = 0; k < a.Columns; k++)
			{
				c.M[i][j] += a.M[i][k] * b.M[k][j];
			}
		}
	}
	return c;
}

int main(int argc, char **argv)
{
	std::cout << "开始执行矩阵运算:(输入0退出程序)" << endl;
	while (true)
	{
		std::cout << "请输入矩阵的阶数:" << endl;

		int len = 0;

		cin >> len;

		cout << "您输入的矩阵阶数为:" << len << endl;

		if (len < 1)
		{
			cout << "无效的阶数:" << len << endl;
			return 0;
		}

		Matrix Ma(len, len, 10);
		//Ma.printMatrix("随机生成的方阵Ma如下:");

		Matrix Mb(len, 1, 10);
		//Mb.printMatrix("随机生成的列向量Mb如下:");

		auto t1 = chrono::steady_clock::now();
		Matrix Mc = mulMatrix(Ma, Mb);

		auto t2 = chrono::steady_clock::now();

		double timeSpan = chrono::duration(t2 - t1).count();

		printf("总用时为:%f ms", timeSpan);

		//Mc.printMatrix("----------Ma*Mb的结果如下:----------");
	}
	
	
	return 0;

}
2.后期的扩展方向:
  1. 将结构体封装为一个类,
  2. 编写其他的矩阵操作函数
  3. 运算符的重构

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/925495.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号