用c实现一个螺旋数组,并带有详细的注释
时间: 2024-01-24 19:17:35 浏览: 37
以下是用C语言实现螺旋数组的完整代码,注释详细:
```c
#include <stdio.h>
#define MAX_SIZE 10 // 定义最大尺寸
void print_array(int arr[][MAX_SIZE], int size) {
// 打印数组
for (int i = 0; i < size; i++) {
for (int j = 0; j < size; j++) {
printf("%d\t", arr[i][j]);
}
printf("\n");
}
}
void fill_array(int arr[][MAX_SIZE], int size) {
// 初始化数组元素为0
for (int i = 0; i < size; i++) {
for (int j = 0; j < size; j++) {
arr[i][j] = 0;
}
}
int value = 1; // 初始化起始值为1
int row = 0, col = 0; // 初始化行列下标
int direction = 0; // 初始化方向为向右
while (value <= size * size) { // 数组未填满时循环
arr[row][col] = value++; // 填入当前值并将值+1
// 根据当前方向更新下一个位置
if (direction == 0) { // 向右
if (col == size - 1 || arr[row][col+1] != 0) {
direction = 1; // 如果到达边界或者下一个位置已经填过值,则改变方向
row++;
} else {
col++;
}
} else if (direction == 1) { // 向下
if (row == size - 1 || arr[row+1][col] != 0) {
direction = 2; // 如果到达边界或者下一个位置已经填过值,则改变方向
col--;
} else {
row++;
}
} else if (direction == 2) { // 向左
if (col == 0 || arr[row][col-1] != 0) {
direction = 3; // 如果到达边界或者下一个位置已经填过值,则改变方向
row--;
} else {
col--;
}
} else if (direction == 3) { // 向上
if (row == 0 || arr[row-1][col] != 0) {
direction = 0; // 如果到达边界或者下一个位置已经填过值,则改变方向
col++;
} else {
row--;
}
}
}
}
int main() {
int array[MAX_SIZE][MAX_SIZE]; // 定义二维数组
fill_array(array, MAX_SIZE); // 填充数组
print_array(array, MAX_SIZE); // 打印数组
return 0;
}
```
以上代码实现了螺旋数组的生成,具体实现思路是从数组的左上角开始,按照向右、向下、向左、向上的方向依次填值,当到达数组边界或者下一个位置已经填过值时,改变方向。最终生成的数组呈螺旋状。