C语言输入整数 n(n 在 1-20 之间),输入 3 至 20 的正整数,输出相应大小的魔方阵,要求魔方阵输出时的样式是放在一个表格中,有彩色最好。输出蛇形矩阵。要求中间最小,然后往往慢慢变大。如输入3,则输出 7 8 9 6 1 2 5 4 3 C语言 要求有:一个数字一个数字出现的动画效果
时间: 2023-12-06 19:39:44 浏览: 142
c代码-C语言三个数从小到大排序/输出: 任意输入 3 个整数,编程实现对这 3 个整数由小到大进行排序。 冒泡排序的动画 https://haokan.baidu.com/v?vid=8080732080990475789&pd=bjh&fr=bjhauthor&type=video
以下是一个满足要求的 C 语言程序:
```c
#include<stdio.h>
#include<windows.h>
void Color(int color) {
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), color);
}
void delay(int milliseconds) {
Sleep(milliseconds);
}
void print_magic_square(int n) {
if (n % 2 == 0) {
printf("n must be odd.\n");
return;
}
int magic_square[20][20] = {0};
int row = 0;
int col = n / 2;
magic_square[row][col] = 1;
for (int i = 2; i <= n * n; i++) {
int new_row = row - 1;
int new_col = col + 1;
if (new_row < 0) {
new_row = n - 1;
}
if (new_col == n) {
new_col = 0;
}
if (magic_square[new_row][new_col] != 0) {
new_row = row + 1;
new_col = col;
}
magic_square[new_row][new_col] = i;
row = new_row;
col = new_col;
}
printf("\n");
printf("The magic square of size %d:\n\n", n);
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (magic_square[i][j] >= 10) {
Color(12);
} else {
Color(15);
}
printf("%2d ", magic_square[i][j]);
delay(100);
}
printf("\n");
}
Color(15);
}
void print_snake_matrix(int n) {
int snake_matrix[20][20] = {0};
int i = n / 2;
int j = n / 2;
int num = 1;
int direction = 0;
int length = 1;
while (num <= n * n) {
snake_matrix[i][j] = num;
num++;
if (direction == 0) {
if (num > n * n) break;
for (int k = 1; k <= length; k++) {
j++;
snake_matrix[i][j] = num;
num++;
delay(100);
}
direction = 1;
} else if (direction == 1) {
for (int k = 1; k <= length; k++) {
i--;
snake_matrix[i][j] = num;
num++;
delay(100);
}
length++;
direction = 2;
} else if (direction == 2) {
for (int k = 1; k <= length; k++) {
j--;
snake_matrix[i][j] = num;
num++;
delay(100);
}
direction = 3;
} else if (direction == 3) {
length++;
for (int k = 1; k <= length; k++) {
i++;
snake_matrix[i][j] = num;
num++;
delay(100);
}
direction = 0;
}
}
printf("\n");
printf("The snake matrix of size %d:\n\n", n);
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (snake_matrix[i][j] >= 10) {
Color(12);
} else {
Color(15);
}
printf("%2d ", snake_matrix[i][j]);
delay(100);
}
printf("\n");
}
Color(15);
}
int main() {
int n;
printf("Please enter an integer n (1-20): ");
scanf("%d", &n);
if (n < 3 || n > 20) {
printf("n must be between 3 and 20.\n");
return 0;
}
printf("\n");
print_magic_square(n);
printf("\n");
print_snake_matrix(n);
return 0;
}
```
该程序使用了 Windows.h 中的函数来设置控制台文字的颜色以及延时,因此只能在 Windows 系统上运行。
程序中包含两个函数,一个是输出魔方阵的函数 `print_magic_square`,另一个是输出蛇形矩阵的函数 `print_snake_matrix`。这两个函数都接受一个整数参数 n,表示矩阵的大小。
在 `print_magic_square` 函数中,首先判断 n 是否为奇数,如果不是奇数,则输出错误信息并返回。然后使用一个二维数组来存储魔方阵,使用类似于蛇形矩阵的方法来逐个填充数字。填充完毕后,按照表格的形式输出魔方阵,数字较大的使用红色字体,数字较小的使用白色字体,并且在输出每个数字之前都延时了一段时间,以达到一个数字一个数字出现的动画效果。
在 `print_snake_matrix` 函数中,同样使用一个二维数组来存储蛇形矩阵,使用类似于魔方阵的方法来逐个填充数字。填充完毕后,同样按照表格的形式输出蛇形矩阵,数字较大的使用红色字体,数字较小的使用白色字体,并且在输出每个数字之前都延时了一段时间,以达到一个数字一个数字出现的动画效果。
最后在主函数中,首先输入要生成的矩阵的大小 n,然后调用上述两个函数来输出魔方阵和蛇形矩阵。
阅读全文