麻烦看下程序哪有错误. 最好帮编一下谢谢
/*将一个5*5的矩阵中最大的元素放在中心,四个角分别放四个最小的元素(顺序为从左到右,从上到下依次从小到大存放),写一个函数实现之,用main函数调用*/
#include<stdio.h>
exchange(int*p,int*min_max,int n)
{
int temp;
temp=*(p+n);
*(p+n)=*min_max;
*min_max=temp;
}
adjust(int*p)
{
int i,j,temp,flag;
int*max,*min;
max=p;
min=p;//最大值地址赋给max,最小值地址赋给min
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;
}
exchange(*p,max,12);//最大值与中心值交换
exchange(*p,min,0);//最小值与左上角元素交换
/*以下是第二个最小值赋给min*/
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;
exchange(*p,*min,4);
/*以下是第三个最小值地址赋给min*/
min=p+1;
for(i=0;i<5;i++)
for(j=0;j<5;j++)
{
flag=((p+5*i+j)!=p)&&((p+5*i+j)!=p+4);
if(flag&&(*min>*(p+5*i+j)))
min=p+5*i+j;
}
/* if((((p+5*i+j)!=p)&&((p+5*i+j)!=p+4)))&&(*min>*(p+5*i+j)))*/
exchange(*p,*min,20);//第三个最小值与左下角元素交换
/*以下是第四个最小值赋给min*/
min=p+1;
for(i=0;i<5;i++)
for(j=0;j<5;j++)
{
flag=((p+i*5+j)!=p)&&((p+i*5+j)!=p+4)&&((p+i*5+j)!=p+20);
if (flag&&(*min>*(p+5*i+j))) min=p+5*i+j;
exchange(*p,*min,20);
}
}
main()
{
int a[5][5],i,j;
printf("please input a 5*5 matrix by line:\n");
for(i=0;i<5;i++)
for(j=0;j<5;j++)
scanf("%d",&a[i][j]);
adjust(&a[0][0]);
printf("the adjusted matrix is:\n");
for(i=0;i<5;i++)
for(j=0;j<5;j++)
printf("%d\n",a[i][j]);
printf("\n");}
[此贴子已经被作者于2006-4-8 15:24:21编辑过]