在Eclipse中用C语言扩展二维数组维度的问题求助
解决3x3矩阵扩展为6x6矩阵的问题
嘿,作为C语言新手遇到这个问题很正常,我帮你梳理下代码里的问题,然后给出修正后的版本:
你的代码里的几个问题:
- 未声明变量:你在嵌套循环里用了
m和n,但没有提前声明它们,这会导致编译失败——C语言要求变量必须先声明再使用。 - 打印时机错误:你在初始化完全零的H_final后立刻打印了,但替换单位矩阵的操作是在打印之后执行的,所以你看到的始终是初始的全零矩阵,看不到替换后的结果。
- 缺少main函数的返回值:虽然C标准允许main函数省略
return 0;,但加上它会让代码更规范,符合良好的编程习惯。
修正后的完整代码
#define ROWS 6 #define COLS 6 int main() { int i, j, a, b, m, n; // 新增m和n的声明 // 创建3x3的H_initial矩阵 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"); } // 创建6*6的零矩阵 int H_final[6][6]; for(a = 0; a < 6; a++) { for(b = 0; b < 6; b++) { H_final[a][b] = 0; } } // 通过将1替换为2*2单位矩阵创建H_final 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; } } } } } } // 打印最终的H_final矩阵 printf("\nH_final=\n"); for(a = 0; a < 6; a++) { for(b = 0; b < 6; b++) { printf("%d\t", H_final[a][b]); } printf("\n"); } return 0; // 添加返回值 }
代码解释
- 变量声明:在开头把所有需要用到的循环变量
i,j,a,b,m,n都声明了,避免编译错误。 - 调整打印位置:把H_final的打印放到替换操作之后,这样就能看到正确的扩展矩阵。
- 逻辑正确性:你的核心替换逻辑是对的——用
2*i+m和2*j+n来定位6x6矩阵中对应2x2块的位置,当m==n时设置为1(单位矩阵的对角线元素),这个思路没问题。
预期输出
运行修正后的代码,你会得到这样的结果:
H_initial= 0 0 1 0 1 0 1 0 0 H_final= 0 0 0 0 1 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 1 0 0 0 0
内容的提问来源于stack exchange,提问作者scoobydoo
相关产品推荐
相关产品推荐

