思路按固定顺序转圈填数1从左到右填最上面一行 → 填完后top上边界下移2从上到下填最右边一列 → 填完后right--右边界左移3从右到左填最下面一行 → 填完后bottom--下边界上移4从下到上填最左边一列 → 填完后left左边界右移循环直到填满一直重复上面 4 步直到填的数字num n*n就停止。#include stdio.h #include stdlib.h int** generateMatrix(int n, int* returnSize, int** returnColumnSizes) { int** matrix (int**)malloc(n * sizeof(int*)); *returnSize n; *returnColumnSizes (int*)malloc(n * sizeof(int)); for (int i 0; i n; i) { matrix[i] (int*)malloc(n * sizeof(int)); (*returnColumnSizes)[i] n; } int top 0, bottom n - 1; int left 0, right n - 1; int num 1; while (num n * n) { for (int i left; i right num n * n; i) matrix[top][i] num; top; for (int i top; i bottom num n * n; i) matrix[i][right] num; right--; for (int i right; i left num n * n; i--) matrix[bottom][i] num; bottom--; for (int i bottom; i top num n * n; i--) matrix[i][left] num; left; } return matrix; } int main() { int n; printf(请输入矩阵维度 n); scanf(%d, n); int returnSize; int* returnColumnSizes; int** matrix generateMatrix(n, returnSize, returnColumnSizes); printf(\n%d 阶螺旋矩阵\n, n); for (int i 0; i n; i) { for (int j 0; j n; j) { printf(%3d , matrix[i][j]); } printf(\n); } for (int i 0; i n; i) free(matrix[i]); free(matrix); free(returnColumnSizes); return 0; }总结本次实现螺旋矩阵采用边界模拟法通过维护上下左右四个边界按固定方向循环填充数字并收缩边界直至填满所有数值。该方法逻辑直观重点在于循环条件与边界控制有效避免数组越界加深了对循环与二维数组的理解。