求一c语言题的答案,要使用宏定义

来源:百度知道 编辑:UC知道 时间:2024/05/08 05:34:19
使用指针变量及宏定义,宏名为limit,建立一个螺旋数组A[limit][limit]并输出。例如:#define limit 5 时:

13 14 15 16 1

12 23 24 17 2

11 22 25 18 3

10 21 20 19 4

9 8 7 6 5

#include <stdio.h>
#define limit 5
const int dir[4][2]={{1,0},{0,-1},{-1,0},{0,1}};
int A[limit][limit];
int *p;
main()
{
int i,j;
for (i=0;i<limit;i++)
for (j=0;j<limit;j++)
A[i][j]=-1;
for (i=1;i<=limit;i++) A[i-1][limit-1]=i;
for (;i<=limit*2-1;i++) A[limit-1][limit*2-i-1]=i;
for (;i<=limit*3-2;i++) A[limit*3-i-2][0]=i;
for (;i<=limit*4-4;i++) A[0][i-limit*3+2]=i;
if (limit>2)
{
p=&A[1][limit-2];
for (;;i++)
{
*p=i;
for (j=0;j<4;j++)
if (*(p+limit*dir[j][0]+dir[j][1])==-1) break;
if (j==4) break;
p+=limit*dir[j][0]+dir[j][1];
}
}
for (i=0;i<limit;i++)
for (j=0;j<limit;j++)
printf("%d%c",A[i][j],j==limit-1 ? '\n' : ' ');
}