[C语言]指针之二维数组调整函数:阅读下面程序,完成下面函数,将一个5×5的矩阵(二维整型数组)中最大的元素存放在中心,4个角分别放4个最小的元素(顺序为从左到右,从上到下顺序依次从小到大存放)。存放

阅读下面程序,完成下面函数,将一个5×5的矩阵(二维整型数组)中最大的元素存放在中心,4个角分别放4个最小的元素(顺序为从左到右,从上到下顺序依次从小到大存放)。存放方式即与原来元素互换。假定数组中元素各不相同。请使用指针实现。

#include <stdio.h>
#define N 5
void change(int *p)
{
     ///程序填空,请将该函数填写完整
}
int main()
{
    int a[N][N], i, j, *p;
    for (i = 0; i < N; i++)
        for (j = 0; j < N; j++)
            scanf("%d", &a[i][j]);
    p = &a[0][0];
    change(p);
    for (i = 0; i < N; i++)
    {
        for (j = 0; j < N; j++)
            printf("%d ", a[i][j]);
        printf("\n");
    }
    return 0;
}

输入

输入包含五行,为按照行列顺序输入的二维数组元素。
第一行到第五行每行均有5个整数,相邻两项之间用一个空格隔开。

输出

输出包含五行,是调整后的矩阵。每行均有5个整数,相邻两项之间用一个空格隔开。

输入示例

35 34 33 32 31
30 29 28 27 26
25 24 23 22 21
20 19 18 17 16
15 14 13 12 11

输出示例

11 34 33 32 12
30 29 28 27 26
25 24 35 22 21
20 19 18 17 16
13 23 15 31 14

数据范围

输入输出均为int范围的整数

#include <stdio.h>
#define N 5
void change(int *p)
{
	int cpy[25],i,j,t,a,b,c,d,max;
	for(i=0;i<25;i++){
		cpy[i]=*(p+i);
	}
	for (j=0;j<25;j++){
        for (i=0;i<25-j-1;i++){
            if (cpy[i]>cpy[i+1]){
                t=cpy[i];
                cpy[i]=cpy[i+1];
                cpy[i+1]=t;
            }
        } 
    }
    a=cpy[0];
    b=cpy[1];
    c=cpy[2];
    d=cpy[3];
    max=cpy[24];
	for(i=0;i<25;i++){
		if(*(p+i)==a){
			*(p+i)=*p;
			*p=a;
		}
	}
	for(i=0;i<25;i++){
		if(*(p+i)==b){
			*(p+i)=*(p+4);
			*(p+4)=b;
		}
	}
	for(i=0;i<25;i++){
		if(*(p+i)==c){
			*(p+i)=*(p+20);
			*(p+20)=c;
		}
	}
	for(i=0;i<25;i++){
		if(*(p+i)==d){
			*(p+i)=*(p+24);
			*(p+24)=d;
		}
	}
	for(i=0;i<25;i++){
		if(*(p+i)==max){
			*(p+i)=*(p+12);
			*(p+12)=max;
		} 
    }
}
int main() {
    int a[N][N], i, j, *p;
    for (i = 0; i < N; i++)
        for (j = 0; j < N; j++)
            scanf("%d", &a[i][j]);
    p = &a[0][0];
    change(p);
    for (i = 0; i < N; i++)
    {
        for (j = 0; j < N; j++)
            printf("%d ", a[i][j]);
        printf("\n");
    }
    return 0;
}

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值