zl程序教程

您现在的位置是:首页 >  后端

当前栏目

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

C语言数组 实现 函数 一个 元素 最大 矩阵
2023-09-11 14:18:53 时间

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

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]);		//将排列好的指针数组的首元素以指针形式返回 
}