呵呵,好巧,我在不久之前刚写过这道题。先给你看一下我的代码,我马上帮你改一下你的代码。
#include
#define n 100
void main()
{
int i,j;
int tag=0;
int a[n][n];
int num;
int w;
int k=1;
printf("输入数字(0~100): ");
scanf("%d",&num);
printf("\n");
w=num;
i=j=0;
while (k<=num*num)
{
tag++;
switch (tag)
{
case 1 :for (;j
j--; w--; break;
case 2 :for (i++;i<=w;i++) a[i][j]=k++;
i--; break;
case 3 :for(j--;j>=num-w-1;j--) a[i][j]=k++;
j++; w--; break;
case 4 :for(i--;i>=num-w-1;i--) a[i][j]=k++;
i++; j++; w++; break;
default : break;
}
if(tag==4) tag=0;
}
for (i=0;i
{
for (j=0;j
printf("%4d",a[i][j]);
printf("\n");
}
}
不行,你的程序不好改,一改就回到我的程序上了,建议还是用switch语句,如果不用switch语句,会引起重复赋值,要么就是数组越界。而用switch语句的好处是,通过flag(1个变量来判断方向),0的时候向右,1的时候向下,。。。。依此类推。。。很方便。如有不懂欢迎追问。