c语言 一道题 求解!谢谢!

题目是这样的:输入图形行数N和中心字符,输出如图所示回形方阵。例如,输入:5Z输出如下图形:XXXXXXYYYXXYZYXXYYYXXXXXX注:N<24,且N是奇数。我... 题目是这样的:输入图形行数N和中心字符,输出如图所示回形方阵。
例如,输入:5 Z
输出如下图形:
X X X X X
X Y Y Y X
X Y Z Y X
X Y Y Y X
X X X X X

注:N<24,且N是奇数。

我写的程序:问题在程序中已标注出!谢谢了!
#include<stdio.h>
void main()
{
char a[24][24],z;
int n,i,j,k,fk;
scanf("%d %c",&n,&z);
for(k=1;k<(n+1)/2;k++)
{
z=z-1;
if(z<'A')
{
z='Z';
}
if(z>'Z'&&z<'a')
{
z='z';
}
}
for(k=(n+1)/2;k>0;k--)
{
fk=0-k;
for(i=fk;i<=k;i++)
{
for(j=fk;j<=k;j++)
{
a[(n-1)/2+i][(n-1)/2+j]=z;/*调试时会发现这里的fk会各种变化~~~为什么啊~~~求解~~谢谢了!*/
}
}
z=z+1;
if(z>'Z'&&z<'a');
{
z='A';
}
if(z>'z')
{
z='a';
}
}
a[(n-1)/2][(n-1)/2]=z;
for(i=0;i<n;i++)
{
for(j=0;j<n-1;j++)
{
printf("%c ",a[i][j]);
}
printf("%c\n",a[i][n-1]);
}
}
k的值是一直减小的…所以fk是增大的…怎么会出现a的下标出现负值的情况呢?
展开
 我来答
tingli08
2012-05-04
知道答主
回答量:2
采纳率:0%
帮助的人:5.4万
展开全部
fk使用时会导致数组a下标越界,数组a的下标有可能为负值,还有变量z在使用的时候会改变,a[(n-1)/2][(n-1)/2]=z;这里应该是z-1赋给最中间的变量,另外循环赋值的时候看不懂你的思路,这是我改写的。
#include<stdio.h>
void main()
{
char a[24][24],z,zh;
int n,i,j,k;

scanf("%d %c",&n,&z);
zh=z;

for(k=1;k<(n+1)/2;k++)
{
z=z-1;
if(z<'A')
{
z='Z';
}
if(z>'Z'&&z<'a')
{
z='z';
}
}

for(k=1;k<(n+1)/2;k++)
{
for(i=k-1;i<=(n-k);i++)
a[k-1][i]=z;
for(i=k;i<=(n-k);i++)
a[i][n-k]=z;
for(i=(n-1-k);i>=(k-1);i--)
a[n-k][i]=z;
for(i=(n-1-k);i>(k-1);i--)
a[i][k-1]=z;

z=z+1;
if(z>'Z'&&z<'a')
{
z='A';
}
if(z>'z')
{
z='a';
}

}

a[(n-1)/2][(n-1)/2]=zh;

for(i=0;i<n;i++)
{
for(j=0;j<n-1;j++)
{
printf("%c ",a[i][j]);
}
printf("%c\n",a[i][n-1]);
}

}
zsx10110
2012-05-04 · TA获得超过8871个赞
知道大有可为答主
回答量:2369
采纳率:66%
帮助的人:3058万
展开全部
应该是你的fk=0-k; 这里的错误 假设我的n输入是5 的话 那么fk= -3 对吧
接着在数组赋值的时候a[-1][-1]可能把fk的地址覆盖了可能之类的吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
5211314kan
2012-05-04
知道答主
回答量:31
采纳率:0%
帮助的人:27.8万
展开全部
for(k=(n+1)/2;k>0;k--)
{
fk=0-k;
for(i=fk;i<=k;i++)
{
for(j=fk;j<=k;j++)
{
a[(n-1)/2+i][(n-1)/2+j]=z; }
}
请看以上的语句,fk的值取决于k的值。在第一个循环语句for(k=(n+1)/2;k>0;k--)中,k的值是逐渐减一的,所以fk的值也会随之变化。所以在下面的子for循环和孙for循环中,fk的值也会随之变化。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式