| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2693 人关注过本帖
标题:行列互换
只看楼主 加入收藏
张君
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:57
专家分:113
注 册:2010-5-13
结帖率:40%
收藏
已结贴  问题点数:20 回复次数:8 
行列互换
#include<stdio.h>
int a[3][2];
main ()
{
clrscr();
scan();
print();
swap(a);
print();
}
int scan ()/*调用输入*/
{
  int i,j;
  for(i=0;i<3;i++)
   {
    for (j=0;j<2;j++)
    scanf("%d",&a[i][j]);
   }
}
int swap(int a[3][2])
   {
   int i,j,b[2][3];
   for(i=0;i<3;i++)
   {
     for(j=0;j<2;j++)
      b[j][i]=a[i][j];
    }
    for(i=0;i<2;i++)
      {
      for(j=0;j<3;j++)
       a[i][j]=b[i][j];
      }



  }
  int print()
  {
  int i,j;
  for(i=0;i<3;i++)
    {
    for(j=0;j<2;j++)
     printf(" %d",a[i][j]);
     printf("\n");
    }
  printf("\n");
  }

[ 本帖最后由 张君 于 2010-6-13 11:03 编辑 ]
搜索更多相关主题的帖子: 行列 
2010-06-13 08:50
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:5 
回复 楼主 张君
你最好定义一个 临时数组 ,

我就是真命天子,顺我者生,逆我者死!
2010-06-13 08:57
kettle99
Rank: 2
等 级:论坛游民
帖 子:52
专家分:54
注 册:2010-5-25
收藏
得分:5 
行列转换前是2行3列,转换后变3行2列了,所以你的输出函数肯定不对了。a[i][j]=a[j][i];你的数组不存在a[2][3]

[ 本帖最后由 kettle99 于 2010-6-13 09:53 编辑 ]
2010-06-13 09:50
gaoce227
Rank: 4
来 自:山东
等 级:业余侠客
帖 子:134
专家分:218
注 册:2008-4-5
收藏
得分:0 
你的scan函数和print函数输出数组是一样的,不存在行列转换。
另外,我觉得你的第二句没什么用处啊。

[ 本帖最后由 gaoce227 于 2010-6-13 10:30 编辑 ]
2010-06-13 10:29
kettle99
Rank: 2
等 级:论坛游民
帖 子:52
专家分:54
注 册:2010-5-25
收藏
得分:5 
#include<stdio.h>
int a[3][3],*p=a;
main ()
{
clrscr();
scan();
print();
swap(a);
print();
}
int scan ()/*调用输入*/
{
  int i,j;
  for(i=0;i<3;i++)
   {
    for (j=0;j<3;j++)
    scanf("%d",&a[i][j]);
   }
}
int swap(int a[3][3])
   {
   int i,j,temp,p=a;
   for(i=0;i<3;i++)
   {
     for(j=i;j<3;j++)
    { temp=a[i][j];
      a[i][j]=a[j][i];/*行列交换*/
      a[j][i]=temp;
    }
   }
  }
  int print()/*调用输出*/
  {
  int i,j;
  for(i=0;i<3;i++)
    {
    for(j=0;j<3;j++)
     printf(" %d",a[i][j]);
     printf("\n");
    }
  printf("\n");
  }

把程序改成这样,这样的话就能实现3*3数组的行列互换了。

注意是j=i而不是j=0,如果是j=0,则完成了两次互换,矩阵就保持不变了(如a[0][1]先和a[1][0]互换,再执行一次后,a[1][0]先和a[0][1]互换)
  }

[ 本帖最后由 kettle99 于 2010-6-13 10:45 编辑 ]
2010-06-13 10:39
kettle99
Rank: 2
等 级:论坛游民
帖 子:52
专家分:54
注 册:2010-5-25
收藏
得分:0 
以下是引用gaoce227在2010-6-13 10:29:10的发言:

你的scan函数和print函数输出数组是一样的,不存在行列转换。
另外,我觉得你的第二句没什么用处啊。
人家小姑娘调用了SWAP函数了,那不是交换了行列了嘛
2010-06-13 10:40
张君
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:57
专家分:113
注 册:2010-5-13
收藏
得分:0 
呵呵,我会不用调用做行列互换,可是以调用就感觉比较笨了,我会再改改的,呵呵,

做自己就好,保持自己,记得微笑
2010-06-13 21:26
BJ_BOY
Rank: 4
等 级:业余侠客
威 望:1
帖 子:77
专家分:225
注 册:2010-2-4
收藏
得分:5 
请参照坛子里《C语言与程序设计大学教程》习题与答案(第八章)中关于二维数组转置的内容!

二维数组的转置要考虑是“就地转置”,还是“非就地转置”。所谓“就地”,就是不定义多余的数组,转前和转后都是“自身”。要实现二维数组的“就地转置”,需要二维数组是个“方阵”。根据你的程序来看,你要实现的是“非就地转置”。
2010-06-13 22:18
张君
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:57
专家分:113
注 册:2010-5-13
收藏
得分:0 
回复 8楼 BJ_BOY
谢了

做自己就好,保持自己,记得微笑
2010-06-14 07:56
快速回复:行列互换
数据加载中...
 
   



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

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