| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1610 人关注过本帖
标题:矩阵的转置问题
只看楼主 加入收藏
夏日清风
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:71
专家分:126
注 册:2010-4-16
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:10 
矩阵的转置问题
3*3矩阵的转置,有个错误改不出来
#include<stdio.h>
void main()
{
    void zz(int (*p)[3]);
    int a[3][3]={{1,2,3},{4,5,6},{7,8,9}};
    int (*t)[3];
    t=a;
    zz((*t)[3]);
}

void zz(int (*p)[3])
{
    int i,j,temp;
    for(i=0;i<3;i++)
    {
        for(j=0;j<3;j++)
        {
            temp=*((*p+i)+j);
            *((*p+i)+j)=*((*p+2-i)+2-j);
            *((*p+2-i)+2-j)=temp;
        }
    }
    for(i=0;i<3;i++)
    {
        for(j=0;j<3;j++)
        {
            printf("%d ",*(*(p+i)+j));
        }
    }
}
搜索更多相关主题的帖子: 矩阵 
2010-05-24 17:30
forever74
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:CC
等 级:版主
威 望:58
帖 子:1705
专家分:4345
注 册:2007-12-27
收藏
得分:2 
你转得太彻底,转过去又转回来了,
转的那部分代码循环一半就够了for(j=0;j<i;j++)

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2010-05-24 17:36
forever74
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:CC
等 级:版主
威 望:58
帖 子:1705
专家分:4345
注 册:2007-12-27
收藏
得分:2 
另外,你真的想沿着副对角线“转置”?那可不是标准转置的定义啊
那就得for(j=0;j<2-i;j++)

[ 本帖最后由 forever74 于 2010-5-24 17:39 编辑 ]

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2010-05-24 17:38
夏日清风
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:71
专家分:126
注 册:2010-4-16
收藏
得分:0 
回复 2楼 forever74
谢谢,可是还有一个编译错误我找不出来。
2010-05-24 22:17
夏日清风
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:71
专家分:126
注 册:2010-4-16
收藏
得分:0 
cpp(8) : error C2664: 'zz' : cannot convert parameter 1 from 'int' to 'int (*)[3]'这是编译提示,我不知道怎么改。
2010-05-25 12:43
源本英明C
Rank: 3Rank: 3
来 自:日本
等 级:论坛游侠
帖 子:113
专家分:154
注 册:2010-5-14
收藏
得分:3 
你的程序不太容易理解,但是有一点你肯定出问题了,就是在转置的过程中,循环到底了,这样的话本来转过去的,经过1/2以后的再次转置,又转回来了,所以这个函数的功能有问题。
我觉得用这个程序更直观,也更容易理解:
#define N 3
main()
{ int array[N][N],i,j;
  void rotate(int a[N][N]);
 printf("please input the array:\n");
for(i=0;i<N;i++)
  for(j=0;j<N;i++)
 scanf("%d",&array[i][j]);
 rotate(array);
printf("the array after rotated are:\n");
for(i=0;i<N;i++)
  {for(j=0;j<N;i++)
    printf("%5d",array[i][j]);
printf("\n");}
getch();
}
void rotate(int a[N][N])
{ int i,j,t;
for(i=0;i<N;i++)
  for(j=0;j<i;i++)
  {t=a[i][j];a[i][j]=a[j][i];a[j][i]=t;}
}


柔术:打败对手的最好方法就是心狠手辣,因为对手不会给你太多机会,如果他够厉害!
2010-05-25 14:05
qq423000
Rank: 2
等 级:论坛游民
帖 子:21
专家分:20
注 册:2010-5-21
收藏
得分:2 
回复 5楼 夏日清风
zz((*t)[3]);
这里实参是不是弄错了。直接zz(t)吧。
2010-05-25 15:33
simen1986
Rank: 2
等 级:论坛游民
帖 子:12
专家分:64
注 册:2010-5-25
收藏
得分:2 
回答同ls。。。。zz(t)才是对的。。之前是形参,你传输实参时,不需要整个都写进去
2010-05-25 15:54
simen1986
Rank: 2
等 级:论坛游民
帖 子:12
专家分:64
注 册:2010-5-25
收藏
得分:0 
。。。。。。。。

[ 本帖最后由 simen1986 于 2010-5-25 16:27 编辑 ]
2010-05-25 16:16
aiyinsitan
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:183
专家分:177
注 册:2010-4-22
收藏
得分:4 
#include<stdio.h>
void main()
{
    void zz(int (*p)[3]);
    int a[3][3]={{1,2,3},{4,5,6},{7,8,9}};
    int (*t)[3]=a;
    zz(t);
}

void zz(int (*p)[3])
{
    int i,j,temp;
    for(i=0;i<3;i++)
    {
        for(j=0;j<i;j++)
        {
            temp=*(*(p+i)+j);
            *(*(p+i)+j)=*(*(p+j)+i);
            *(*(p+j)+i)=temp;
        }
    }
    for(i=0;i<3;i++)
    {
        for(j=0;j<3;j++)
        {
            printf("%d ",*(*(p+i)+j));
        }
        printf("\n");
    }
}
图片附件: 游客没有浏览图片的权限,请 登录注册
2010-05-25 16:25
快速回复:矩阵的转置问题
数据加载中...
 
   



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

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