题目:将一个5*5的矩阵中最大的元素放在中心,4个角分别放4个最小的元素(顺序为从左到右,从上到下依次从小到大存放),写一函数实现之。用main函数调用。
有几天没写C了,有点忙,快要考试了,也正在学python和链码?
今天有了点时间,写道C的题。。。
楼主先来分析一下题目啊,5 * 5矩阵,让最大的元素放在中心,4个角分别放4个最小的元素,(感觉像是让排序的节奏。。。).5*5矩阵的中心的地址为p+13,其中p为矩阵首地址
,4个角分别放4个最小的元素(顺序为从左到右,从上到下依次从小到大存放),那也就是左上为最小的,右上为第二个,接下来是左下,右下。分析完毕,可以开始了。。。
楼主代码
#include<stdio.h>
int main()
{int a[5][5];
int i,j;
int *p;
void process(int*p);
printf("please input data(5*5):\n");
for(i=0;i<5;i++)
{for(j=0;j<5;j++)
scanf("%d",&a[i][j]);
}
p=&a[0][0];
process(p);
printf("the answer:\n");
for(i=0;i<5;i++)
{for(j=0;j<5;j++)
{printf("%4d",a[i][j]);
}
printf("\n");
}
return 0;
}
void process(int*p)
{int i,j,temp;
for(i=0;i<25;i++) //利用冒泡排序,对矩阵进行从小到大的排序
{for(j=0;j<24-i;j++)
if(*(p+j)>*(p+j+1))
{temp=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=temp;
}
}
temp=*(p+12);//中间的
*(p+12)=*(p+24);
*(p+24)=temp;
temp=*(p+4);//右上角,因为左上角直接就是最小值了
*(p+4)=*(p+1);
*(p+1)=temp;
temp=*(p+20);//左下角
*(p+20)=*(p+2);
*(p+2)=temp;
temp=*(p+24);//右下角
*(p+24)=*(p+3);
*(p+3)=temp;
}
运行结果
下一篇,,,指针习题10(答案版)