C语言矩阵加法函数未正确打印结果问题求助
问题排查:矩阵相加仅输出第二个矩阵的原因及修复
问题现象
编写C语言矩阵加法计算器时,输入两个矩阵后,输出结果始终是第二个矩阵的内容,而非两矩阵相加的结果。
核心错误分析
局部变量遮蔽全局变量
在fillMatrix函数中,你重新定义了局部数组int matrix1[r1][c1];,这个局部变量会遮蔽全局的matrix1数组。用户输入的第一个矩阵元素全部存储在这个局部数组中,函数执行完毕后局部数组被销毁,全局matrix1始终是初始值0。最终相加时实际是0 + matrix2[i][j],结果自然等于第二个矩阵。缺少矩阵相加合法性检查
矩阵相加的数学规则要求两个矩阵的行数和列数必须完全相同,代码中未做此检查,若输入尺寸不匹配会导致越界访问或错误结果。循环索引不一致
初始化finalmatrix时使用了c2作为列数循环上限,而合法相加场景下c1应等于c2,这种不一致容易引发逻辑混乱。
修复后的完整代码
#include <stdio.h> #include <stdlib.h> // 用于exit函数 int r1, c1, r2, c2, i, j; int matrix1[100][100], matrix2[100][100], finalmatrix[100][100]; void fillMatrix() { printf("Enter the number of rows of first matrix: \n"); scanf("%d", &r1); printf("Enter the number of columns of first matrix: \n"); scanf("%d", &c1); printf("First matrix sizes are:[%d][%d] \n", r1, c1); printf("\nEnter elements of 1st matrix:\n"); for (i = 0; i < r1; ++i) for (j = 0; j < c1; ++j) { printf("Enter element a%d%d: \n", i + 1, j + 1); scanf("%d", &matrix1[i][j]); } printf("Enter the number of rows of second matrix: \n"); scanf("%d", &r2); printf("Enter the number of columns of second matrix: \n"); scanf("%d", &c2); printf("Second matrix sizes are:[%d][%d] \n", r2, c2); printf("\nEnter elements of 2nd matrix: \n"); for (i = 0; i < r2; i++) for (j = 0; j < c2; j++) { printf("Enter the element a%d%d: \n", i + 1, j + 1); scanf("%d", &matrix2[i][j]); } } void addMatrix() { // 检查矩阵尺寸是否符合相加要求 if (r1 != r2 || c1 != c2) { printf("Error: Matrices must have the same number of rows and columns to add.\n"); exit(1); } // 初始化结果矩阵 for (i = 0; i < r1; i++) for (j = 0; j < c1; ++j) finalmatrix[i][j] = 0; // 矩阵相加 for (i = 0; i < r1; i++) for (j = 0; j < c1; j++) finalmatrix[i][j] = matrix1[i][j] + matrix2[i][j]; // 打印结果矩阵 printf("The resulting matrix is: \n"); for (i = 0; i < r1; i++) { for (j = 0; j < c1; j++) { printf("%d ", finalmatrix[i][j]); } printf("\n"); } } int main() { fillMatrix(); addMatrix(); return 0; }
额外优化建议
- 减少全局变量依赖:将矩阵尺寸和数组作为函数参数传递,避免全局变量带来的耦合性和意外修改风险。
- 增加输入合法性校验:检查输入的行数、列数是否为正整数,且不超过数组最大限制(100),避免数组越界访问。
- 代码格式化:保持一致的缩进和代码风格,提升可读性。
内容的提问来源于stack exchange,提问作者JPtheOne
相关产品推荐
相关产品推荐

