📅  最后修改于: 2023-12-03 14:40:00.080000             🧑  作者: Mango
矩阵的对称性是指矩阵的转置和其本身相等。也就是说,如果将一个矩阵沿着其主对角线翻转,得到的矩阵和原来的矩阵相等,那么这个矩阵就是对称矩阵。
在计算机编程中,我们可以用一个二维数组来表示一个矩阵。为了检查一个矩阵是否对称,我们需要比较其转置和本身是否相等。
首先,我们需要判断矩阵是否为方阵。如果矩阵不是方阵,则不能判断其是否对称。因此,我们要检查矩阵的行数和列数是否相等。
其次,我们需要比较矩阵的转置和本身是否相等。矩阵的转置可以通过交换其行和列来实现。为了避免修改原始矩阵,我们可以将其复制一份,然后对副本进行操作。如果复制后的矩阵和其转置相等,则说明原始矩阵是对称的。
#include <iostream>
using namespace std;
const int MAX = 100;
int main() {
int n;
int matrix[MAX][MAX], copy[MAX][MAX];
cout << "请输入矩阵的大小:";
cin >> n;
cout << "请输入矩阵的元素:";
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cin >> matrix[i][j];
copy[i][j] = matrix[i][j];
}
}
// 判断矩阵是否为方阵
if (n != m) {
cout << "该矩阵不是方阵,无法判断其是否对称。";
return 0;
}
// 求矩阵的转置
for (int i = 0; i < n; i++) {
for (int j = 0; j < i; j++) {
int temp = copy[i][j];
copy[i][j] = copy[j][i];
copy[j][i] = temp;
}
}
// 比较矩阵和其转置是否相等
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (matrix[i][j] != copy[i][j]) {
cout << "该矩阵不是对称矩阵。";
return 0;
}
}
}
cout << "该矩阵是对称矩阵。";
return 0;
}
代码片段的解释如下:
MAX
:常量,表示矩阵的最大大小。matrix
:二维数组,表示原始矩阵。copy
:二维数组,表示矩阵的副本,用于求转置和比较。n
:整数,表示矩阵的大小。cin
:输入流,用于从标准输入中读取用户输入数据。cout
:输出流,用于将结果输出到标准输出中。i
、j
:整数,表示循环中使用的计数器。temp
:整数,用于交换矩阵中的两个元素的值。if
、else
:条件语句,根据是否满足某个条件来执行不同的代码块。return
:关键字,表示函数的返回值。我们可以用下面的测试数据来测试程序的正确性:
输入:
请输入矩阵的大小:3
请输入矩阵的元素:
1 2 3
2 4 5
3 5 6
输出:
该矩阵是对称矩阵。
输入:
请输入矩阵的大小:3
请输入矩阵的元素:
1 2 3
4 5 6
7 8 9
输出:
该矩阵不是对称矩阵。
输入:
请输入矩阵的大小:2
请输入矩阵的元素:
1 2
3 4
输出:
该矩阵是对称矩阵。
输入:
请输入矩阵的大小:2
请输入矩阵的元素:
1 2
4 5
输出:
该矩阵不是方阵,无法判断其是否对称。