简介
在本实验中,你将学习如何在 C 编程中检查矩阵是否对称。本实验涵盖以下步骤:读取矩阵的维度和元素、通过比较对称位置的元素来检查矩阵是否对称,以及打印矩阵是否对称的结果。本实验提供了带有代码示例的分步指南,以帮助你理解在 C 中检查矩阵对称性的过程。
本实验首先展示如何使用 C 编程读取矩阵的维度和元素。然后介绍通过比较对称位置的元素来检查矩阵是否对称的逻辑。最后,本实验演示如何打印结果,表明矩阵是否对称。
在本实验中,你将学习如何在 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() 用于读取矩阵维度和单个元素在这一步中,你将修改之前的程序,通过比较矩阵的行和列元素来检查矩阵是否对称。
打开现有文件并更新代码:
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 的任意大小的方阵。