程序代码:
#include <stdio.h>
#include <conio.h>
#define DOWN 0
#define LEFT 1
#define UP 2
#define RIGHT 3
//N*N矩阵
#define N 5
void printMatrix(int *a[], int n) {
int i, j;
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
printf("%4d", a[i][j]);
}
printf("/n");
}
}
void spiralMatrix(int *a[], int n) {
int i, j; //坐标
int count; //计数器
int k; //循环变量
int direct; //方向指示
i = 0;
j = --n;
count = 0;
direct = DOWN;
while (n > 0) {
for (k = 0; k < n; k++) {
a[i][j] = count++;
switch (direct) {
case DOWN:
i++;
break;
case LEFT:
j--;
break;
case UP:
i--;
break;
case RIGHT:
j++;
break;
}
}
//如果刚走过的方向为RIGHT, 步长减2, 并校正位置
if (direct == RIGHT) {
i++;
j--;
n -= 2;
}
//换方向
direct = (direct + 1) % 4;
}
if (n == 0) {
a[i][j] = count;
}
}
void main(void) {
int m[N][N] = {0};
int *a[N];
int i;
for (i = 0; i < N; i++) {
a[i] = m[i];
}
spiralMatrix(a, N);
printMatrix(a, N);
printf("按任意键退出...");
getch();
}
又在网上看到一个:
#include <stdio.h>
void main()
{
int a,b,c,i,j,k,t,I,J,s[9][9];
scanf("%d", &c); //输入边长
if (c>9) return; //为保持整齐,边长不能大于9
a=c-1; b=0; //转折点坐标
i=1; j=0; //坐标增量
I=0; J=0; //坐标
for(k=1;k<=c*c;k++)
{
s[I][J]=k;
if(I==a && J==b) //遇到转折点
{
t=a; a=c-b-1; b=t+(i+j>0?0:1); //改变转折点
t=i; i=-j; j=t; //改变坐标增量
}
I+=i; J+=j; //改变坐标
}
for(J=0;J<c;J++)
{
for(I=0;I<c;I++) printf("%-2d ",s[I][J]);
printf("/n");
}
return;
}