| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2034 人关注过本帖
标题:c程序设计中的3*3矩阵转置问题,请问这个程序哪里出错了?谢谢!
只看楼主 加入收藏
fallenpeanut
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2015-4-8
结帖率:100%
收藏
已结贴  问题点数:5 回复次数:8 
c程序设计中的3*3矩阵转置问题,请问这个程序哪里出错了?谢谢!
#include<stdio.h>
int main()
{
    int a[2][2];
    int b[2][2];
    int i,j;
    int m,n;
    int h,k;
    printf("Please enter a matrix:\n");
    for(i=0;i<=2;i++)
        for(j=0;j<=2;j++)
        scanf("%d",&a[i][j]);
    //输入矩阵用
   
    for(m=0;m<=2;m++)
        for(n=0;n<=2;n++)
        {
        b[n][m]=a[m][n];
        }
    //矩阵转置
    printf("Afer transpositon,the new matrix is:\n");
    for(h=0;h<=2;h++)   
    {
        {
        for(k=0;k<=2;k++)
        printf("%d ",b[h][k]);
        }
        printf("\n");
    }
    //打印转置后的新矩阵
    return 0;
}
搜索更多相关主题的帖子: c程序设计 include matrix 
2015-04-17 13:17
我爱吃青菜
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:6
帖 子:190
专家分:500
注 册:2015-3-29
收藏
得分:5 
3*3不应该声明3的元素的数组吗?a[3][3]
2015-04-17 13:21
fallenpeanut
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2015-4-8
收藏
得分:0 
回复 2楼 我爱吃青菜
额,醍醐灌顶。。。原来把数组定义和引用时的下标弄混了ORZ……谢谢!
2015-04-17 13:34
fallenpeanut
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2015-4-8
收藏
得分:0 
回复 2楼 我爱吃青菜
你好,关于刚才的转置问题,书本中给出的答案是:
#include<stdio.h>
#define N 3
int array[N][N];
int main()
{void convert(int array[][3]);
int i,j;
    printf("input array:\n");
    for(i=0;i<N;i++)
        for(j=0;j<N;j++)
            scanf("%d",&array[i][j]);
    printf("\noriginal array:\n");
    for(i=0;i<N;i++)
        {for(j=0;j<N;j++)
        printf("%5d",array[i][j]);
        printf("\n");
        }
convert(array);
printf("convert array:\n");
    for(i=0;i<N;i++)
        {for(j+0;j<N;j++)
        printf("%5d",array[i][j]);
        printf("\n");
        }
    return 0;
}

void convert(int array[][3])
{int i,j,t;
for(i=0;i<N;i++)
    for(j=i+1;j<N;j++)
    {t=array[i][j];
    array[i][j]=array[j][i];
    array[j][i]=t;
    }
}

我运行了也不对,其中对convert函数的定义中的循环,j=i+1这个要怎么理解?谢谢!
2015-04-17 13:52
autumnyellow
Rank: 2
等 级:论坛游民
帖 子:72
专家分:75
注 册:2015-4-14
收藏
得分:0 
回复 4楼 fallenpeanut
j = j+1;和上面的  i=0;的意思一样
再有就是return  0;没放在最后
2015-04-17 15:43
我爱吃青菜
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:6
帖 子:190
专家分:500
注 册:2015-3-29
收藏
得分:0 
回复 4楼 fallenpeanut
第20行 for(j+0;j<N;j++),j没有初始化,肯定是把=写成+了
改成for(j=0;j<N;j++)就可以正常使用了

至于第二个问题,因为转置矩阵是一半与另一半互换,所以只需要循环一半的元素
像a[0][0],a[1][1],a[2][2]原地不动,所以第0行从a[0][1],第1行从a[1][2]开始……以此类推,j总要比i大1作为循环的开始

[ 本帖最后由 我爱吃青菜 于 2015-4-17 21:31 编辑 ]
2015-04-17 17:53
fallenpeanut
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2015-4-8
收藏
得分:0 
回复 5楼 autumnyellow
谢谢!
2015-04-17 19:02
fallenpeanut
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2015-4-8
收藏
得分:0 
回复 6楼 我爱吃青菜
修改后好了,也理解j=i+1的意思了,十分感谢!
2015-04-17 19:04
flierbccn
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2015-4-22
收藏
得分:0 
int a[3][3];
2015-04-22 11:38
快速回复:c程序设计中的3*3矩阵转置问题,请问这个程序哪里出错了?谢谢!
数据加载中...
 
   



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

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