运行结果和要求不符。帮看一下。谢谢。

来源:百度知道 编辑:UC知道 时间:2024/07/03 03:22:56
/*将一个5*5的矩阵中最大的元素放在中心,
4个角分别放4个最小的元素(顺序从左到右,从上到下顺序依次从小到大存放)
写一函数实现之。用main函数调用。*/
#include <stdio.h>
void pro(int a[5][5])
{
int (*p)[5];
int i,j,temp;
int *max,*min1,*min2,*min3,*min4;
p=a;
max=&a[0][0];
min1=&a[0][0];
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
{
if(*(*(p+i)+j)>*max)max=*(p+i)+j;
else if(*(*(p+i)+j)<*min1)min1=*(p+i)+j;
}
}
temp=a[2][2];a[2][2]=*max;*max=temp;
temp=a[0][0];a[0][0]=*min1;*min1=temp;
min2=&a[0][1];
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
{
if(i!=0&&j!=0)
{
if(*(*(p+i)+j)<*min2)min2=*(p+i)+j;
}
}
}
temp=a[0][4];a[0][4]=*min2;*min2=temp;
min3=&a[0][1];
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
{
if((i!=0&&j!=0)||(i!=0&&j!=4))
{
if(*(*(p+i)+j)<*min3)min3=*(p+i)+j;
}<

从第二小的数开始错了.
min2=&a[0][1];
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
{
if(i!=0&&j!=0)/*这个条件错了,应该改为if((i==0&&j>1)||(i!=0)),你丢了第0行的那几个元素.同理,下面的第3小第4小的条件也错了*/
{
if(*(*(p+i)+j)<*min2)min2=*(p+i)+j;
}
}
}
temp=a[0][4];a[0][4]=*min2;*min2=temp;
min3=&a[0][1];
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
{
if((i!=0&&j!=0)||(i!=0&&j!=4))/*同理,此条件也错,应该改为if((i!=0)||(i==0&&j>1&&j!=4))*/
{
if(*(*(p+i)+j)<*min3)min3=*(p+i)+j;
}
}
}
temp=a[4][0];a[4][0]=*min3;*min3=temp;
min4=&a[0][1];
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
{
if((i!=0&&j!=0)||(i!=0&&j!=4)||(i!=4&&j!=0))/*改为if((i==0&&j>1&&j!=4)||(i==4&&j!=0)||(i!=0&&i!=4))*/
{
if(*(*(p+i)+j)<*min4)min4=*(p+i)+j;
}
}
}
temp=a[4][4];a[4][4]=*min4;*min4=temp;
}
补充:if(i!=0&&j!=0)后面的语句,是在同时满足i!=0和j!=0两个条件时才执行的,他们是