【C语言】将一个(2N+1)×(2N+1)的矩阵(二维数组)中最大的元素放在中心,4个角分别放4个最小的元素(顺序为从左到右,从上到下依次从小到大存放),写一函数实现之。用main函数调用
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]); //将排列好的指针数组的首元素以指针形式返回
}
相关文章
- 计算机等级考试二级C语言程序设计专项训练题——素数及应用
- C语言 可变参数
- 数据结构之---C语言实现图的数组(邻接矩阵)存储表示
- C语言中的内存分配与释放
- C语言 -- 函数内局部数组
- 一个隐蔽的C语言问题反思
- 《C语言编程初学者指南》一1.9 本章小结
- 《嵌入式Linux与物联网软件开发——C语言内核深度解析》一导读
- C语言:数据的存储
- C语言:sizeof和strlen计算有关数组字节大小
- (第17列)C语言:键盘输入长度为10的数组,统计其中有多少不相同的数据
- LeetCode数据结构_C语言题解系列-数组II&动态规划
- 【华为OD机试 2023最新 】 查找重复代码(C语言 100%)
- 【源代码】将一个整数的每位数分解并按逆序放入一个数组中(用递归算法)(C语言实现)
- C语言与C++语言的特点
- 1008 数组元素循环右移问题 (20 分)C语言
- C语言数组和指针的理解_在取地址运算上的操作_指针加减操作_a 和&a 的区别
- 学习C语言的数组
- C语言二级指针
- 【C语言】C语言学习整理-putchar,printf,getchar,scanf定义及区别
- C语言数据结构-删除数组中的重复项
- C语言应用--数据类型定制一定义和引用