您的位置:首页 > 其它

5*5矩阵的检索和位置转换

2017-06-13 00:55 155 查看

题:将一个 5X5 矩阵中最大的元素放在中心,4个角分别放在4个最小的元素(顺序为从左到右,从上到下依次从小到大排序),写一个函数实现,并用main函数调用。
#include <stdio.h>
int main()
{
void change(int *p);
int a[5][5],*p,i,j;
printf("enter 35 number: \n"); //提示输入二维数组各元素。
for(i=0;i<5;i++)
for(j=0;j<5;j++)
scanf("%d",&a[i][j]);
p=&a[0][0]; //使p指向二维数组首地址。
change(p); //调用函数
printf("after changed: \n");
for(i=0;i<5;i++) //输出已交换的二维数组
{
for(j=0;j<5;j++)
printf("%d ",a[i][j]);
printf("\n");
}
return 0;
}
void change(int *p) //交换函数
{
int i,j,temp;
int *pmax,*pmin;
pmax=p;
pmin=p;
for(i=0;i<5;i++)
for(j=0;j<5;j++) //对二维数组遍历,找到最大值和最小值
{
if(*pmax < *(p+5*i+j)) pmax = p+5*i+j;
if(*pmin > *(p+5*i+j)) pmin = p+5*i+j;
}
temp=*(p+12);
*(p+12)=*pmax;
*pmax=temp;
temp=*p;
*p=*pmin;
*pmin=temp;
printf("第一小:%d\n",*p);

pmin=p+1;
for(i=0;i<5;i++) //找第二小值
for(j=0;j<5;j++)
if(((p+5*i+j)!=p)&&(*pmin>*(p+5*i+j))) pmin=p+5*i+j;
temp=*pmin;
*pmin=*(p+4);
*(p+4)=temp;
printf("第二小:%d\n",*(p+4));

pmin=p+1;
for(i=0;i<5;i++) //找第三小值
for(j=0;j<5;j++)
if(((p+5*i+j)!=(p+4))&&((p+5*i+j)!=p)&&(*pmin>*(p+5*i+j))) pmin=p+5*i+j;
temp=*pmin;
*pmin=*(p+20);
*(p+20)=temp;
printf("第三小:%d\n",*(p+20));

pmin=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))&&(*pmin>*(p+5*i+j))) pmin=p+5*i+j;
temp=*pmin;
*pmin=*(p+24);
*(p+24)=temp;
printf("第四小:%d\n",*(p+24));
}



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: