#include <iostream>
using namespace std;
int **getTranspose(int **list, int rows, int columns)
{
//创建一个newRow-newCol的转置矩阵
int newRow = columns, newCol = rows;
int **trans = new int*[newRow];
for (int i = 0; i < newRow; i++)
trans[i] = new int[newCol];
//进行转置
//按转置矩阵的行和列遍历
for (int i = 0; i < newRow; i++)
{
for (int j = 0; j < newCol; j++)
trans[i][j] = list[j][i];//新矩阵的行元素 等于 原矩阵的列元素
}
或者按原矩阵的行和列循环遍历
//for (int i = 0; i < rows; i++)
//{
// for (int j = 0; j < columns; j++)
// trans[j][i] = list[i][j];//新矩阵的列元素 等于 原矩阵的行元素
//}
return trans;
}
int** matrixMultiplication(int **m1, int **m2,int rows, int columns, int K)//新矩阵的行和列,以及K
{
//创建相乘之后的矩阵
int **multi = new int*[rows];
for (int i = 0; i < rows; i++)
multi[i] = new int[columns];
//矩阵相乘,遍历新矩阵的行和列
for (int i = 0; i<rows; i++)
{
for (int j = 0; j<columns; j++)
{
int sum = 0;
for (int k = 0; k < K; k++)
sum += m1[i][k]*m2[k][j];
multi[i][j] = sum;
}
}
return multi;
}
//输入
//2 3
//1 1 1
//1 2 1
//输出
//转置矩阵为:
//1 1
//1 2
//1 1
//矩阵相乘结果为
//3 4
//4 6
int main()
{
//请输入矩阵的行和列
cout << "请输入矩阵的行和列:" << endl;
int rows = 0, columns = 0;
cin >> rows >> columns;
cout << "请输入矩阵的各元素:" << endl;
int **list = new int*[rows];
for (int i = 0; i < rows; i++)
{
list[i] = new int[columns];
for (int j = 0; j < columns; j++)
cin >> list[i][j];
}
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < columns; j++)
cout<< list[i][j]<<" ";
cout << endl;
}
cout << "\n转置之后的矩阵为:" << endl;
int ** transpose = getTranspose(list, rows, columns);
for (int i = 0; i < columns; i++)
{
for (int j = 0; j < rows; j++)
cout << transpose[i][j]<<" ";
cout << endl;
}
cout << "\n相乘后的矩阵为:" << endl;
int**multi = matrixMultiplication(list, transpose, rows, rows, columns);
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < rows; j++)
cout << multi[i][j] << " ";
cout << endl;
}
return 0;
}
转载请注明原文地址: https://ju.6miu.com/read-1123115.html