多案例N×N矩阵连乘输出格式异常问题的修复方案咨询
修复多组矩阵乘法案例的输出错误
问题描述
编写的程序用于实现3个N×N矩阵相乘并输出结果,支持多组案例,每组可自定义矩阵阶数n。但输入两组案例(第一组n=2,第二组n=3)时,第一组的输出变成3×3矩阵,第三行第三列显示0值。
问题根源
代码中仅使用单个变量n记录矩阵阶数,在处理完第二组案例后,n的值被更新为3。输出第一组案例时,循环条件仍使用这个n=3,导致超出第一组矩阵的实际范围,多打印的位置未被赋值,显示默认的0。
修复方案
需要为每组案例单独存储对应的矩阵阶数,输出时使用该组的阶数控制循环范围。具体改动如下:
- 新增一个数组
n_list[10],用于保存每组案例的矩阵阶数(数组大小可根据最大案例数调整) - 在读取每组的
n后,将其存入n_list[l] - 输出阶段,将循环条件中的
n替换为当前案例对应的n_list[l]
修改后的完整代码
#include <stdio.h> int main(){ int t, n, i, j, k, l, a[50][50][10], b[50][50][10], c[50][50][10], d[50][50][10], e[50][50][10]; int n_list[10]; // 新增:存储每组案例的矩阵阶数 scanf ("%d", &t); for (l=1; l<=t; l++){ scanf("%d", &n); n_list[l] = n; // 保存当前组的阶数 // matrix a for (i = 0; i < n; i++) { for (j = 0; j < n; j++) { scanf("%d", & a[i][j][l]); } } // matrix b for (i = 0; i < n; i++) { for (j = 0; j < n; j++) { scanf("%d", & b[i][j][l]); } } // matrix c for (i = 0; i < n; i++) { for (j = 0; j < n; j++) { scanf("%d", & c[i][j][l]); } } //Multiplication for (i = 0; i < n; i++) { for (j = 0; j < n; j++) { d[i][j][l] = 0; for (k = 0; k < n; k++) { d[i][j][l] += a[i][k][l] * b[k][j][l]; } } } for (i = 0; i < n; i++) { for (j = 0; j < n; j++) { e[i][j][l] = 0; for (k = 0; k < n; k++) { e[i][j][l] += d[i][k][l] * c[k][j][l]; } } } } //Printing the product for (l=1; l<=t; l++){ printf ("Case #%d:\n", l); // 使用当前组的阶数n_list[l]控制循环 for (i = 0; i < n_list[l]; i++) { for (j = 0; j < n_list[l]; j++) { printf("%d ", e[i][j][l]); } printf("\n"); } } return 0; }
关键改动说明
n_list数组记录了每组案例的矩阵大小,避免了后续案例覆盖n值导致的输出错误- 输出时严格按照当前案例的阶数遍历矩阵,确保只打印对应大小的结果
预期输出效果:
内容的提问来源于stack exchange,提问作者Matthew
相关产品推荐
相关产品推荐

