C语言实现矩阵旋转90度
C语言实现矩阵旋转90度
问题描述:
输入矩阵阶数 n,给 n 阶矩阵的元素按行序由 1 到 n*n 顺序赋值,然后将其向右旋转 90 度,输出旋转后的矩阵。
输入形式:
控制台输入阶数 n。
输出形式:
输出旋转 90 度后的矩阵,其中每个数字占 4 位字符的宽度,向右对齐。
样例输入:
4
样例输出:
13 9 5 1 14 10 6 2 15 11 7 3 16 12 8 4
样例说明:
输入整数 n = 4,输出旋转后的矩阵。
解题思路:
-
顺序赋值: 使用两重循环,外层循环控制行数,内层循环控制列数,每次循环将赋值的数字加一即可。
-
矩阵旋转: 可以分解为先对角线翻转,再左右翻转,也可以先左右翻转,再对角线翻转。这里我们采用先对角线翻转的方法,即先将矩阵的主对角线上方的元素和下方的元素交换,然后再将每一行左右翻转。
-
输出格式: 旋转后的矩阵输出时,每个数字占 4 位字符的宽度,向右对齐,可以使用 printf 函数的格式控制符来实现。
参考代码:
#include <stdio.h>
int main() {
int n, i, j, temp;
scanf("%d", &n);
int matrix[n][n];
// 顺序赋值
int num = 1;
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
matrix[i][j] = num++;
}
}
// 对角线翻转
for (i = 0; i < n; i++) {
for (j = i + 1; j < n; j++) {
temp = matrix[i][j];
matrix[i][j] = matrix[j][i];
matrix[j][i] = temp;
}
}
// 左右翻转
for (i = 0; i < n; i++) {
for (j = 0; j < n / 2; j++) {
temp = matrix[i][j];
matrix[i][j] = matrix[i][n - j - 1];
matrix[i][n - j - 1] = temp;
}
}
// 输出旋转后的矩阵
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
printf("%4d", matrix[i][j]);
}
printf("\n");
}
return 0;
}
原文地址: https://www.cveoy.top/t/topic/nSeq 著作权归作者所有。请勿转载和采集!