📜  C++程序检查矩阵是否对称(1)

📅  最后修改于: 2023-12-03 14:40:00.080000             🧑  作者: Mango

C++程序检查矩阵是否对称

矩阵的对称性是指矩阵的转置和其本身相等。也就是说,如果将一个矩阵沿着其主对角线翻转,得到的矩阵和原来的矩阵相等,那么这个矩阵就是对称矩阵。

在计算机编程中,我们可以用一个二维数组来表示一个矩阵。为了检查一个矩阵是否对称,我们需要比较其转置和本身是否相等。

思路

首先,我们需要判断矩阵是否为方阵。如果矩阵不是方阵,则不能判断其是否对称。因此,我们要检查矩阵的行数和列数是否相等。

其次,我们需要比较矩阵的转置和本身是否相等。矩阵的转置可以通过交换其行和列来实现。为了避免修改原始矩阵,我们可以将其复制一份,然后对副本进行操作。如果复制后的矩阵和其转置相等,则说明原始矩阵是对称的。

代码实现
#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:输出流,用于将结果输出到标准输出中。
  • ij:整数,表示循环中使用的计数器。
  • temp:整数,用于交换矩阵中的两个元素的值。
  • ifelse:条件语句,根据是否满足某个条件来执行不同的代码块。
  • return:关键字,表示函数的返回值。
测试数据

我们可以用下面的测试数据来测试程序的正确性:

测试数据1

输入:

请输入矩阵的大小:3
请输入矩阵的元素:
1 2 3
2 4 5
3 5 6

输出:

该矩阵是对称矩阵。
测试数据2

输入:

请输入矩阵的大小:3
请输入矩阵的元素:
1 2 3
4 5 6
7 8 9

输出:

该矩阵不是对称矩阵。
测试数据3

输入:

请输入矩阵的大小:2
请输入矩阵的元素:
1 2
3 4

输出:

该矩阵是对称矩阵。
测试数据4

输入:

请输入矩阵的大小:2
请输入矩阵的元素:
1 2
4 5

输出:

该矩阵不是方阵,无法判断其是否对称。