题目要求:例如输入一个4,则输出如下图形: 1 12 11 10 2 13 16 9 3 14 15 8 4 5 6 7 #include < stdio.h > void main() ... { int i,j,k,n,a[20][20]; k=1; scanf("%d",&n); for(i=1;i<=n/2;i++) ...{ for(j=i;j<=n-i;j++) //左边 ...{ a[j][i]=k; k=k+1; } for(j=i;j<=n-i;j++) //下面 ...{ a[n-i+1][j]=k; k=k+1; } for(j=n-i+1;j>=i+1;j--) //右边 ...{ a[j][n-i+1]=k; k=k+1; } for(j=n-i+1;j>=i+1;j--) //上面 ...{ a[i][j]=k; k=k+1; } } if(n%2==1) //如果n是奇数 ...{ i=(n+1)/2; a[i][i]=n*n; } for(i=1;i<=n;i++) //输出 ...{ printf(" "); for(j=1;j<=n;j++) printf("%4d",a[i][j]); } printf(" ");} 方法二: #include < stdio.h > void main() ... { int a[20][20],i,j,k,x,n,b[20],y,t; b[0]=0; b[1]=1; scanf("%d",&n); k=n; x=1; t=1; while(x<=n*n) ...{ for(y=1;y<=2*k-1;y++) ...{ b[y/(k+1)]=b[y/(k+1)]+t; a[b[0]][b[1]]=x; x++; } k--; t=-t; } for(i=1;i<=n;i++) ...{ printf(" "); for(j=1;j<=n;j++) printf("%d",a[i][j]); }}