利用C++编写一个矩阵乘法运算的程序 (1)读取两个TXT文件中的数据,存入矩阵并输出显示; (2)编写矩阵乘法运算过程,并输出结果至新的TXT文件中; (3)在创建数组时,采用动态分配内存的方式。
时间: 2024-09-14 09:11:01 浏览: 38
c++关于矩阵运算
在C++中,我们可以按照以下步骤来实现这个矩阵乘法程序:
1. 首先,我们需要定义一个`Matrix`类,包含二维动态数组(由指针指向),用于存储矩阵元素。我们还需要包含函数来读取TXT文件、初始化矩阵以及打印矩阵。
```cpp
#include <fstream>
#include <vector>
class Matrix {
public:
int rows;
int cols;
// 动态创建矩阵
Matrix(int r, int c) : rows(r), cols(c) {
data = new int*[rows];
for (int i = 0; i < rows; ++i)
data[i] = new int[cols];
}
~Matrix() {
for (int i = 0; i < rows; ++i)
delete[] data[i];
delete[] data;
}
void readFromTXT(const std::string& filename) {
ifstream file(filename);
if (!file.is_open()) {
throw runtime_error("Could not open file");
}
string line;
int i = 0;
while (getline(file, line)) {
std::istringstream iss(line);
for (int j = 0; j < cols; ++j) {
iss >> data[i][j];
}
++i;
}
file.close();
}
void display() const {
for (int i = 0; i < rows; ++i) {
for (int j = 0; j < cols; ++j) {
cout << data[i][j] << " ";
}
cout << "\n";
}
}
};
```
2. 接下来,编写一个函数来计算两个矩阵的乘积,这里假设第一个矩阵的列数等于第二个矩阵的行数。
```cpp
Matrix multiply(const Matrix& m1, const Matrix& m2) {
Matrix result(m1.rows, m2.cols);
for (int i = 0; i < m1.rows; ++i) {
for (int j = 0; j < m2.cols; ++j) {
int sum = 0;
for (int k = 0; k < m1.cols; ++k) {
sum += m1.data[i][k] * m2.data[k][j];
}
result.data[i][j] = sum;
}
}
return result;
}
```
3. 最后,将矩阵乘法的结果保存到新的TXT文件中。
```cpp
void writeToTXT(const Matrix& matrix, const std::string& filename) {
ofstream file(filename);
if (!file.is_open()) {
throw runtime_error("Could not open file for writing");
}
for (int i = 0; i < matrix.rows; ++i) {
for (int j = 0; j < matrix.cols; ++j) {
file << matrix.data[i][j] << " ";
}
file << "\n";
}
file.close();
}
int main() {
Matrix A(4, 3); // 读取A.txt文件
A.readFromTXT("A.txt");
Matrix B(3, 5); // 读取B.txt文件
B.readFromTXT("B.txt");
Matrix C = multiply(A, B); // 矩阵乘法
C.display(); // 输出临时结果
writeToTXT(C, "C.txt"); // 将结果写入C.txt文件
return 0;
}
```
在这个程序中,你需要提前准备两个名为"A.txt"和"B.txt"的TXT文件,其中分别包含两个矩阵的数据,格式为行内逗号分隔的数字。运行`main()`函数后,会计算并输出两个矩阵的乘积,然后将结果保存到"C.txt"文件中。
阅读全文