我有一个名为 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;
}
}
}
}
}
}
答案 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;