C语言实现矩阵向右旋转 90 度

问题描述: 输入矩阵阶数 n,给 n 阶矩阵的元素按行序由 1 到 n*n 顺序赋值,然后将其向右旋转 90 度,输出旋转后的矩阵。

输入形式:

控制台输入阶数 n。

输出形式:

输出旋转 90 度后的矩阵,其中每个数字占 4 位字符宽度,向右对齐。

解题思路:

  1. 构造矩阵并赋值: 使用一个二维数组来表示矩阵,并使用两重循环对其进行赋值操作。需要注意的是,题目要求按行序由 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++;
    }
}
  1. 矩阵旋转: 可以使用一个辅助矩阵来实现矩阵旋转。将原矩阵的第 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];
    }
}
  1. 输出旋转后的矩阵: 使用两重循环遍历矩阵,并使用 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;
}
C语言实现矩阵向右旋转90度

原文地址: https://www.cveoy.top/t/topic/nYVu 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录