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

C语言通过嵌套循环实现矩阵乘法代码运行异常求助

C语言矩阵乘法代码问题排查与修正

核心问题汇总

  • 变长数组定义顺序错误:C语言中变长数组(VLA)的大小在定义时就确定,你在k/m/l都为0的时候就定义了三个矩阵,后续修改维度变量不会更新数组大小,数组实际长度为0,访问直接越界触发崩溃。
  • 第二个矩阵维度输入错误:输入第二个矩阵维度时,错误地把值写到了k和m变量中,覆盖了第一个矩阵的维度,也没有给第二个矩阵的列数l赋值,导致l全程为0,后续循环逻辑完全错误。
  • 第二个矩阵存储对象错误:录入第二个矩阵元素时,错误地写入了第一个矩阵a的地址,直接覆盖了第一个矩阵的原有数据,也没有写入目标数组a1。
  • 结果打印逻辑错误:打印结果时下标错误使用了固定的k/l而非循环变量i/j,输出标识也错误写为a而非结果矩阵c。

修正后完整代码

#include <stdio.h>
int main()
{
    int k=0,m=0,l=0,s=0; 
    // 先输入维度,再定义变长数组
    printf("Enter the dimension of first matrix (row and column)>> \n");
    scanf("%d%d",&k,&m);
    printf("Enter the dimension of second matrix (row and column)>> \n");
    // 第二个矩阵的行必须等于第一个矩阵的列m,先读取再做合法性校验
    int a1_row;
    scanf("%d%d",&a1_row,&l);
    if(a1_row != m) {
        printf("Matrix dimension mismatch: first matrix column must equal second matrix row!\n");
        return 1;
    }
    // 维度确认后再定义数组
    int a[k][m],a1[m][l],c[k][l];
    
    printf("First matrix elements are inputted from below >> \n");
    for (int i = 0; i < k ; i++)
    {
        for (int j = 0; j < m; j++)
        {
            printf("a[%d][%d]>> ",i,j);
            scanf("%d",&a[i][j]);
        }
        printf("\n");
    }

    printf("Second matrix elements are inputted from below >> \n");
    for (int i = 0; i < m ; i++)
    {
        for (int j = 0; j < l; j++)
        {
            // 正确存储到a1数组,提示同步修改
            printf("a1[%d][%d]>> ",i,j);
            scanf("%d",&a1[i][j]);
        }
        printf("\n");
    }

    // 矩阵乘法逻辑
    for (int i = 0; i < k; i++)
    {
        for (int j = 0; j < l; j++)
        {
            s=0;
            for (int jj = 0; jj < m; jj++)
            {
                s+=a[i][jj]*a1[jj][j];
            }
            c[i][j]=s;
        }
    }

    // 输出结果
    printf("Result matrix c[k][l]: \n");                                            
    for (int i = 0; i < k ; i++)
    {
        for (int j = 0; j < l; j++)
        {
            // 用循环变量i,j作为下标,正确输出c矩阵
            printf("c[%d][%d] = %d ",i,j,c[i][j]);
        }
        printf("\n");
    }
    return 0;
}

内容的提问来源于stack exchange,提问作者Shay

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 21:24:01