C语言实现矩阵向右旋转90度
C语言实现矩阵向右旋转 90 度
问题描述: 输入矩阵阶数 n,给 n 阶矩阵的元素按行序由 1 到 n*n 顺序赋值,然后将其向右旋转 90 度,输出旋转后的矩阵。
输入形式:
控制台输入阶数 n。
输出形式:
输出旋转 90 度后的矩阵,其中每个数字占 4 位字符宽度,向右对齐。
解题思路:
- 构造矩阵并赋值: 使用一个二维数组来表示矩阵,并使用两重循环对其进行赋值操作。需要注意的是,题目要求按行序由 1 到 n*n 的顺序赋值,因此需要使用一个变量来记录当前赋值的数字。
int matrix[n][n]; // 定义 n*n 的矩阵
int num = 1; // 记录当前赋值的数字
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
matrix[i][j] = num++;
}
}
- 矩阵旋转: 可以使用一个辅助矩阵来实现矩阵旋转。将原矩阵的第 i 行第 j 列元素放到辅助矩阵的第 j 行第 (n-i-1) 列上,然后再将辅助矩阵赋值回原矩阵。
int temp[n][n]; // 定义辅助矩阵
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
temp[j][n-i-1] = matrix[i][j];
}
}
// 将辅助矩阵赋值回原矩阵
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
matrix[i][j] = temp[i][j];
}
}
- 输出旋转后的矩阵: 使用两重循环遍历矩阵,并使用
printf函数输出每个元素。为了保证对齐,可以使用%4d格式化输出每个数字。
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
printf("%4d", matrix[i][j]);
}
printf("\n");
}
完整代码:
#include <stdio.h>
int main() {
int n;
printf("输入矩阵阶数 n: ");
scanf("%d", &n);
int matrix[n][n];
int temp[n][n];
int num = 1;
// 赋值
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
matrix[i][j] = num++;
}
}
// 旋转
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
temp[j][n-i-1] = matrix[i][j];
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
matrix[i][j] = temp[i][j];
}
}
// 输出
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
printf("%4d", matrix[i][j]);
}
printf("\n");
}
return 0;
}
原文地址: https://www.cveoy.top/t/topic/nYVu 著作权归作者所有。请勿转载和采集!