5*5矩阵转变函数问题
新手做题,大家帮忙看看。。。。题目:将一个5*5的矩阵中最大的元素放在中心,4个叫分别放4个最小的元素(顺序为从左到右、从上到下、从小到打依次存放)。。。。
void exchange(int (*p)[5]) //转变的函数
{
int i,j,k=0,l,*p1,temp,a[4];
//下面为求出最大的元素,并存放,这里应该没问题//
p1=*p;
for(i=0;i<5;i++)
for(j=0;j<5;j++)
{
if(*p1<*(*(p+i)+j))
p1=*(p+i)+j;
}
temp=*(*(p+2)+2);
*(*(p+2)+2)=*p1;
*p1=temp;
//下面为求出4个最小元素,问题就出在这里了//
p1=*p;
while(k<4) //k表示求出的最小元素的个数,值从0到3//
{
for(i=0;i<5;i++) //寻找最小元素//
for(j=0;j<5;j++)
{
for(l=0;a[l]!='\0';l++) //我把前面找出的最小元素值存放在一个数组a[4]里//
if(*(*(p+i)+j)==a[l])
continue; //如果出现了跟前面求出的最小元素的值相同的情况,
直接跳过下面的判断//
if(*p1>*(*(p+i)+j)) //判断最小元素//
p1=*(p+i)+j;
}
a[k]=*p1; //把找出的最小元素值存入a,但问题就出现在这里,就是赋值失败,
我试过printf出a[k],但得不到预期的结果//
if(k==0) //这里是确定最小元素存放的位置//
i=0,j=0;
if(k==1)
i=0,j=4;
if(k==2)
i=4,j=0;
if(k==3)
i=4,j=4;
temp=*(*(p+i)+j);
*(*(p+i)+j)=*p1;
*p1=temp;
k++; //求下一个最小元素//
}
}
void main()
{
int a[5][5];
int i,j;
for(i=0;i<5;i++) //输入矩阵
for(j=0;j<5;j++)
scanf("%d",*(a+i)+j);
exchange(a);
printf("\n");
for(i=0;i<5;i++) //输出结果
{
for(j=0;j<5;j++)
printf("%d ",*(*(a+i)+j));
printf("\n");
}
}
就是我标有颜色那里,应该有问题吧。。。。
我找不出错误的原因。。。。
麻烦各路老手帮忙指点一下,主要是说出哪里错误,和改怎样修改此处就行了。。。。
不用另外写出新函数的,我只想知道为什么会出错。。。。
先谢谢了。。。。