在线等 C语言找错(分数全部悬赏)

来源:百度知道 编辑:UC知道 时间:2024/05/31 20:34:03
打印一个 N*N 的方阵,N为每边字符的个数(3<N<20), 要求最外一层为"T", 第二层为"J", 从第三层起每层依次打印数字 1,2,3,... (下图以N为15为例)
TTTTTTTTTTTTTTT
TJJJJJJJJJJJJJT
TJ11111111111JT
TJ12222222221JT
TJ12333333321JT
TJ12344444321JT
TJ12345554321JT
TJ12345654321JT
TJ12345554321JT
TJ12344444321JT
TJ12333333321JT
TJ12222222221JT
TJ11111111111JT
TJJJJJJJJJJJJJT
TTTTTTTTTTTTTTT

偶写的是:
#include <stdio.h>
#define N 15
main()
{

int a[N][N];
int i,j;
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
if(i==0)
{
a[i][j]='T';
a[j][i]='T';
a[N-1][i]='T';
a[j][N-1]='T';

}
else if(i==1)
{a[i][j]='J';
a[j][i]='J';
a[N-2][i]='J';
a[j][N-2]='J';

}
else
{
a[i][j]=i-2;
a[j]

因为你矩阵的类型定义为int型,而输出格式是字符,语句a[i][j]=i-2执行后,输出时候会把该数的ANSCII码值输出,当然是乱码;还有,语句a[N-1][i]='T'中的"i"应该改为"j",想想是不是,其它也类似,下面是我修改过的代码,改过的地方都标记了:
#include <stdio.h>
#define N 15
main()
{
int a[N][N];
int i,j;
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
if(i==0)
{
a[i][j]='T';
a[j][i]='T';
a[N-1][j]='T'; //
a[j][N-1]='T';

}
else if(i==1)
{
if(j>=i&&j<N-i)//
{
a[i][j]='J';
a[j][i]='J';
a[N-2][j]='J'; //
a[j][N-2]='J';
}

}
else if(j>=i&&j<N-i)//
{
a[i][j]=i-1+'0'; //
a[j][i]=i-1+'0'; //
a[N-i-1][j]=i-1+'0'; //
a[j][N-i-1]=i-1+'0'; //
}
}
}