求助!求讲解!大哥大姐 这个问题有几行没想明白??
/*将5*5的矩阵中最大的元素放在中心,4个角放最小元素
*/
#include<stdio.h>
int main ()
{
void change(int * p);
int a[5][5],*p,i,j;
printf("please input matrix :\n");
for(i=0;i<5;i++)
for(j=0;j<5;j++)
scanf_s("%d",&a[i][j]);
p=&a[0][0];
change(p);
printf("Now , matrix :\n");
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
printf("%5d",a[i][j]);
printf("\n");
}
return 0;
}
void change(int *p)
{
int i,temp,* max,* min,j;
max=min=p;
for(i=0;i<5;i++)
for(j=0;j<5;j++)
{
if(*max<*(p+5*i+j))
max=p+5*i+j;
if (*min>*(p+5*i+j))
min=p+5*i+j;
}
temp=*max;//最大的换给中心元素
*max=*(p+12);
*(p+12)=temp;
temp=*min;//最小的换给角上
*min=*p;
*p=temp;
min=p+1;
for(i=0;i<5;i++)
for(j=0;j<5;j++)
if(((p+5*i+j)!=p)&&(*min>*(p+5*i+j)))
min=p+5*i+j;
temp=*min;//最小的换给角上
*min=*(p+4);
*(p+4)=temp;
min=p+1; 这个p+1怎么是第三最小值??不是应该用p+2吗?? 它是怎么累加的?
for(i=0;i<5;i++)
for(j=0;j<5;j++)
if(((p+5*i+j)!=p)&&(p+5*i+j)!=(p+4)&&(*min>*(p+5*i+j)))
min=p+5*i+j;
temp=*min;//最小的换给角上
*min=*(p+20);
*(p+20)=temp;
min=p+1; ;
for(i=0;i<5;i++)
for(j=0;j<5;j++)
if(((p+5*i+j)!=p)&&(p+5*i+j)!=(p+4)&&(p+5*i+j)!=(p+20)&&(*min>*(p+5*i+j)))
min=p+5*i+j;
temp=*min;//最小的换给角上
*min=*(p+24);
*(p+24)=temp;
}
/*输出
please input matrix :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
Now , matrix :
1 5 21 13 2
6 7 8 9 10
11 12 25 14 15
16 17 18 19 20
3 22 23 24 4
请按任意键继续. . .
*/
[ 本帖最后由 autumnyellow 于 2015-9-7 23:02 编辑 ]