【C语言】将一个(2N+1)×(2N+1)的矩阵(二维数组)中最大的元素放在中心,4个角分别放4个最小的元素(顺序为从左到右,从上到下依次从小到大存放),写一函数实现之。用main函数调用

解题思路:见代码内注释。需要注意的是,之所以在四个放置角上的元素时使用了多个循环视为了,屏蔽掉之前已经放置好的的最小元素。

3×3矩阵举例

 编写程序:

#include<stdio.h>
int main(){
	int *fun(int a[5][5]);		//函数声明 
	int m[5][5]={0};			//定义一个接收输入矩阵的二维数组 
	int i,*p=m[0];				//输入用指针并初始化
	printf("输入5x5的矩阵:\n"); 
	for(i=0;i<25;i++)
		scanf("%d",p++);
	printf("重新排列得:\n");
	for(i=0,p=fun(m);i<25;i++){			
		printf("%2d",*p++);	//控制每行输出元素间隔 
		if((i+1)%5==0) 			
			printf("\n");
	}	
	return 0; 
}
/*--排列函数--*/
int *fun(int a[5][5]){
	int i,j,tmpe,*max,*min;		
	int *b[25],*p=&a[0][0];	
	for(i=0;i<25;i++)
		b[i]=p++;	//指向原二维数组各元素的指针数组 
	/*--中心元素--*/ 
	for(i=1,max=b[0];i<25;i++){
		if(*max<*b[i])
			max=b[i];	
		}
	//将元素值交换 
	tmpe=*b[12];
	*b[12]=*max;
	*max=tmpe;
	//左上角元素
	for(i=1,min=b[0];i<25;i++){		 
		if(*min>*b[i])
			min=b[i];	
		}
	//元素值交换 
	tmpe=*b[0];
	*b[0]=*min;
	*min=tmpe;
	//左上角元素 	
	for(i=2,min=b[1];i<25;i++){	 
		if(*min>*b[i])
			min=b[i];
		}
	//元素值交换 
	tmpe=*b[4];
	*b[4]=*min;
	*min=tmpe;
	/*--左下角元素--*/ 
	for(i=1,min=b[1];i<4;i++){		
		if(*min>*b[i])
			min=b[i];
		} 
	for(i=5;i<25;i++){		
		if(*min>*b[i])
			min=b[i];
		} 
	//元素值交换 
	tmpe=*b[20];
	*b[20]=*min;
	*min=tmpe;
	/*--右下角第四小元素--*/ 
	for(i=1,min=b[1];i<4;i++){	//先在数组左上角元素和右上角元素之间找最小元素 
		if(*min>*b[i])
			min=b[i];
		} 
	for(i=5;i<20;i++){			//再从右上角元素和左下角元素之间找最小元素
		if(*min>*b[i])
			min=b[i];
		} 
	for(i=21;i<25;i++){		//最后从左下角元素之后找最小值 
		if(*min>*b[i])
			min=b[i];
		} 
	//元素值交换
	tmpe=*b[24];
	*b[24]=*min;
	*min=tmpe;
	return(b[0]);		//将排列好的指针数组的首元素以指针形式返回 
}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

.魚肉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值