| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 842 人关注过本帖
标题:5*5矩阵转变函数问题
只看楼主 加入收藏
Danser
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2009-8-28
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:3 
5*5矩阵转变函数问题
新手做题,大家帮忙看看。。。。
题目:将一个5*5的矩阵中最大的元素放在中心,4个叫分别放4个最小的元素(顺序为从左到右、从上到下、从小到打依次存放)。。。。
void exchange(int (*p)[5])  //转变的函数
{
 int i,j,k=0,l,*p1,temp,a[4];
 //下面为求出最大的元素,并存放,这里应该没问题//
 p1=*p;
 for(i=0;i<5;i++)
  for(j=0;j<5;j++)
  {
      if(*p1<*(*(p+i)+j))
          p1=*(p+i)+j;
  }
 temp=*(*(p+2)+2);
 *(*(p+2)+2)=*p1;
 *p1=temp;
     
 //下面为求出4个最小元素,问题就出在这里了//
 p1=*p;
 while(k<4)  //k表示求出的最小元素的个数,值从0到3//
 {
     for(i=0;i<5;i++)  //寻找最小元素//
         for(j=0;j<5;j++)
         {
             for(l=0;a[l]!='\0';l++)   //我把前面找出的最小元素值存放在一个数组a[4]里//
                if(*(*(p+i)+j)==a[l])
                     continue;    //如果出现了跟前面求出的最小元素的值相同的情况,
                                    直接跳过下面的判断//
             if(*p1>*(*(p+i)+j)) //判断最小元素//
                p1=*(p+i)+j;
         }
  a[k]=*p1;  //把找出的最小元素值存入a,但问题就出现在这里,就是赋值失败,
                我试过printf出a[k],但得不到预期的结果//
  if(k==0)  //这里是确定最小元素存放的位置//
      i=0,j=0;
  if(k==1)
      i=0,j=4;
  if(k==2)
      i=4,j=0;
  if(k==3)
      i=4,j=4;
  temp=*(*(p+i)+j);
  *(*(p+i)+j)=*p1;
  *p1=temp;
  k++;  //求下一个最小元素//
 }
}
void main()
{
    int a[5][5];
 int i,j;
 for(i=0;i<5;i++)  //输入矩阵
  for(j=0;j<5;j++)
   scanf("%d",*(a+i)+j);
 exchange(a);
 printf("\n");
 for(i=0;i<5;i++)  //输出结果
 {
  for(j=0;j<5;j++)
   printf("%d ",*(*(a+i)+j));
  printf("\n");
 }
}
就是我标有颜色那里,应该有问题吧。。。。
我找不出错误的原因。。。。
麻烦各路老手帮忙指点一下,主要是说出哪里错误,和改怎样修改此处就行了。。。。
不用另外写出新函数的,我只想知道为什么会出错。。。。
先谢谢了。。。。
搜索更多相关主题的帖子: 函数 矩阵 
2009-08-28 16:18
VGAC
Rank: 2
等 级:论坛游民
帖 子:4
专家分:10
注 册:2008-10-11
收藏
得分:10 
- -,程序中的数组指针用错了,int (*p)[5]是定义了一个数组指针,对变量p的操作是对整个数组操作不能对数组中的元素单独执行操作
   这只是我个人的想法,不知道对不对,如有错请指正
(其实我对数组指针的用法不太理解
2009-08-28 16:35
xuleiyee001
Rank: 2
等 级:论坛游民
帖 子:44
专家分:17
注 册:2009-4-21
收藏
得分:0 
就是行和列的问题
2009-08-28 20:51
arthaszu
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:90
专家分:163
注 册:2009-6-29
收藏
得分:10 
LZ的题目是自己想的,还是完整的题目呢?你的这种说法,可以有很多种排列顺序。因为你没有规定其它元素的排放顺序。楼主的题目可以通过
1.先声明一个一维数组a[25],通过冒泡,把所有数字按从小到大排列。
2.声明一个二维数组b[5][5],通过指针的位置移动,把最大元素送到p+12,继续移动指针的位置,把数组a[25]里排列好的,从小到大的数值,分别送到p,p+4,p+20,p+24。
3.剩下的元素,你自己随意放置吧。

To  four  years  in  each  other's
2009-08-29 09:34
快速回复:5*5矩阵转变函数问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.012037 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved