c语言n阶魔方

来源:百度知道 编辑:UC知道 时间:2024/09/21 21:50:33
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
a[i][j]=0;
j=n/2+1;
a[1][j]=1;
for(k=2;k<=n*n;k++)
{i=i-1;这等号右边的ij的初始值哪来的
j=j+1;
if((i<1)&&(j>n))
{i=i+2;这等号右边ij的初始值和上边的一样么
j=j-1;
}
else
{if(i<1)i=n;
if(j>n)j=1;

}
if(a[i][j]==0)
a[i][j]=k;
else
{i=i+2;
j=j-1;
a[i][j]=k;
}
}
for(i=1;i<=n;i++)
{for(j=1;j<=n;j++)
printf("%3d",a[i][j]);
printf("\n");
getch();
} }

最好帮忙讲解下程序有些地方不怎么清楚 谢谢
for(i=1;;)貌似for循环每次需要自己定义初值吧 我不是很懂啊 难道能程序自动赋给初值么

在前面的for语句中
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
i=1;j=1;
给这两个变量赋值;
另外由于前面的i与j已经通过运算赋予新的值,所以值发生改变;
对于程序中i与j的初值问题,当;i<=n和j<=n满足条件后,for中的第一个语句不执行;除非再次从for前面执行其,系统将对i
与j赋初值;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
a[i][j]=0;
j=n/2+1;
a[1][j]=1;
还有这里的for的循环体已经超过一个语句,需用{}把循环体括起来

for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
a[i][j]=0;
j=n/2+1;
a[1][j]=1;
for(k=2;k<=n*n;k++)
{i=i-1;这等号右边的ij的初始值哪来的
j=j+1;
if((i<1)&&(j>n))
{i=i+2;这等号右边ij的初始值和上边的一样么
j=j-1;
}
本身在FOR循环里面,第一次循环的时候I就是1,J也是1
第二个IJ这里已经改变了,因为前面已经运行过i=i-1;j=j+1;所以已经改变了

for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
不是已经有初始值了吗?i和j的初始值都是1,循环条件小于等于n,步长为1.初始值只赋值一次,在循环条件没有满足时不会跳出循环自然也不会再付赋值啊