画一个可爱的小女孩:C语言问题!

来源:百度文库 编辑:杭州交通信息网 时间:2024/05/03 20:36:06
用c输出螺旋方阵
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
答案是这样的
#include <stdio.h>
#define N 5 /*阶数N可调*/
int main( )
{ static i,j,k,m,n,a[N][N];
for(k=1;k<=N*N;k++)
{ a[n+i][n+j]=k;
m=N-2*n;
if(i==0 && j<m-1)++j;
else if(j==m-1 && i<m-1)++i;
else if(i==m-1 && j > 0)--j;
else if(j==0 && i > 0)--i;
if(i==0 && j==0)n++;
}

for(i=0;i<N;i++,printf("\n"))
for(j=0;j<N;j++)
printf(" %02d",a[i][j]);
return 0;
}
不是很理解,哪位高手帮忙作一下注释,解释一下每个变量的用途!谢谢

#include <stdio.h>
#define N 5 /*阶数N可调*/

main () {
static i,j,k,m,n,a[N][N];
// 默认i,j,k,m,n均为0,但是不提倡这样写;
for(k=1;k<=N*N;k++) {
a[n+i][n+j]=k;
// m为螺旋直径,本例为5,3,1
m=N-2*n;
// 如果当前在螺旋上侧,则向右走
if(i==0 && j<m-1)
++j;
// 如果当前在螺旋左侧,则向下走
else if(j==m-1 && i<m-1)
++i;
// 如果当前在螺旋下侧,则向左走
else if (i==m-1 && j > 0)
--j;
// 如果当前在螺旋右侧,则向上走
else if(j==0 && i > 0)
--i;
// 走完一圈后,直径m减少2,即n加1,见上
if(i==0 && j==0)
n++;
}
// 输出
for(i=0;i<N;i++,printf("\n"))
for(j=0;j<N;j++)
printf(" %02d",a[i][j]);
return 0;
}