注意本题使用动态数组!!!【题目描述】编写程序实现矩阵相乘运算。输入矩阵、输出矩阵、矩阵相乘的功能均需各写成一个函数!!!设第1个矩阵为a行数和列数分别为n、p;第2个矩阵为b行数和列数分别为pm它们的乘积矩阵为c行数和列数分别为n、m。c的i行j列的元素cij的计算规则为:cij=ai1b1j+ai2b2j++aipbpj i=1n;j=1m【输入格式】第1行输入三个整数分别表示n、p、m后面按
#include
void input(int** &matrix, int n, int m) {//输入矩阵 matrix = new int*[n];//动态申请二维数组 for (int i = 0; i < n; i++) { matrix[i] = new int[m]; for (int j = 0; j < m; j++) { cin >> matrix[i][j]; } } }
void output(int** matrix, int n, int m) {//输出矩阵 for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { cout << matrix[i][j]; if (j != m - 1) cout << ' ';//控制行末无空格 } cout << endl; } }
void multiply(int** a, int** b, int** &c, int n, int p, int m) {//两个矩阵相乘 c = new int*[n];//动态申请结果矩阵 for (int i = 0; i < n; i++) { c[i] = new int[m]; for (int j = 0; j < m; j++) { c[i][j] = 0;//初始化为0 for (int k = 0; k < p; k++) {//按照公式计算结果矩阵c c[i][j] += a[i][k] * b[k][j]; } } } }
void release(int** &matrix, int n) {//释放动态二维数组 for (int i = 0; i < n; i++) { delete[] matrix[i]; } delete[] matrix; matrix = NULL; }
int main() { int n, p, m; cin >> n >> p >> m; int** a = NULL; input(a, n, p); int** b = NULL; input(b, p, m); int** c = NULL; multiply(a, b, c, n, p, m); output(c, n, m); release(a, n); release(b, p); release(c, n); return 0;
原文地址: https://www.cveoy.top/t/topic/cwA3 著作权归作者所有。请勿转载和采集!