【C语言】将一个5x5的矩阵中最大的元素放在中心,4个角分别放4个最小的元素顺序为从左到右,从上到下依次从小到大存放写一函数实现之,并用main函数调用

本文介绍了一个C语言程序,该程序可以接收用户输入的5x5矩阵,并将矩阵中的最大值移动到中心位置,同时将四个最小值按顺序放置在四个角落。通过遍历和比较,实现了元素的交换。

将一个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语言实现这个功能,你可以创建一个函数,接收一个二维数组(实际上是一个维数组的层视图)作为参数,并利用指针遍历数组。这里是一个简单的示例代码: ```c #include <stdio.h> #define ROWS 5 // 矩阵行数 #define COLS 5 // 矩阵列数 // 函数声明,接收指向二维数组的指针和行、列大小 void rearrange_matrix(int (*matrix)[COLS], int rows, int cols); // 动态找到最小最大元素及其索引 int find_min_max(int *arr, int size, int *min_index, int *max_index) { int min_val = arr[0]; int max_val = arr[0]; *min_index = 0; *max_index = 0; for (int i = 1; i < size; ++i) { if (arr[i] < min_val) { min_val = arr[i]; *min_index = i; } if (arr[i] > max_val) { max_val = arr[i]; *max_index = i; } } return max_val, min_val; } // 主函数,演示如何调用上述函数 int main() { int matrix[ROWS][COLS] = { ... }; // 填充你的5x5矩阵 int row, col; rearrange_matrix(matrix, ROWS, COLS); // 打印结果 for (row = 0; row < ROWS; row++) { for (col = 0; col < COLS; col++) { printf("%d ", matrix[row][col]); } printf("\n"); } return 0; } // 实现函数,调整矩阵元素 void rearrange_matrix(int (*matrix)[COLS], int rows, int cols) { int center = rows / 2, middle = cols / 2; int min1, min2, min3, min4, max, min, min_index1, min_index2, min_index3, min_index4, max_index; max, min = find_min_max(matrix[center], 1, &max_index, &min_index1); // 中心最大值和其索引 matrix[center][middle] = min; // 最小放在中心 min1, min2 = find_min_max(&matrix[center][0], middle, &min_index2, &min_index3); min3, min4 = find_min_max(&matrix[center][middle+1], middle, &min_index4, NULL); // 两个落的最小值 matrix[min_index1][max_index] = min1; matrix[min_index2][0] = min2; matrix[min_index3][middle-1] = min3; matrix[min_index4][middle+1] = min4; // 其他位置保持不变 } ``` 注意,这个代码假设输入矩阵已经填充完毕。实际使用时,你需要提供一个完整的5x5矩阵。同时,这个例子只处理了偶数维度的情况,如果矩阵是奇数维度,边缘区域需要稍作修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值