You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 09:45:28