Turbo C++中矩阵乘法代码编译正常但运行无输出的错误排查与修正
矩阵乘法代码无输出问题的排查与修复
以下是一段Turbo C++环境下实现矩阵乘法的C代码,编译无报错,但运行时仅能正常获取输入,无法输出乘积矩阵,请排查错误并给出修正方案:
#include<stdio.h> #include<conio.h> void main() { int a[9][9],b[9][9],c[9][9],i,j,m,n,p,q,k; clrscr(); printf("Enter the order of the first matrix:"); scanf("%d%d",&m,&n); printf("Enter the order of the second matrix:"); scanf("%d%d",&p,&q); if(p==n) { for(i=0;i<m;i++) { for(j=0;j<n;j++) { printf("enter1st matrix element of row %d & column %d:",i+1,j+1); scanf("%d",a[i][j]); } } for(i=0;i<p;i++) { for(j=0;j<q;j++) { printf("enter 2nd matrix element of row %d & column %d:",i+1,j+1); scanf("%d",b[i][j]); } } for(i=0;i<m;i++) { for(j=0;j<n;i++) { c[i][j]=0; for(k=0;k<p;k++) { c[i][j]=c[i][j]+a[i][k]*b[k][j]; } } for(i=0;i<m;i++) { for(j=0;j<q;j++) { printf("%d\t",c[i][j]); } printf("\n"); } } } else { printf("Matrix multiplication is invalid !..."); } getch(); }
错误原因分析
- 循环增量错误:矩阵乘法计算的内层循环
for(j=0;j<n;i++)中,循环增量错误使用i++,应改为j++,否则会触发死循环,永远无法执行后续的输出逻辑。 - 输出循环嵌套位置错误:输出乘积矩阵的嵌套循环被错误放在乘法计算的外层循环内部,导致输出逻辑无法正常执行,需将其移至乘法计算循环的外部。
- scanf参数错误:读取矩阵元素时,
scanf需要传入变量的地址,但原代码中a[i][j]和b[i][j]缺少取地址符&,应改为&a[i][j]和&b[i][j],否则会引发内存访问异常,破坏程序运行状态。
修正后的完整代码
#include<stdio.h> #include<conio.h> void main() { int a[9][9],b[9][9],c[9][9],i,j,m,n,p,q,k; clrscr(); printf("Enter the order of the first matrix:"); scanf("%d%d",&m,&n); printf("Enter the order of the second matrix:"); scanf("%d%d",&p,&q); if(p==n) { for(i=0;i<m;i++) { for(j=0;j<n;j++) { printf("enter1st matrix element of row %d & column %d:",i+1,j+1); scanf("%d",&a[i][j]); } } for(i=0;i<p;i++) { for(j=0;j<q;j++) { printf("enter 2nd matrix element of row %d & column %d:",i+1,j+1); scanf("%d",&b[i][j]); } } // 修正循环增量,确保乘法计算正常完成 for(i=0;i<m;i++) { for(j=0;j<q;j++) { c[i][j]=0; for(k=0;k<p;k++) { c[i][j]=c[i][j]+a[i][k]*b[k][j]; } } } // 移至外部的输出循环 for(i=0;i<m;i++) { for(j=0;j<q;j++) { printf("%d\t",c[i][j]); } printf("\n"); } } else { printf("Matrix multiplication is invalid !..."); } getch(); }
内容的提问来源于stack exchange,提问作者user21188552
相关产品推荐
相关产品推荐

