经过几个小时的努力,终于将程序改好了,大家看一下有哪些地方还可以进行改进。
程序代码:
#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编辑过]