C语言,求高手指导。。。输出螺旋
我给你写了一个,使用指针完成的,你可以借鉴。
#include
#include
/*
* 将螺旋线设想为n*n的正方形,数字首先按照从左向右一次填入第一行,
* 到最后一列时向下,到最后一行是向左,。 。。。,也就是顺时针将数字填入
* 正方形中
* 定义旋转在不同的方向上的横向和纵向变化的值
*/
struct Direct {
int dx; //横向增量 1:向右,0 不变 ,-1 向左
int dy; //纵向增量 1:向下,0 不变 ,-1 向上
};
struct Direct dirs[] = {
{1, 0},
{0, 1},
{-1, 0},
{0, -1}
...全部
我给你写了一个,使用指针完成的,你可以借鉴。
#include
#include
/*
* 将螺旋线设想为n*n的正方形,数字首先按照从左向右一次填入第一行,
* 到最后一列时向下,到最后一行是向左,。
。。。,也就是顺时针将数字填入
* 正方形中
* 定义旋转在不同的方向上的横向和纵向变化的值
*/
struct Direct {
int dx; //横向增量 1:向右,0 不变 ,-1 向左
int dy; //纵向增量 1:向下,0 不变 ,-1 向上
};
struct Direct dirs[] = {
{1, 0},
{0, 1},
{-1, 0},
{0, -1}
};
int* rect; //不使用数组,使用指针
int minx, maxx; //当前行需要填写的最大列和最小列
int miny, maxy;
/**
* 生成一个size * size 大小的螺旋线
* @param size
*/
void insert(int size) {
int i;
int dir = 0;
int x;
int y;
minx = 0;
maxx = size - 1;
miny = 0;
maxy = size - 1;
x = 0;
y = 0;
for (i = 1; i 16) {
printf("螺旋线最大值是:15*15,输入有误,使用默认的 4*4:\n");
size = 4;
}
} else {
printf("usage : %s [size] \n", argv[0]);
printf(" : default seize = 4\n");
printf(" : 最小值是:1,最大值是:15\n");
printf("\n下面显示的是默认值为4*4的螺旋线:\n");
}
//申请空间
rect = malloc(size * sizeof (int) * size * sizeof (int));
if (rect == NULL) {
printf("严重错误:申请内存失败。
\n");
return 1;
}
//初始化rect
for (i = 0; i < size; i++) {
for (j = 0; j < size; j++) {
*(rect + i * size + j) = 0;
}
}
//建立螺旋线
insert(size);
//显示螺旋线
display(size);
//释放空间
free(rect);
return 0;
}
建议你以后注意在关键代码处写上注释。
收起