菜鸟的C语言问题

来源:百度知道 编辑:UC知道 时间:2024/04/30 17:52:07
新学C语言,做题编了个程序,不知其中函数哪里出错,大家帮忙看看,感激不尽。。。。
题目:将一个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;
}
<

修改exchange函数如下:
void exchange(int (*p)[5]) //转变的函数
{
int i,j,k=0,l,*p1,temp,a[4] = {0, 0, 0, 0};

//求出最大的元素,并存放,这里应该没问题//
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<4;l++)
//我把前面找出的最小元素值存放在一个数组a[4]里//
if(*(*(p+i)+j)==a[l])
goto _next;
//如果出现了跟前面求出的最小元素的值相同的情况,直接跳过下面的判断//

if(*p1>*(*(p+i)+j)) //判断最小元素//