首页 > 其他分享 >矩阵的基本运算

矩阵的基本运算

时间:2023-07-31 14:14:46浏览次数:45  
标签:基本 运算 int 矩阵 数组 列数 字符串 matrix

题目:矩阵的基本运算

1、矩阵创建 2、矩阵相加 3、矩阵相减 4、矩阵相乘 5、数字乘矩阵 6、矩阵上叠加 7、矩阵左右叠加 8、矩阵转置 9、矩阵旋转 10、矩阵求逆 11、矩阵输出

运用知识

1.动态内存分配是一种在程序运行时动态地分配内存空间的机制。与静态内存分配相比,动态内存分配允许在程序执行期间根据需要分配和释放内存。
在C++中,使用 new delete 运算符来进行动态内存分配和释放。以下是一些关键概念和操作:
动态内存分配:使用 new 运算符来分配内存空间。例如,int* ptr = new int; 将分配一个整数大小的内存空间,并将指针 ptr 指向该内存空间。
动态数组分配:使用 new 运算符来分配数组的内存空间。例如,int* arr = new int[5]; 将分配一个包含 5 个整数的数组,并将指针 arr 指向该数组的首地址。
2.stoi函数,用于将字符串转换为整数类型,将一个表示整数的字符串转换为对应的整数值,并返回该整数值。stoi函数提供了一种方便的方法来处理字符串和整数之间的转换。

题目分析

1.创建矩阵:创建一个createMatrix函数,接受一个二维字符串数组matrix、行数r和列数c的参数,创建一个指定大小的二维矩阵。
在函数内部,使用一个for循环来遍历每一行。在循环中,使用new关键字为行分配一个长度为c的字符串数组,然后将其赋值matrix[i],将新创建的字符串数组赋值给二维数组的当前行。

2.矩阵相加(减):创建一个addMatrix 函数,接受两个二维字符串数组matrix1 matrix2,以及行数 r 和列数 c 的参数,将两个二维字符串数组中的对应元素进行相加(减),并将结果打印输出;使用了嵌套的循环来遍历每个元素,并使用 stoi 函数将字符串转换为整数进行相加。在每次循环中,将 matrix1[i][j]matrix2[i][j]转换为整数类型,分别存储在 num1 和 num2 中。然后,将它们相加(减)并输出结果。

3.矩阵相乘:创建一个mulMatrix 函数,接受两个二维字符串数组matrix1 matrix2,以及行数 r1 、r2和列数 c1 、c2的参数函数使用三个嵌套的循环来遍历矩阵的元素。

4.数字乘矩阵:创建一个multiplyNumber函数,接受一个二维字符串数组matrix、一个整数num、以及行数r和列数c作为参数,将matrix中的每个元素转换为整数,然后与num相乘,使用两个嵌套的for循环来遍历matrix中的每个元素。

5.矩阵上叠加:创建一个stackTop函数,接受两个二维字符串数组matrix1和matrix2,以及它们各自的行数和列数作为参数。用if语句判断matrix1和matrix2的列数是否相等,如果不相等,则打印一条错误信息并返回。然后,函数两个嵌套的for循环来遍历matrix1的顶部。

6.矩阵左右叠加:创建一个stackLeft函数,接受两个二维字符串数组matrix1和matrix2,以及它们各自的行数和列数作为参数。用if语句判断matrix1和matrix2的行数是否相等,如果不相等,则打印一条错误信息并返回。然后,使用三个嵌套的for循环数组。

7.矩阵转置:创建一个transposeMatrix函数,它接受一个二维字符串数组matrix,和矩阵的行数r和列数c作为参数。使用两个嵌套的for循环来遍历转置后的矩阵。

8.矩阵旋转:创建一个rotateMatrix,接受一个二维字符串数组matrix,以及矩阵的行数r和列数c作为参数。创建一个新的二维字符串数组result,用于存储旋转后的矩阵。result的行数为原矩阵的列数,列数为原矩阵的行数。然后,使用两个嵌套的for循环来遍历原矩阵,在每次循环中,它将原矩阵中的元素按照旋转规则赋值给result数组。
9.矩阵求逆:创建一个inverseMatrix,接受一个二维字符串数组matrix,以及矩阵的行数r和列数c作为参数。函数使用两个嵌套的for循环来遍历矩阵。

10.矩阵输出:创建一个printMatrix函数,接受一个二维字符串数组matrix,以及矩阵的行数r和列数c作为参数。函数使用两个嵌套的for循环来遍历矩阵。外层循环控制行数,内层循环控制列数。

代码如下:

#include <iostream>
#include<string>
#include<sstream>
using namespace std;

//创建矩阵
//使用 new 运算符在堆上动态分配内存空间来创建二维数组
void creatematrix(string ** matrix, int r, int c) {
	for (int i = 0; i < r; i++) {
		matrix[i] = new string[c]; 
	}
}

//矩阵相加
void addMatrix(string**matrix1, string**matrix2, int r, int c) {
	for (int i = 0; i < r; i++) {
		for (int j = 0; j < c; j++) {
			int num1 = stoi(matrix1[i][j]);
			int num2 = stoi(matrix2[i][j]);
			cout << num1 + num2 << " ";
		}
		cout << endl;
	}
}

//矩阵相减
void subMatrix(string**matrix1, string**matrix2, int r, int c) {
	for (int i = 0; i < r; i++) {
		for (int j = 0; j < c; j++) {
			int num1 = stoi(matrix1[i][j]);
			int num2 = stoi(matrix2[i][j]);
			cout << num1 - num2 << " ";
		}
		cout << endl;
	}
}

//矩阵相乘
void mulMatrix(string**matrix1, string**matrix2, int r1, int c1, int c2) {
	for (int i = 0; i < r1; i++) {
		for (int j = 0; j < c2; j++) {
			int sum = 0;
			for (int k = 0; k < c1; k++) {
				int num1 = stoi(matrix1[i][k]);
				int num2 = stoi(matrix2[k][j]);
				sum += num1 * num2;
			}
			cout << sum << " ";
		}
		cout << endl;
	}
}

//数字乘矩阵
void mulNumber(string**matrix, int num, int r, int c) {
	for (int i = 0; i < r; i++) {
		for (int j = 0; j < c; j++) {
			int number = stoi(matrix[i][j]);
			cout << number * num << " ";
		}
		cout << endl;
	}
}

//矩阵上下叠加
void stackTop(string**matrix1, string**matrix2, int r1, int c1, int r2, int c2) {
	if (c1 != c2) {
		cout << "无法叠加" << endl;
		return;
	}
	for (int i = 0; i < r1; i++) {
		for (int j = 0; j < c1; j++) {
			cout << matrix1[i][j] << " ";
		}
		cout << endl;
	}
	for (int i = 0; i < r2; i++) {
		for (int j = 0; j < c2; j++) {
			cout << matrix2[i][j] << " ";
		}
		cout << endl;
	}
}

void stackleft(string**matrix1, string**matrix2, int r1, int r2, int c1, int c2) {
	if (r1 != r2) {
		cout << "无法叠加" << endl;
		return;
	}
	for (int i = 0; i < r1; i++) {
		for (int j = 0; j < c1; j++) {
			cout << matrix1[i][j] << " ";
		}
		for (int j = 0; j < c2; j++) {
			cout << matrix2[i][j] << " ";
		}
		cout << endl;
	}
}


//矩阵转置
void transposeMatrix(string** matrix, int r, int c) {
	for (int i = 0; i < c; i++) {
		for (int j = 0; j < r; j++) {
			cout << matrix[j][i] << " ";
		}
		cout << endl;
	}
}

//矩阵旋转
void rotateMatrix(string**matrix, int r, int c) {
	string**result = new string*[c];
	for (int i = 0; i < c; i++) {
		result[i] = new string[r];
	}
	for (int i = 0; i < r; i++) {
		for (int j = 0; j < c; j++) {
			result[j][r - i - 1] = matrix[i][j];
		}
    }
	for (int i = 0; i < c; i++) {
		for (int j = 0; j < r; j++) {
			cout << result[i][j] << " ";
		}
		cout << endl;
	}
	for (int i = 0; i < c; i++) {
		delete[]result[i];
	}
	delete[]result;
 }


//矩阵求逆
void inverseMatrix(string**matrix, int r, int c) {
	for (int i = 0; i < r; i++) {
		for (int j = 0; j < c; j++) {
			cout << matrix[i][j] << " ";
		}
		cout << endl;
	}
}

//矩阵输出
void printMatrix(string**matrix, int r, int c) {
	for (int i = 0; i < r; i++) {
		for (int j = 0; j < c; j++) {
			cout << matrix[i][j] << " ";
		}
		cout << endl;
	}
}

int main() {
	int r1 = 3;
	int r2 = 3;
	int c1 = 3;
	int c2 = 3;
	string**matrix1 = new string*[r1];
	string**matrix2 = new string*[r2];
	creatematrix(matrix1, r1, c1);
	creatematrix(matrix2, r2, c2);

	//初始化矩阵
	for (int i = 0; i < r1; i++) {
		for (int j = 0; j < c1; j++) {
			matrix1[i][j] = to_string(i + j);
			matrix2[i][j] = to_string(i * j);
		}
	}

	//矩阵相加
	cout << " 矩阵相加结果:" << endl;
	addMatrix(matrix1, matrix2, r1, c1);

	//矩阵相减
	cout << "矩阵相减结果:" << endl;
	subMatrix(matrix1, matrix2, r1, c1);

	//矩阵相乘
	cout << "矩阵相乘结果:" << endl;
	mulMatrix(matrix1, matrix2, r1, c1, c2);

	//数字乘矩阵
	cout << "数字乘矩阵结果:" << endl;
	mulNumber(matrix1,2,r1, c1);

	//矩阵上叠加
	cout << "矩阵上叠加:" << endl;
	stackTop(matrix1, matrix2, r1, r2, c1, c2);

	//矩阵左右叠加
	cout << "矩阵左右叠加:" << endl;
	stackTop(matrix1, matrix2, r1, r2, c1, c2);

	// 矩阵转置示例
	cout << "矩阵转置结果:" << endl;
	transposeMatrix(matrix1, r1, c1);

	// 矩阵旋转示例
	cout << "矩阵旋转结果:" << endl;
	rotateMatrix(matrix1, r1, c1);

	// 矩阵求逆示例
	cout << "矩阵求逆结果:" << endl;
	inverseMatrix(matrix1, r1, c1);

	// 矩阵输出示例
	cout << "矩阵输出结果:" << endl;
	printMatrix(matrix1, r1, c1);

	// 释放动态分配的二维数组内存
	for (int i = 0; i < r1; i++) {
		delete[] matrix1[i];
	}
	delete[] matrix1;
	for (int i = 0; i < r2; i++) {
		delete[] matrix2[i];
	}
	delete[] matrix2;
	return 0;
}

运行结果如下:

标签:基本,运算,int,矩阵,数组,列数,字符串,matrix
From: https://www.cnblogs.com/Qin-Rong-2004-12-/p/17593181.html

相关文章

  • java中取余运算符
    Java中取余运算符在Java中,取余运算符(%)用于计算两个数相除之后的余数。它可以用于整数和浮点数类型的操作数,并且取余运算符的使用和结果与数学中的模运算相同。本文将详细介绍Java中取余运算符的用法,并给出一些示例代码来帮助理解。取余运算符的使用取余运算符用于计算两个数相除......
  • mysql加减运算
    MySQL加减运算实现步骤为了帮助刚入行的小白实现MySQL的加减运算,我将按照以下步骤来进行说明。首先,我们需要创建一个MySQL数据库,并在数据库中创建一个用于存储加减运算结果的表。然后,我们需要编写SQL语句来进行加减运算,并将结果存储到表中。最后,我们可以通过查询表的方式来验证加......
  • python 矩阵自我复制
    Python矩阵自我复制实现指南作为一名经验丰富的开发者,我将带领你学习如何实现"Python矩阵自我复制"。在本文中,我们将使用Python编程语言来实现这个功能。首先,让我们来看一下整个实现的流程。实现流程下面是实现"Python矩阵自我复制"的步骤:步骤描述1创建一个矩阵2......
  • python 矩阵 第一列
    如何实现Python矩阵第一列作为一名经验丰富的开发者,我很乐意教会刚入行的小白如何实现Python矩阵的第一列。下面是详细的步骤和相应的代码示例。步骤步骤一:创建一个矩阵首先,我们需要创建一个矩阵。在Python中,我们可以使用列表(List)来表示矩阵。下面是一个示例矩阵:matrix......
  • 矩阵的基本运算
    矩阵的基本运算1、矩阵创建2、矩阵相加3、矩阵相减4、矩阵相乘5、数字乘矩阵6、矩阵上叠加7、矩阵左右叠加8、矩阵转置9、矩阵旋转10、矩阵求逆11、矩阵输出主要运用的知识点:掌握二维指针的动态分配内存下面举一个简单的例子来理解二维指针的动态分配内存#include......
  • C++ 核心指南之 C++ P.哲学/基本理念(上)
    C++核心指南(C++CoreGuidelines)是由BjarneStroustrup、HerbSutter等顶尖C+专家创建的一份C++指南、规则及最佳实践。旨在帮助大家正确、高效地使用“现代C++”。这份指南侧重于接口、资源管理、内存管理、并发等High-level主题。遵循这些规则可以最大程度地保证静......
  • 【ACM专项练习#01】基本输入输出,如何加减
    关于ACM,牛客其实也有专门的模拟练习:https://ac.nowcoder.com/acm/contest/5657#question做这个也可以关于while(cin>>n)在处理输入时,cin>>n;while(n--)和while(cin>>n)是两种常见方法这里说一下区别cin>>n;while(n--)当你预先知道迭代次数,并希望根据该次数执......
  • Flutter开发之——基本组件-Image
     图片属性,及充满、自适应大小风格https://blog.csdn.net/Calvin_zhou/article/details/113940867设置圆角或者圆图https://blog.csdn.net/Calvin_zhou/article/details/113993900......
  • SQLite3基本操作
    目录SQLite3基本操作SQLite3安装启动和退出表关键字函数SQLite3基本操作SQLite3SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它是D.RichardHipp建立的公有领域项目。它的设计目标是嵌入式的,而且已经在很多嵌入式产品中使用了它,它占用......
  • React(十):props的基本使用
    <!DOCTYPEhtml><html><head><metacharset="utf-8"><title>props的基本使用</title><scriptsrc="https://unpkg.com/react@18/umd/react.development.js"></script><scriptsrc=......