将一个5*5矩阵中最大的元素放在中心,4个角分别放置4个最小的元素(顺序为从左到右,从上到下依次从小到大存放),写一个函数实现。用main函数调用。使用指针

#include <stdio.h>
void seek(int *p);
int main()
{
   int sh[][5]={{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}};
   int *p;
   p=&sh[0][0];
   int i,j;
   seek(p);
   for(i=0;i<5;i++)
   {
     for(j=0;j<5;j++,p++)
       printf("%d ",*p); 
       puts("\n");     
   }
  return 0;
}
void seek(int *p)
{
   int i,j,text,*max,*min;
   max=min=p;
   for(i=0;i<5;i++)
   {
     for(j=0;j<5;j++)
     {
       if(*(p+i*5+j) > *max)
        max=p+i*5+j;
       if(*(p+i*5+j) < *min)
        min=p+i*5+j;
     }
   }
   /* 求出最大的数与最小的数,然后交换 */
      text = *max;
      *max = *(p+12);
   *(p+12) = text;
      
      text = *min;
      *min = *p;
        *p = text;
        
  min = p+1; // 必须加, 不重新初始化,地址会乱
  /*求第二个小的数*/ 
   for(i=0;i<5;i++)
   {
     for(j=0;j<5;j++)
     {
       if((p+i*5+j)!=p && *(p+i*5+j)<*min)
          min=p+i*5+j;
     }
   }
     text = *min;
     *min = *(p+4);
   *(p+4) = text;
/*求第3个小的数*/
   for(i=0;i<5;i++)
   {
     for(j=0;j<5;j++)
     {
       if((p+i*5+j)!=p && (p+i*5+j)!=(p+4) && *(p+i*5+j)<*min)
          min=p+i*5+j;
     }
   }
      text = *min;
      *min = *(p+20);
   *(p+20) = text;
/*求第4个小的数*/
    for(i=0;i<5;i++)
   {
     for(j=0;j<5;j++)
     {
       if((p+i*5+j)!=p && (p+i*5+j)!=(p+4) && (p+i*5+j)!=(p+20)&& *(p+i*5+j)<*min)
          min=p+i*5+j;
     }
   }
      text = *min;
      *min = *(p+24);
   *(p+24) = text;
}
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值