读书人

将矩阵中的最大值放到中央四个角落一

发布时间: 2013-02-18 10:50:49 作者: rapoo

将矩阵中的最大值放到中心,四个角落一次放最小值的题目
下面这个程序可以编译通过,也可以运行,但结果不是要求的那样,这个问题也不太好断点调试,还请大家帮忙看看, 再想请教下,下次这种问题怎样调试啊? 有什么帮助文件可以看吗?

//将一个5*5 矩阵中的最大元素放到中心,4个角分别按从上到下,从左到右的顺序放4个最小的元素,用main函数调用。
# include <stdio.h>
void change (int *p)
{
int *min,*max,i,j,temp;
min=p;
max=p;
for (i=0;i<5;i++)
//for (j=0;j<5;j++)
for (j=0;j<5;j++)

{
if (*max<*(p+5*i+j)) *max=*(p+5*i+j); //问题是出在这里吗?
if (*min>*(p+5*i+j)) *min=*(p+5*i+j);
}

temp=*max; //将最大值与中心值互换;
*max=*(p+12);
*(p+12)=temp;

temp=*min; //将最小值放到左上角;
*min=*p;
*p=temp;

min=p+1;

for (i=0;i<5;i++)
for (j=0;j<5;j++)
{
if (i==0&&j==0) continue;
if (*min>*(p+5*i+j))
*min=*(p+5*i+j);
}

temp=*min; //将第二小的值放到右上角;
*min=*(p+4);
*(p+4)=temp;

min=p+1;

for (i=0;i<5;i++)
for (j=0;j<5;j++)
{
if ((i==0&&j==0)||(i==0&&j==4)) continue;
if (*min>*(p+5*i+j))
*min=*(p+5*i+j);
}

temp=*min; //将第三小的值放到左下角;
*min=*(p+20);
*(p+20)=temp;

min=p+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)) continue;
if (*min>*(p+5*i+j))
*min=*(p+5*i+j);
}

temp=*min; //将第四小的值放到右下角;
*min=*(p+24);
*(p+24)=temp;
return;
}
int main ()
{
int a[5][5],i,j,*p;
printf ("the original matrix is :\n");
for (i=0;i<5;i++)
for (j=0;j<5;j++)
{
scanf ("%d",&a[i][j]);
}
p=&a[0][0];
change (p);
printf ("now,matrix is :\n");
for (i=0;i<5;i++)
{
for (j=0;j<5;j++)
{
printf ("%d ",a[i][j]);


}
printf ("\n");
}
printf ("\n");

return 0;
}

[解决办法]
单步调试和设断点调试是程序员必须掌握的技能之一。

[解决办法]
打个断点,按F10,一步一步看,先看你要求的值是不是你需要的,然后再看放的位置是不是你要的位置
------解决方案--------------------


用VC60,要善用F9 F10 F11

读书人网 >C语言

热点推荐