/*将一个5*5的矩阵中最大的元素放在中心,4个角分别放4个最小的元素(顺序为从左到右,
从上到下依次从小到大存放),写一函数实现之。用main函数调用*/

#include <stdio.h>

int main()
{
	int fun(int a[][5]);
	int a[5][5];
	int i,j;
	
	printf("请输入:\n");
	for(i = 0;i < 5;i++)
	{
		for(j = 0;j < 5;j++)
		{
			scanf("%d",&a[i][j]);
		}
	} 
	
	fun(a);
	
	printf("输出:\n");
	for(i = 0;i < 5;i++)
	{
		for(j = 0;j < 5;j++)
		{
			printf("%d ",a[i][j]);
		}
		printf("\n");
	}
}

int fun(int a[][5])
{
	int fun2(int *p,int *q);
	int (*p)[5];
	p = a;
	int i,j,max,min,k,l,t;
	
	//最大的数 
	max = a[0][0];
	for(i = 0;i < 5;i++)
	{
		for(j = 0;j < 5;j++)
		{
			if(*(*(p + i) + j) > max)
			{
				max = *(*(p + i) + j);
				k = i;
				l = j;
			}
	    }
	}
    fun2(*(p + 2) + 2,*(p + k) + l);
    
    //最小的数 
    min = a[0][0];
    k = l = 0;
	for(i = 0;i < 5;i++)
	{ 
		for(j = 0;j < 5;j++)
		{
			if(*(*(p + i) + j) < min)
			{
				min = *(*(p + i) + j);
				k = i;
				l = j;
			}
	    }
	}
    fun2(*(p + 0) + 0,*(p + k) + l);
    
	//第二小的数 
    min = a[0][1];
    k = 0;
	l = 1; 
	for(i = 0;i < 5;i++)
	{
		for(j = 0;j < 5;j++)
		{
			if(i == 0&&j == 0) continue;
			if(*(*(p + i) + j) < min)
			{
				min = *(*(p + i) + j);
				k = i;
				l = j;
			}
	    }
	}
    fun2(*(p + 0) + 4,*(p + k) + l);
    
    //第三小的数 
    min = a[0][1];
    k = 0;
    l = 1;
	for(i = 0;i < 5;i++)
	{
		for(j = 0;j < 5;j++)
		{
			if(i == 0&&j == 0) continue;
			if(i == 0&&j == 4) continue;
			if(*(*(p + i) + j) < min)
			{
				min = *(*(p + i) + j);
				k = i;
				l = j;
			}
	    }
	}
    fun2(*(p + 4) + 0,*(p + k) + l);
    
    //第四小的数 
	min = a[0][1];
	k = 0;
	l = 1;
	for(i = 0;i < 5;i++)
	{
		for(j = 0;j < 5;j++)
		{
			if(i == 0&&j == 0) continue;
			if(i == 0&&j == 4) continue;
			if(i == 4&&j == 0) continue;
			
			if(*(*(p + i) + j) < min)
			{
				min = *(*(p + i) + j);
				k = i;
				l = j;
			}
	    }
	}
    fun2(*(p + 4) + 4,*(p + k) + l);
}

int fun2(int *p,int *q)
{
	int t;
	t = *p;
	*p = *q;
	*q = t;
}

谭浩强C程序设计(第四版)p291第10题
复习:
1.如何用指针表示二维数组
2.如何用字符数组名做指针表示二维数组
我只是按照我自己理解的题目要求解答的题目,在我感觉这道题出的有点无聊,唯一的好处就是我知道了二维数组怎么用指针表示。
运行结果:
在这里插入图片描述

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐