将一个5x5的矩阵中最大的元素放在中心,4个角分别放4个最小的元素顺序为从左到右,从上到下依次从小到大存放写一函数实现之,并用main函数调用。
代码用的是C语言。
代码有注释,如有遗漏的点请评论,谢谢!
#include<stdio.h>
void work(int *p); //work函数用来实现题目要求功能
int main()
{
int matrix[5][5];
int *p=&matrix[0][0];
printf("请输入5x5矩阵:\n");
while( p <= (&matrix[4][4]) )
{
scanf("%d", p++);
}
work(&matrix[0][0]);
p=&matrix[0][0];
int i=0;
printf("处理后的数组为:\n");
while( p <= (&matrix[4][4]) )
{
printf("%d ", *p++);
if( (i+1) %5 == 0 )printf("\n");
i++;
}
return 0;
}
void work(int *p)
{
int *q=p; //q用来遍历,p用来初始化q
int *lp=NULL; //lp用来记录符合条件值的地址
int goal; //交换值的中介
//max 即交换最大值
goal = 0;
while( q <= (p+24) )
{
if( *q >goal ){
goal=*q;
lp = q;
}
q++;
}
*lp = *(p+12);
*(p+12) = goal;
//min 即处理交换4个最小值
int i;
for(i=0; i<4; i++) //因为是4个 所以大循环循环4次即可,一次交换一个值
{
for(q=p, goal=*(p+12); q<=(p+24); q++) //用来遍历数组,寻找符合条件的值
{
switch(i) //用来跳过已交换的值的位置
{
case 1: //跳过第一个已交换值
if( q==p ) continue;
break;
case 2: //跳过第二个已交换值
if( q==p || q==(p+4) ) continue;
break;
case 3: //跳过第三个已交换值
if( q==p || q==(p+4) || q==(p+20) ) continue;
break;
}
if( *q < goal){ //用来记录符合条件的值
goal = *q;
lp = q;
}
}
switch(i) //根据i的值 来决定交换哪个位置的值
{
case 0:
*lp = *p;
*p = goal;
break;
case 1:
*lp = *(p+4);
*(p+4) = goal;
break;
case 2:
*lp = *(p+20);
*(p+20) = goal;
break;
case 3:
*lp = *(p+24);
*(p+24) = goal;
break;
}
}
}
本文介绍了一个C语言程序,该程序可以接收用户输入的5x5矩阵,并将矩阵中的最大值移动到中心位置,同时将四个最小值按顺序放置在四个角落。通过遍历和比较,实现了元素的交换。
6512

被折叠的 条评论
为什么被折叠?



