#include<stdio.h>
void main()
{
int CJ(int *);/*函数声明*/
int a[5][5],i,j,*p;
p=&a[0][0];
for(i=0;i<5;i++)/*构造数组方阵*/
for(j=0;j<5;j++)
scanf("%d",&a[i][j]);
CJ(p);/*函数调用*/
for(i=0;i<5;i++)/*输出调整后的方阵*/
{
for(j=0;j<5;j++)
printf("%4d",a[i][j]);
printf("\n");
}
}
int CJ(int *q)/*函数定义*/
{
int i,j,*qmax,*qmin,t;
qmax=q;
qmin=q;
for(i=0;i<5;i++)/*找到最大值和最小值*/
for(j=0;j<5;j++)
{
if(*qmax<*(q+5*i+j))
qmax=q+5*i+j;
if(*qmin>*(q+5*i+j))
qmin=q+5*i+j;
}
t=*(q+12);/*把最大值和中间的值交换*/
*(q+12)=*qmax;
*qmax=t;
t=*q;/*把最小值和左上角元素交换*/
*q=*qmin;
*qmin=t;
/*以下是找第二小的元素*/
qmin=(q+1);
for(i=0;i<5;i++)
for(j=0;j<5;j++)
if((q+5*i+j)!=q&&*qmin>*(q+5*i+j))
qmin=q+5*i+j;
t=*(q+4);/*把第二小元素和右上角元素互换*/
*(q+4)=*qmin;
*qmin=t;
/*再找第三小元素*/
qmin=(q+1);
for(i=0;i<5;i++)
for(j=0;j<5;j++)
if((q+5*i+j)!=q&&(q+5*i+j)!=(q+4)&&*qmin>*(q+5*i+j))
qmin=(q+5*i+j);
printf("第三小元素为%3d\n",*qmin);/*验证找没找对*/
t=*(q+20);/*把第三小元素和左下角元素交换*/
*(q+20)=*qmin;
*qmin=t;
/*最后找第四小元素*/
qmin=(q+1);
for(i=0;i<5;i++)
for(j=0;j<5;j++)
if((q+5*i+j)!=q&&(q+5*i+j)!=(q+4)&&(q+5*i+j)!=(q+20)&&*qmin>*(q+5*i+j))
qmin=(q+5*i+j);
printf("第四小元素为%3d\n",*qmin);/*验证第四个元素是否找对*/
t=*(q+24);/*把第四小元素和右下角元素互换*/
*(q+24)=*qmin;
*qmin=t;
return 0;
}
这是谭浩强第三版的题目吧