用C语言将二维数组旋转90度
时间: 2024-11-25 10:16:42 浏览: 31
在C语言中,旋转一个二维数组90度可以通过临时变量交换数组元素的方式来实现。假设我们有一个二维数组`arr[row][col]`,我们可以创建一个新的二维数组`rotated`来存储旋转后的结果。以下是步骤:
1. 定义新的二维数组`rotated[n][m]`,其中n是列数,m是行数。
2. 使用两层循环,外层遍历每一行,内层从当前行的最后一个元素开始逆序到第一个元素。
- 对于每个元素`arr[i][j]`,将其放入新位置`rotated[j][n-i-1]`。
下面是伪代码表示:
```c
for (int i = 0; i < n; i++) {
for (int j = n - 1; j >= i; j--) {
int temp = arr[i][j]; // 保存原元素
arr[i][j] = rotated[j][i]; // 将原元素放新位置
rotated[j][i] = temp; // 将temp放到原位置
}
}
```
请注意,这个过程会改变原数组`arr`,如果你想要保留原始数组,可以在操作前先复制一份。
相关问题
c语言 三维数组旋转90度,使用指针偏移实现,输入指针和输出指针
假设要将一个大小为 n x n x n 的三维数组顺时针旋转 90 度,可以使用指针偏移的方式来实现。
具体实现思路如下:
1. 用输入指针和输出指针分别指向原始数组和旋转后的数组。
2. 对于每个元素,计算其在旋转后数组中的位置,将其值复制到对应位置上。这里需要用到指针偏移,具体方式为:
- 原始数组中的元素 a[i][j][k] 在旋转后数组中对应的位置为 b[k][n-j-1][i]。
- 对于一个三维数组,可以将其看做由 n 个二维数组组成,每个二维数组都是一个 n x n 的矩阵。因此,可以使用两层循环遍历二维数组,再使用第三层循环遍历每个矩阵中的元素。
3. 遍历完所有元素后,输出指针所指向的数组即为旋转后的数组。
具体实现代码如下:
```c
void rotate(int *input, int *output, int n) {
int i, j, k;
int *p = input, *q = output;
for (k = 0; k < n; k++) {
for (j = 0; j < n; j++) {
for (i = 0; i < n; i++) {
*(q + k*n*n + (n-j-1)*n + i) = *(p + i*n*n + j*n + k);
}
}
}
}
```
其中,`input` 为输入指针,`output` 为输出指针,`n` 为数组大小。在计算旋转后数组中的位置时,需要注意数组下标从 0 开始计数的问题。
c语言二维数组逆时针旋转90c
以下是C语言中二维数组逆时针旋转90度的代码实现:
```c
#include <stdio.h>
#define ROW 3
#define COL 3
void rotate(int arr[][COL], int row, int col) {
int temp[row][col];
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
temp[i][j] = arr[i][j];
}
}
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
arr[i][j] = temp[j][row - i - 1];
}
}
}
int main() {
int arr[ROW][COL] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
printf("Original array:\n");
for (int i = 0; i < ROW; i++) {
for (int j = 0; j < COL; j++) {
printf("%d ", arr[i][j]);
}
printf("\n");
}
rotate(arr, ROW, COL);
printf("Rotated array:\n");
for (int i = 0; i < ROW; i++) {
for (int j = 0; j < COL; j++) {
printf("%d ", arr[i][j]);
}
printf("\n");
}
return 0;
}
```
运行结果如下:
```
Original array:
1 2 3
4 5 6
7 8 9
Rotated array:
3 6 9
2 5 8
1 4 7
```
阅读全文