矩阵换位置,用返回指针值的函数的问题
/*将一个5*5的矩阵中最大的元素放在中心,四个角分别放四个最小的元素(顺序从左到右,从上到下顺序依次从小到大存放),写一个函数实现之。用main 函数调用。
例如原来矩阵:
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 */
#include <stdio.h>
#include <stdlib.h>
int *max1(int ai[][5]);
int *min(int ai[][5]);
int main()
{
int ai[5][5];
int ia, ib;
int *temp1, *temp;
temp1 = max1(ai); /*指向最大值,并能记录下行和列*/
temp = min(ai); /*指向4个最小值,并能记录下行和列*/
for(ia = 0; ia < 5; ia++) /*输入数组*/
{
for(ib = 0; ib < 5; ib++)
scanf("%d", &ai[ia][ib]);
}
ai[temp1[1]][temp1[2]] = ai[2][2]; /*把最大值和中间的值换位置*/
ai[2][2] = temp1[0];
ai[temp[1]][temp[2]] = ai[0][0]; /*把最小值1和ai[0][0]换位置*/
ai[0][0] = temp[0];
ai[temp[4]][temp[5]] = ai[0][4]; /*把最小值2和ai[0][4]换位置*/
ai[0][4] = temp[3];
ai[temp[7]][temp[8]] = ai[4][0]; /*把最小值3和ai[4][0]换位置*/
ai[4][0] = temp[6];
ai[temp[10]][temp[11]] = ai[4][4]; /*把最小值4和ai[4][4]换位置*/
ai[4][4] = temp[9];
for(ia = 0; ia < 5; ia++) /*输出数组*/
{
for(ib = 0; ib < 5; ib++)
printf("%d", ai[ia][ib]);
printf("\n");
}
return 0;
}
int *max1(int ai[][5])
{
int max, ia, ib;
int *p1 = (int *)malloc(sizeof(int)*3); /*开辟3个整型的空间*/
max = ai[0][0];
for(ia = 0; ia < 5; ia++) /*求出最大值*/
{
for(ib = 0; ib < 5; ib++)
if(ai[ia][ib] > max)
{
max = ai[ia][ib];
p1[0] = max; /*最大值、行、列保存*/
p1[1] = ia;
p1[2] = ib;
}
}
return p1;
}
int *min(int ai[][5])
{
int min1, min2, min3 ,min4, ia, ib;
int *p = (int *)malloc(sizeof(int)*12); /*开辟12个整型的空间*/
min1 = ai[0][0];
for(ia = 0; ia < 5; ia++) /*求出最小值1*/
{
for(ib = 0; ib < 5; ib++)
if(min1 > ai[ia][ib])
{
min1 = ai[ia][ib];
p[0] = min1; /*最小值1、行、列保存*/
p[1] = ia;
p[2] = ib;
}
}
min2 = ai[0][0];
for(ia = 0; ia < 5; ia++) /*求出最小值2*/
{
for(ib = 0; ib < 5; ib++)
if((min2 > ai[ia][ib])&&(ai[ia][ib] != min1))
{
min2 = ai[ia][ib];
p[3] = min2; /*最小值2、行、列保存*/
p[4] = ia;
p[5] = ib;
}
}
min3 = ai[0][0];
for(ia = 0; ia < 5; ia++) /*求出最小值3*/
{
for(ib = 0; ib < 5; ib++)
if((min3 > ai[ia][ib])&&(ai[ia][ib] != min2)&&(ai[ia][ib] != min1))
{
min3 = ai[ia][ib];
p[6] = min3; /*最小值3、行、列保存*/
p[7] = ia;
p[8] = ib;
}
}
min4 = ai[0][0];
for(ia = 0; ia < 5; ia++) /*求出最小值4*/
{
for(ib = 0; ib < 5; ib++)
if((min4 > ai[ia][ib])&&(ai[ia][ib] != min3)&&(ai[ia][ib] != min2)&&(ai[ia][ib] != min1))
{
min4 = ai[ia][ib];
p[9] = min4; /*最小值4、行、列保存*/
p[10] = ia;
p[11] = ib;
}
}
return p;
}