如图,二维数组的方阵转换程序,请问它是怎么把二维数组转换成一维数组的,请详细解释一下,谢谢!

2025-04-16 06:37:51
推荐回答(1个)
回答1:

你说的是矩阵转换吧,先说转一维这个方法

我先给你讲一下原理:

二维数组可以看成一位数组的集合,比如x[3][3],就可以看做,三个x[3]的集合

这种可以看成军训时站队,第一行第一列就x[0][0],那么第二行第一列,就是x[1][0];

如果我直接进行编号 我放弃二维数组的编号,第一行数完我接着数,第二行第一列,就变成x[3]也就是第四个。

我先给你看个比较容易理解的

int i,j,k=0;
for(i=0;ifor(j=0;jb[k++]=a[i][j];//两次循环把所有的数按顺序赋值到一维数组b里面,矩阵转置要改变位置

就以小键盘为例,行列转换,753不动,19,48,26,互换,最后就变成了741,852,963,

我给你加一下代码注释:

#include
int at(int a[],int n)
{
    int i,j,t;
    for(i=0; i        for(j=i+1; j        {
            t=a[i*n+j];//把a[1](8)的值给了t
            a[i*n+j]=a[j*n+i];//把a[3](4)给了a[1],a[1]变成了4
            a[j*n+i]=t;//8赋值给a[3],经过第一次转换,第一行变成了7,4,9,第二行变成了8,5,6
        }/*
            看不懂代码就用笨办法把数值带进去走一遍
            这个代码一共要进行6次循环,其中三次都是多余
            真正实现了转置的只有48,19,26三次。
            所以你有兴趣可以继续学习快速转置。
        
        */
}
int main(void)
{
    int x[3][3]= {7,8,9,4,5,6,1,2,3},i,j;
    at(x,3);
    for(i=0; i<3; i++)
    {
        for(j=0; j<3; j++)
        {
            printf("%d ",x[i][j]);
        }
        printf("\n");
    }
    return 0;
}

而且你截图里的部分代码出现了错误,我已帮你改正