用c++实现输入两个n×n的矩阵A和B,实现乘积运算,并输出运算结果和计算时间
时间: 2023-09-22 10:06:19 浏览: 139
### 回答1:
这里提供一个基于C++11标准的实现方式,使用了std::chrono库来计算运算时间。
```cpp
#include <iostream>
#include <vector>
#include <chrono>
using namespace std;
// 矩阵乘法函数
vector<vector<int>> matrix_multiply(const vector<vector<int>>& A, const vector<vector<int>>& B) {
int n = A.size();
vector<vector<int>> C(n, vector<int>(n, 0));
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
for (int k = 0; k < n; ++k) {
C[i][j] += A[i][k] * B[k][j];
}
}
}
return C;
}
int main() {
int n;
cout << "请输入矩阵大小n:";
cin >> n;
// 输入矩阵A
cout << "请输入矩阵A:" << endl;
vector<vector<int>> A(n, vector<int>(n));
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
cin >> A[i][j];
}
}
// 输入矩阵B
cout << "请输入矩阵B:" << endl;
vector<vector<int>> B(n, vector<int>(n));
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
cin >> B[i][j];
}
}
// 计算矩阵乘法
auto start_time = chrono::steady_clock::now();
vector<vector<int>> C = matrix_multiply(A, B);
auto end_time = chrono::steady_clock::now();
auto duration = chrono::duration_cast<chrono::microseconds>(end_time - start_time);
// 输出结果和计算时间
cout << "矩阵乘积为:" << endl;
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
cout << C[i][j] << " ";
}
cout << endl;
}
cout << "计算时间为:" << duration.count() << " 微秒" << endl;
return 0;
}
```
使用时,先输入矩阵的大小n,然后依次输入矩阵A和B的元素。程序会计算出矩阵A和B的乘积并输出结果和计算时间。
### 回答2:
题目要求用C语言实现输入两个n×n矩阵A和B的乘积运算,并输出运算结果和计算时间。
在C语言中,可以使用二维数组来表示矩阵,并使用循环嵌套的方式实现矩阵乘法运算。具体步骤如下:
1. 首先,声明一个n×n的二维数组A和B,用于存储输入的矩阵A和B。
2. 使用循环语句从用户输入中读取矩阵A和B的元素,并将其存储在数组A和B中。
3. 声明一个n×n的二维数组C,用于存储运算结果。
4. 使用三层循环嵌套,分别遍历C的行数i、列数j和矩阵A和B的列数k。
在每次循环中,计算结果矩阵C的元素C[i][j],即C[i][j] = A[i][k] * B[k][j],并将其累加到C[i][j]中。
5. 通过clock()函数获取运算开始和结束的时间,并计算运算时间。
6. 使用循环语句遍历结果矩阵C,将其输出。
以下是C语言程序的示例代码:
#include <stdio.h>
#include <time.h>
int main() {
int n;
printf("请输入矩阵的阶数n:");
scanf("%d", &n);
int A[n][n], B[n][n], C[n][n];
int i, j, k;
printf("请输入矩阵A的元素:\n");
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
scanf("%d", &A[i][j]);
}
}
printf("请输入矩阵B的元素:\n");
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
scanf("%d", &B[i][j]);
}
}
clock_t start_time, end_time;
start_time = clock();
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
C[i][j] = 0;
for (k = 0; k < n; k++) {
C[i][j] += A[i][k] * B[k][j];
}
}
}
end_time = clock();
double total_time = (double)(end_time - start_time) / CLOCKS_PER_SEC;
printf("矩阵乘法的结果为:\n");
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
printf("%d ", C[i][j]);
}
printf("\n");
}
printf("运算时间为:%f秒", total_time);
return 0;
}
注意:上述代码中使用了clock()和CLOCKS_PER_SEC宏来计算运算时间,需要添加头文件<time.h>。
希望以上回答对您有帮助,如有疑问请继续追问。
### 回答3:
要用C语言实现输入两个n×n的矩阵A和B,实现乘积运算,并输出运算结果和计算时间,可以按照以下步骤来进行:
1. 首先,需要定义一个函数来进行矩阵的乘法运算。函数的输入参数可以是两个n×n的矩阵A和B,以及一个指向n×n结果矩阵C的指针。函数内部可以使用两个嵌套的循环来实现矩阵的乘法运算。例如,可以用i和j来迭代访问A和B的元素,再用k来迭代计算C的元素。
2. 在主程序中,可以先定义n的值,并且使用动态内存分配来创建三个n×n的矩阵A、B和C。例如,可以使用malloc函数来分配内存。
3. 接下来,可以使用循环结构来输入矩阵A和B的元素值。可以利用嵌套的循环语句来让用户输入矩阵元素的值。
4. 调用定义的矩阵乘法函数,传递矩阵A、B和C的指针作为参数,来计算矩阵乘积。
5. 输出计算结果和计算时间。可以使用clock函数来获取程序运行的时间。首先,在矩阵乘法运算之前调用clock函数,将其返回值保存在一个变量中。在矩阵乘法运算之后再次调用clock函数,将其返回值减去之前保存的值得到运算的时间。最后,将矩阵乘积C的元素值输出到屏幕上。
6. 最后,别忘了释放动态分配的内存,以免造成内存泄漏。可以使用free函数来释放矩阵A、B和C的内存。
通过以上步骤,就可以用C语言实现输入两个n×n的矩阵A和B,实现乘积运算,并输出运算结果和计算时间了。
阅读全文