经过几个小时的努力,终于将程序改好了,大家看一下有哪些地方还可以进行改进。
程序代码:#include<stdio.h>
void chuli(int (*)[5]);
void shuchu(int (*)[5]);
int main(void)
{
int a[5][5]={{2,5,6,3,7},{8,9,10,11,12},{13,14,1,15,16},{17,18,19,20,21},{4,22,23,24,25}};
int i,j;
shuchu(a);
printf("\n\n");
chuli(a);
shuchu(a);
return 0;
}
void chuli( int (*point)[5] )
{
int *p=*point,m,n,i,temp,a[5]={0,1,2,3,0};//a[0]到a[3]表示最小值位置,a[4]表示最大值位置
for(n=0;n<5;n++)
for(i=0;i<25;i++)//遍历二维数组,寻找目标值位置
{
if( n<4 && *(p+i)<*(p+a[n]) )//标记最小值
{
for(m=n-1;a[m]!=i && m>=0;m--);
if(m<0)//m<0说明该位置上的值未被标记,又因该值小于第n个最小值,应将其标记
a[n]=i;
}
if( n==4 && *(p+i)>*(p+a[n]) )//标记最大值
a[n]=i;
}
for(n=0;n<5;n++)//将目标值从当前位置移至目标位置
{
temp=*(p+a[n]);
*(p+a[n])=*(p+5*(n<4?(n>1?4:0):2)+(n<4?(n%2?4:0):2));
*(p+5*(n<4?(n>1?4:0):2)+(n<4?(n%2?4:0):2))=temp;
//移动当前目标值至目标位置时,有概率影响其他目标值的位置,用以下代码避免此影响带来的错误
for(m=n+1;m<5;m++)
if( a[m]==5*(n<4?(n>1?4:0):2)+(n<4?(n%2?4:0):2) )
a[m]=a[n];
}
}
void shuchu(int (*p)[5])
{
int i,j;
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
printf("%5d",*(*(p+i)+j));
printf("\n\n");
}
}[此贴子已经被作者于2018-11-6 16:58编辑过]








