使用C编程在eclipse中扩展2D数组的尺寸

时间:2018-05-13 18:23:02

标签: c arrays

我有一个名为 H_initial (3行3列)的二维数组,其中填充了二进制值,零和1。现在我需要通过替换 H_initial 中的零来将2D数组 H_initial 的大小扩展到另一个2D数组 H_final (即6行6列)具有2 * 2零矩阵和具有2 * 2单位矩阵的 H_initial 中的一个。 我首先创建了一个6 * 6零矩阵,然后尝试使用下面的代码用2 * 2单位矩阵替换 H_initial 中的'1',但我没有得到所需的输出。我正在使用Eclipse for Windows编程。另外,我是C编程的新手,我对指针,动态内存分配知之甚少。有人可以帮助我吗。

#define ROWS 6
#define COLS 6

int main()
{
    int i,j,a,b,H_final[6][6];

    // Create a H_initial matrix of size (3x3)
    int H_initial[3][3]={{0, 0, 1}, {0, 1, 0}, {1, 0, 0}};
    printf("H_initial= \n");
    for(i=0; i<3; i++)
    {
        for(j=0; j<3; j++)
        {

            printf("%d\t",H_initial[i][j]);
        }
        printf("\n");
    }

    // Create a zero matrix of size (6*6)
    printf("H_final=\n");
    for(a=0; a<6; a++)
    {
        for(b=0; b<6; b++)
        {
            H_final[a][b] = 0;
            printf("%d\t",H_final[a][b]);
        }
        printf("\n");
    }   

    // Create H_final by replacing 1 with 2*2 identity matrix
    for(i=0;i<3;i++)
    {
        for(j=0;j<3;j++)
        {
            if(H_initial[i][j]==1)
            {
                for(m=0;m<2;m++)
                {
                    for(n=0;n<2;n++)
                    {
                        if(m==n)
                        {
                            H_final[2*i+m][2*j+n]=1;
                        }
                    }

                }
            }
        }
    } 

1 个答案:

答案 0 :(得分:1)

你对内循环做了什么:

            for(m=0;m<1;m++)
            {
                for(n=0;n<1;n++)
                {
                    if(m==n)
                    {
                        H_final[2*i+m][2*j+n)]=1;
                    }
                }

            }

几乎工作,除了你的循环只从0到0计数,所以你只能访问2x2方格的左上角元素。如果你使用例如。应该修复它的for(m=0; m<2; m++)for(n=0; n<2; n++)。您还有一个迷路)要在您访问H_final的循环体中删除。

但是,它过于复杂了,因为你可以用没有那些内环的单行做同样的事情:

            H_final[2*i][2*j] = H_final[2*i+1][2*j+1] = 1;