简介
在本实验中,你将学习如何用C语言计算矩阵的转置。本实验涵盖以下步骤:
读取维度和元素:你将学习如何读取矩阵的维度(行数和列数)并用用户输入的值填充它。此步骤为矩阵转置过程奠定基础。
交换行和列:矩阵转置的核心是交换原始矩阵的行和列以创建转置矩阵。
打印转置矩阵:最后,你将学习如何显示转置矩阵,以便验证转置过程的正确性。
完成本实验后,你将对矩阵转置有深入的理解,并能够在C编程中实现它。
在本实验中,你将学习如何用C语言计算矩阵的转置。本实验涵盖以下步骤:
读取维度和元素:你将学习如何读取矩阵的维度(行数和列数)并用用户输入的值填充它。此步骤为矩阵转置过程奠定基础。
交换行和列:矩阵转置的核心是交换原始矩阵的行和列以创建转置矩阵。
打印转置矩阵:最后,你将学习如何显示转置矩阵,以便验证转置过程的正确性。
完成本实验后,你将对矩阵转置有深入的理解,并能够在C编程中实现它。
在这一步中,你将学习如何在用于矩阵转置的C程序中读取矩阵的维度和元素。我们将创建一个程序,允许用户输入行数和列数,然后用值填充矩阵。
首先,为我们的矩阵转置程序创建一个新的C文件:
cd ~/project
nano matrix_transpose.c
现在,添加以下代码来读取矩阵的维度和元素:
#include <stdio.h>
#define MAX_ROWS 100
#define MAX_COLS 100
int main() {
int rows, cols;
int matrix[MAX_ROWS][MAX_COLS];
// 读取矩阵维度
printf("输入行数: ");
scanf("%d", &rows);
printf("输入列数: ");
scanf("%d", &cols);
// 输入矩阵元素
printf("输入矩阵元素:\n");
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
printf("输入元素 [%d][%d]: ", i, j);
scanf("%d", &matrix[i][j]);
}
}
// 打印原始矩阵
printf("\n原始矩阵:\n");
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
printf("%d ", matrix[i][j]);
}
printf("\n");
}
return 0;
}
编译并运行程序:
gcc matrix_transpose.c -o matrix_transpose
./matrix_transpose
示例输出:
输入行数: 3
输入列数: 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
让我们来分析一下代码的关键部分:
MAX_ROWS
和 MAX_COLS
定义了矩阵的最大尺寸scanf()
用于读取用户输入的行数、列数和矩阵元素在这一步中,你将学习如何通过交换矩阵的行和列来转置矩阵。我们将修改上一个程序来创建一个转置矩阵。
打开现有的 matrix_transpose.c 文件:
cd ~/project
nano matrix_transpose.c
用以下实现替换之前的代码:
#include <stdio.h>
#define MAX_ROWS 100
#define MAX_COLS 100
int main() {
int rows, cols;
int matrix[MAX_ROWS][MAX_COLS];
int transposed[MAX_COLS][MAX_ROWS];
// 读取矩阵维度
printf("输入行数: ");
scanf("%d", &rows);
printf("输入列数: ");
scanf("%d", &cols);
// 输入矩阵元素
printf("输入矩阵元素:\n");
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
printf("输入元素 [%d][%d]: ", i, j);
scanf("%d", &matrix[i][j]);
}
}
// 转置矩阵
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
transposed[j][i] = matrix[i][j];
}
}
// 打印原始矩阵
printf("\n原始矩阵:\n");
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
printf("%d ", matrix[i][j]);
}
printf("\n");
}
// 打印转置矩阵
printf("\n转置矩阵:\n");
for (int i = 0; i < cols; i++) {
for (int j = 0; j < rows; j++) {
printf("%d ", transposed[i][j]);
}
printf("\n");
}
return 0;
}
编译并运行程序:
gcc matrix_transpose.c -o matrix_transpose
./matrix_transpose
示例输出:
输入行数: 3
输入列数: 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
转置矩阵:
1 4 7
2 5 8
3 6 9
关于矩阵转置的要点:
transposed
transposed[j][i] = matrix[i][j]
是关键的转换操作在这最后一步中,你将学习如何格式化并打印转置矩阵,以提高可读性并增强错误处理能力。我们将改进上一个程序,使输出更加专业。
打开 matrix_transpose.c 文件:
cd ~/project
nano matrix_transpose.c
用以下改进后的实现替换之前的代码:
#include <stdio.h>
#define MAX_ROWS 100
#define MAX_COLS 100
void printMatrix(int matrix[MAX_ROWS][MAX_COLS], int rows, int cols, const char* title) {
printf("%s:\n", title);
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
printf("%4d ", matrix[i][j]);
}
printf("\n");
}
printf("\n");
}
int main() {
int rows, cols;
int matrix[MAX_ROWS][MAX_COLS];
int transposed[MAX_COLS][MAX_ROWS];
// 输入验证
do {
printf("输入行数 (1 - %d): ", MAX_ROWS);
scanf("%d", &rows);
} while (rows <= 0 || rows > MAX_ROWS);
do {
printf("输入列数 (1 - %d): ", MAX_COLS);
scanf("%d", &cols);
} while (cols <= 0 || cols > MAX_COLS);
// 输入矩阵元素
printf("输入矩阵元素:\n");
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
printf("输入元素 [%d][%d]: ", i, j);
scanf("%d", &matrix[i][j]);
}
}
// 转置矩阵
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
transposed[j][i] = matrix[i][j];
}
}
// 以格式化输出打印矩阵
printMatrix(matrix, rows, cols, "原始矩阵");
printMatrix(transposed, cols, rows, "转置矩阵");
return 0;
}
编译并运行程序:
gcc matrix_transpose.c -o matrix_transpose
./matrix_transpose
示例输出:
输入行数 (1 - 100): 3
输入列数 (1 - 100): 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
转置矩阵:
1 4 7
2 5 8
3 6 9
此版本的主要改进:
printMatrix()
函数以提高代码组织性%4d
改进矩阵打印格式,使其对齐在本实验中,你将学习如何在C程序中读取矩阵的维度和元素、交换行和列以及打印转置矩阵。首先,程序会提示用户输入行数和列数,然后允许用户输入矩阵元素。接着会显示原始矩阵。接下来,程序通过交换行和列来计算矩阵的转置,最后打印转置矩阵。
本实验的关键学习要点包括使用 scanf()
读取用户输入、实现嵌套循环来输入和显示矩阵元素,以及通过交换行和列来执行转置操作。该程序还展示了如何使用 printf()
来显示原始矩阵和转置矩阵。