首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

将矩阵中的最大值放到中央,四个角落一次放最小值的题目

2013-02-18 
将矩阵中的最大值放到中心,四个角落一次放最小值的题目下面这个程序可以编译通过,也可以运行,但结果不是要

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

//将一个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

热点排行