标题:c语言做矩阵转置出现问题?
只看楼主
leizhanzhi
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2020-5-31
结帖率:33.33%
已结贴  问题点数:5 回复次数:5 
c语言做矩阵转置出现问题?
C语言做2*3矩阵转置,写一个矩阵转置函数,传入原数组,和一个用于转置之后的数组,在函数中输出没有问题,但是在主函数中,输出转置后的数组元素,最后一行出现乱码
程序代码:
void zhuanzhi(float **a,float **b,int i1,int j1)
{
    int i,j;
    for(i=0;i<i1;i++)
    {
        for(j=0;j<j1;j++)
        {
           b[j][i]=a[i][j];
        }
    }
    for (i=0;i<j1;i++)
    {
        for(j=0;j<i1;j++)
        {
            printf("%f ",b[i][j]);
        }
        printf("\n");
    }
}
int main()
{
  int i,j;
  float a[2][3]={1,2,3,8,5,2},b[3][2];
  float *p[3],*q[2];
  p[0]=a[0],p[1]=a[1],p[2]=a[2];
  q[0]=b[0],q[1]=b[1];
  zhuanzhi(p,q,2,3);
      for (i=0;i<3;i++)
    {
        for(j=0;j<2;j++)
        {
            printf("%f ",b[i][j]);
        }
        printf("\n");
    }
  return 0;
}

运行结果如下:

请前辈帮忙解答一下这是为什么
搜索更多相关主题的帖子: for 转置 printf 矩阵 int 
2020-06-12 13:37
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:1 
程序代码:
  //float *p[3],*q[2];
  //p[0]=a[0],p[1]=a[1],p[2]=a[2];
  //q[0]=b[0],q[1]=b[1];
  float *p[2],*q[3];
  p[0]=a[0],p[1]=a[1];
  q[0]=b[0],q[1]=b[1],q[2]=b[2];

当然,这种做法挺令人不舒服的
2020-06-12 14:13
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
得分:1 
float a[2][3]={1,2,3,8,5,2}
,p[2]=a[2];
a没 2

同理 b不止1

https://zh.
2020-06-12 14:24
leizhanzhi
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2020-5-31
得分:0 
回复 2楼 rjsp
新手上路,不太清楚二维数据作为传递参数该怎么传递,请问您一般传二维参数使用哪种方式比较好呢
2020-06-12 20:11
nanshahyz
Rank: 2
等 级:论坛游民
帖 子:32
专家分:42
注 册:2020-5-1
得分:1 
#include <stdio.h>
int main()
{
    int i,j,i1,j1,a[101][101],b[101][101];
    printf("please input the number of rows(<=100)\n");
    scanf("%d",&i1);
    printf("please input the number of columns(<=100)\n");
    scanf("%d",&j1);
    printf("please input the element\n");
    for(i=0;i<i1;i++)
        for(j=0;j<j1;j++)
            scanf("%d",&a[i][j]);
    printf("array a:\n");
    for(i=0;i<i1;i++)
    {
        for(j=0;j<j1;j++)
            printf("\t%d",a[i][j]);
        printf("\n");
    }
    for(i=0;i<i1;i++)
        for(j=0;j<j1;j++)
            b[j][i]=a[i][j];
    printf("array b:\n");
    for(i=0;i<j1;i++)
    {
        for(j=0;j<i1;j++)
            printf("\t%d",b[i][j]);
        printf("\n");
    }
    return 0;
}
2020-06-14 09:36
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:2 
以下是引用leizhanzhi在2020-6-12 20:11:24的发言:

新手上路,不太清楚二维数据作为传递参数该怎么传递,请问您一般传二维参数使用哪种方式比较好呢


正儿八经的矩阵运算,得动态分配内存,用一维数组模拟多维数组,因为矩阵运算时很多参数无法在编译时获得。
但仅就你这个“二维数据”的话,那应该直接用“二维数组”,而非什么“指针的数组,指针又指向数组”这种怪胎。
程序代码:
#include <stdio.h>

void matrix_transpose( size_t row, size_t col, const float src[row][col],  float dst[col][row] )
{
    for( size_t r=0; r!=row; ++r )
        for( size_t c=0; c!=col; ++c )
            dst[c][r] = src[r][c];
}

void matrix_print( size_t row, size_t col, float mtx[row][col] )
{
    for( size_t r=0; r!=row; ++r )
        for( size_t c=0; c!=col; ++c )
            printf( "%g%c", mtx[r][c], " \n"[c+1==col] );
}

#define MATRIX_TRANSPOSE(src,dst) matrix_transpose( sizeof(src)/sizeof(*(src)), sizeof(*(src))/sizeof(**(src)), (src), (dst) )
#define MATRIX_PRINT(mtx)         matrix_print( sizeof(mtx)/sizeof(*(mtx)), sizeof(*(mtx))/sizeof(**(mtx)), (mtx) )

int main( void )
{
    float a[2][3] = { {1,2,3}, {8,5,2} };
    float b[3][2];
    MATRIX_TRANSPOSE( a, b );

    MATRIX_PRINT( a );
    MATRIX_PRINT( b );
}
2020-06-15 08:56



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-502092-1-1.html




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

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