简介
在本实验中,你将学习如何在 C 编程中检查矩阵是否对称。本实验涵盖以下步骤:读取矩阵的维度和元素、通过比较对称位置的元素来检查矩阵是否对称,以及打印矩阵是否对称的结果。本实验提供了带有代码示例的分步指南,以帮助你理解在 C 中检查矩阵对称性的过程。
本实验首先展示如何使用 C 编程读取矩阵的维度和元素。然后介绍通过比较对称位置的元素来检查矩阵是否对称的逻辑。最后,本实验演示如何打印结果,表明矩阵是否对称。
读取维度和元素
在这一步中,你将学习如何在 C 编程中读取矩阵的维度和元素,以检查矩阵的对称性。我们将创建一个程序,允许用户输入矩阵的大小和元素。
首先,让我们为矩阵对称程序创建一个新的 C 文件:
cd ~/project
nano symmetric_matrix.c
现在,添加以下代码来读取矩阵的维度和元素:
#include <stdio.h>
#define MAX_SIZE 100
int main() {
int n, matrix[MAX_SIZE][MAX_SIZE];
// 读取矩阵维度
printf("Enter the size of the square matrix: ");
scanf("%d", &n);
// 读取矩阵元素
printf("Enter matrix elements:\n");
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
printf("Enter element [%d][%d]: ", i, j);
scanf("%d", &matrix[i][j]);
}
}
// 打印输入的矩阵
printf("\nEntered Matrix:\n");
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
printf("%d ", matrix[i][j]);
}
printf("\n");
}
return 0;
}
编译并运行程序:
gcc symmetric_matrix.c -o symmetric_matrix
./symmetric_matrix
示例输出:
Enter the size of the square matrix: 3
Enter matrix elements:
Enter element [0][0]: 1
Enter element [0][1]: 2
Enter element [0][2]: 3
Enter element [1][0]: 2
Enter element [1][1]: 4
Enter element [1][2]: 5
Enter element [2][0]: 3
Enter element [2][1]: 5
Enter element [2][2]: 6
Entered Matrix:
1 2 3
2 4 5
3 5 6
让我们详细分析一下代码的关键部分:
#define MAX_SIZE 100设置了最大矩阵大小,以防止缓冲区溢出scanf()用于读取矩阵维度和单个元素- 嵌套循环用于输入和显示矩阵元素
- 该程序确保用户可以输入最大为 100x100 的任意大小的方阵
检查 A[i][j] 是否等于 A[j][i]
在这一步中,你将修改之前的程序,通过比较矩阵的行和列元素来检查矩阵是否对称。
打开现有文件并更新代码:
cd ~/project
nano symmetric_matrix.c
用以下实现替换之前的代码:
#include <stdio.h>
#include <stdbool.h>
#define MAX_SIZE 100
int main() {
int n, matrix[MAX_SIZE][MAX_SIZE];
bool is_symmetric = true;
// 读取矩阵维度
printf("Enter the size of the square matrix: ");
scanf("%d", &n);
// 读取矩阵元素
printf("Enter matrix elements:\n");
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
printf("Enter element [%d][%d]: ", i, j);
scanf("%d", &matrix[i][j]);
}
}
// 检查对称性
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (matrix[i][j]!= matrix[j][i]) {
is_symmetric = false;
break;
}
}
if (!is_symmetric) break;
}
// 打印对称结果
if (is_symmetric) {
printf("\nThe matrix is symmetric.\n");
} else {
printf("\nThe matrix is not symmetric.\n");
}
return 0;
}
编译并运行程序:
gcc symmetric_matrix.c -o symmetric_matrix
./symmetric_matrix
对称矩阵的示例输出:
Enter the size of the square matrix: 3
Enter matrix elements:
Enter element [0][0]: 1
Enter element [0][1]: 2
Enter element [0][2]: 3
Enter element [1][0]: 2
Enter element [1][1]: 4
Enter element [1][2]: 5
Enter element [2][0]: 3
Enter element [2][1]: 5
Enter element [2][2]: 6
The matrix is symmetric.
非对称矩阵的示例输出:
Enter the size of the square matrix: 3
Enter matrix elements:
Enter element [0][0]: 1
Enter element [0][1]: 2
Enter element [0][2]: 3
Enter element [1][0]: 4
Enter element [1][1]: 5
Enter element [1][2]: 6
Enter element [2][0]: 7
Enter element [2][1]: 8
Enter element [2][2]: 9
The matrix is not symmetric.
代码中的关键点:
is_symmetric布尔变量跟踪矩阵的对称性- 嵌套循环比较
matrix[i][j]和matrix[j][i] - 如果任何元素不同,
is_symmetric被设置为false - 如果发现不对称,程序会提前跳出循环
打印是否对称
在这最后一步中,你将改进程序,以提供关于矩阵对称性的更详细输出,并创建一个函数来提高代码的模块化程度。
打开现有文件并更新代码:
cd ~/project
nano symmetric_matrix.c
用以下实现替换之前的代码:
#include <stdio.h>
#include <stdbool.h>
#define MAX_SIZE 100
// 检查矩阵对称性的函数
bool is_symmetric_matrix(int matrix[MAX_SIZE][MAX_SIZE], int n) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (matrix[i][j]!= matrix[j][i]) {
return false;
}
}
}
return true;
}
// 打印矩阵的函数
void print_matrix(int matrix[MAX_SIZE][MAX_SIZE], int n) {
printf("\n矩阵:\n");
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
printf("%4d ", matrix[i][j]);
}
printf("\n");
}
}
int main() {
int n, matrix[MAX_SIZE][MAX_SIZE];
// 读取矩阵维度
printf("输入方阵的大小:");
scanf("%d", &n);
// 读取矩阵元素
printf("输入矩阵元素:\n");
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
printf("输入元素 [%d][%d]: ", i, j);
scanf("%d", &matrix[i][j]);
}
}
// 打印输入的矩阵
print_matrix(matrix, n);
// 检查并打印对称状态
if (is_symmetric_matrix(matrix, n)) {
printf("\n对称性分析:\n");
printf("✓ 该矩阵是对称的。\n");
printf(" - 所有元素 A[i][j] 都等于 A[j][i]\n");
printf(" - 矩阵转置后不变\n");
} else {
printf("\n对称性分析:\n");
printf("✗ 该矩阵不是对称的。\n");
printf(" - 某些元素 A[i][j] 不等于 A[j][i]\n");
}
return 0;
}
编译并运行程序:
gcc symmetric_matrix.c -o symmetric_matrix
./symmetric_matrix
对称矩阵的示例输出:
输入方阵的大小: 3
输入矩阵元素:
输入元素 [0][0]: 1
输入元素 [0][1]: 2
输入元素 [0][2]: 3
输入元素 [1][0]: 2
输入元素 [1][1]: 4
输入元素 [1][2]: 5
输入元素 [2][0]: 3
输入元素 [2][1]: 5
输入元素 [2][2]: 6
矩阵:
1 2 3
2 4 5
3 5 6
对称性分析:
✓ 该矩阵是对称的。
- 所有元素A[i][j] 都等于 A[j][i]
- 矩阵转置后不变
非对称矩阵的示例输出:
输入方阵的大小: 3
输入矩阵元素:
输入元素 [0][0]: 1
输入元素 [0][1]: 2
输入元素 [0][2]: 3
输入元素 [1][0]: 4
输入元素 [1][1]: 5
输入元素 [1][2]: 6
输入元素 [2][0]: 7
输入元素 [2][1]: 8
输入元素 [2][2]: 9
矩阵:
1 2 3
4 5 6
7 8 9
对称性分析:
✗ 该矩阵不是对称的。
- 某些元素A[i][j] 不等于 A[j][i]
主要改进点:
- 添加了
is_symmetric_matrix()函数以实现更好的代码组织 - 创建了
print_matrix()函数来显示矩阵内容 - 通过详细的对称性分析增强了输出
- 使用视觉指示符 (✓/✗) 突出显示对称状态
总结
在本实验中,你将学习如何在 C 编程中读取矩阵的维度和元素,然后检查矩阵是否对称。首先,你将创建一个程序,允许用户输入矩阵的大小和元素。然后,你将修改该程序,通过验证每个元素 A[i][j]是否等于其对应的元素 A[j][i]来检查矩阵是否对称。最后,你将打印矩阵是否对称。
完成这些步骤后的关键学习要点包括使用scanf()读取矩阵维度和元素、显示输入的矩阵,以及比较矩阵元素以确定对称性。该程序确保用户可以输入最大为 100x100 的任意大小的方阵。



