#define M 10
int data[M][M]
void max()
{
int tem
int ctat
int i,j
i=j=0
tem=ctat=1
while(tem<M*M) //tem是1到M*M值变量
{//把方向分为4中状态 即 ctat 变量 上 下 左 右 (1 2 3 4)
data[i][j]=tem
switch(ctat)
{
case 1:
{
if(j+1<M&&0==data[i][j+1])//第一种状态右
{
tem++
j++
}
else
ctat=2
}
break
case 2:
{
if(i+1<M&&0==data[i+1][j])//下
{
tem++
i++
}
else
ctat=3
}
break
case 3:
{
if(j-1>=0&&0==data[i][j-1]) //左
{
tem++
j--
}
else
ctat=4
}
break
case 4:
{//上
if(i-1>=0&&0==data[i-1][j])
{
tem++
i--
}
else
ctat=1//又上 状态1 依次 循环 至矩阵最后第2个值M*M-1;//最后第一个值有 本函数最后赋予
}
break
default:
break
}
}
data[i][j]=tem//赋予最后一个 即 data[i][j]=M*M
}
void main()
{
int i,j
max()
for(i=0i<Mi++)
{
for(j=0j<Mj++)
printf("%4d",data[i][j])
printf("\n")
}
getch()}
{int c,m,n,i,j
int t=0
int a[20][20]
scanf("%d%d",&m,&n)
if(m>n)
c=n/2+1
else
c=m/2+1
for(i=0i<ci++)
{
for(/*j=0*/j=ij<n-i-1j++)
{
t++
a[i][j]=t
}
for(j=ij<m-i-1j++)
{
t++
a[j][n-i-1]=t
}
for(j=n-i-1j>ij--)
{
t++
a[m-i-1][j]=t
}
for(j=m-i-1j>ij--)
{
t++
a[j][i]=t
}
}
for(i=0i<mi++)
for(j=0j<nj++)
{
printf("%d ", a[i][j])
if(((j+1)%n) == 0)
printf("\n")
}
}
line12 我注释掉你的一部分,后边换成修改后的;看你代码的意思是按回环依次复制,那么外侧一环赋值完成后,进入内一层环的时候,i和j都要+1的;你的i+1了,但j没有。