编程实现自动填充n×n矩阵元素数值,填充规则为:从第一行最后一列矩阵元素开始按逆时针方向螺旋式填充数值1,2,…,n×n,其中:n从键盘输入且3≤n≤20。最后向显示器输出该矩阵所有元素。c语言
时间: 2024-06-10 17:06:11 浏览: 83
程序的实现如下:
```c
#include <stdio.h>
int main() {
int n, i, j, num = 1;
int matrix[20][20] = {0}; // 初始化为0
printf("请输入矩阵的维度(3<=n<=20):");
scanf("%d", &n);
int row = 0, col = n - 1;
while (num <= n * n) {
// 从右到左填充
for (i = row; i <= n - 1 - row; i++) {
matrix[i][col] = num++;
}
// 从上到下填充
for (j = col - 1; j >= col - (n - 1 - 2 * row); j--) {
matrix[n - 1 - row][j] = num++;
}
// 从左到右填充
for (i = n - 2 - row; i >= row; i--) {
matrix[i][col - (n - 1 - 2 * row)] = num++;
}
// 从下到上填充
for (j = col - (n - 2 - 2 * row); j >= col - (n - 2 - 2 * row) - (n - 2 - 2 * row - 1); j--) {
matrix[row][j] = num++;
}
row++;
col--;
}
// 输出矩阵
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
printf("%d\t", matrix[i][j]);
}
printf("\n");
}
return 0;
}
```
详细解释如下:
1. 首先定义一个二维数组 `matrix` 表示矩阵,初始化为0。
2. 从键盘输入维度 `n`。
3. 定义变量 `num` 表示填充的数值,初始为1。
4. 定义变量 `row` 和 `col` 分别表示当前填充的行和列。
5. 当 `num` 小于等于 `n*n` 时,进行以下填充:
1. 从右到左填充一列,起始行为 `row`,终止行为 `n-1-row`,列为 `col`,填充的数值从 `num` 开始,每次递增1。
2. 从上到下填充一行,起始列为 `col-1`,终止列为 `col-(n-1-2*row)`,行为 `n-1-row`,填充的数值从 `num` 开始,每次递增1。
3. 从左到右填充一列,起始行为 `n-2-row`,终止行为 `row`,列为 `col-(n-1-2*row)`,填充的数值从 `num` 开始,每次递增1。
4. 从下到上填充一行,起始列为 `col-(n-2-2*row)`,终止列为 `col-(n-2-2*row)-(n-2-2*row-1)`,行为 `row`,填充的数值从 `num` 开始,每次递增1。
5. 更新 `row` 和 `col` 的值, `row++` 、 `col--`。
6. 填充结束后,遍历二维数组 `matrix`,输出矩阵的所有元素。
7. 程序结束。
阅读全文