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

C语言2x2矩阵四则运算:除法结果为0.0的问题求助

C语言2x2矩阵除法结果为0.0的问题解决

问题描述

已实现C语言中2x2矩阵的加法、减法、乘法功能,但除法运算结果始终显示为0.0。尝试将arrA和arrB改为float类型后,除法恢复正常,但加减乘功能出现异常。

原代码

#include <stdio.h>

int main()
{

    int arrA[2][2];
    int arrB[2][2];
    float arrSum[2][2];
    float arrDiff[2][2];
    float arrProd[2][2];
    float arrQuo[2][2];
    int i,j;
    
    //1st Matrix
    printf("Enter Elements of 1st Matrix\n");
    for (i=1; i<3; i++) // size of rows
    {
        for(j=1; j<3; j++) // size of columns
        {
            printf("Enter a[%d][%d]: ",i,j);
            scanf("%d", &arrA[i][j]); // to get value and save to array[][] 
        }
        //printf("\n");
    }
    
    //Second Matrix
    printf("Enter Elements of 2nd Matrix\n");
    for (i=1; i<3; i++) // size of rows
    {
        for(j=1; j<3; j++) // size of columns
        {
            printf("Enter b[%d][%d]: ",i,j);
            scanf("%d", &arrB[i][j]); // to get value and save to array[][] 
        }
        //printf("\n");
    }
    
    
    // Sum of Matrix
    printf("Sum of Matrix: \n");
    for (i=1; i<3; i++) // size of rows
    {
        for(j=1; j<3; j++) // size of columns
        {
            arrSum[i][j] = arrA[i][j] + arrB[i][j];
            printf("%.1f ", arrSum[i][j]);
        }
        printf("\n");
    }
    
    //Difference of Matrix
    printf("Difference of Matrix: \n");
    for (i=1; i<3; i++) // size of rows
    {
        for(j=1; j<3; j++) // size of columns
        {
            arrDiff[i][j] = arrA[i][j] - arrB[i][j];
            printf("%.1f ", arrDiff[i][j]);
        }
        printf("\n");
    }
    
    //Product of Matrix
    printf("Product of Matrix: \n");
    for (i=1; i<3; i++) // size of rows
    {
        for(j=1; j<3; j++) // size of columns
        {
            arrProd[i][j] = arrA[i][j] * arrB[i][j];
            printf("%.1f ", arrProd[i][j]);
        }
        printf("\n");
    }
    
    //Quotient of Matrix
    printf("Quotient of Matrix: \n");
    for (i=1; i<3; i++) // size of rows
    {
        for(j=1; j<3; j++) // size of columns
        {
            arrQuo[i][j] = arrA[i][j] / arrB[i][j];
            printf("%.2f ", arrQuo[i][j]);
        }
        printf("\n");
    }
    
    return 0;
}

问题原因

  1. 整数除法截断结果:原代码中arrA和arrB是int类型,执行arrA[i][j] / arrB[i][j]时会触发整数除法——只要被除数小于除数(如3/4),结果会被截断为0,再赋值给float类型的arrQuo,最终显示为0.0。
  2. 类型修改未同步输入格式:将arrA和arrB改为float后,仍使用scanf("%d")读取输入,会导致内存解析错误,进而让加减乘运算结果异常。

解决方案

方案1:保持整数矩阵,除法时强制类型转换

无需修改矩阵类型,仅在除法运算时将其中一个操作数转为float,触发浮点数除法:

arrQuo[i][j] = (float)arrA[i][j] / arrB[i][j];

此方案改动最小,不影响原有加减乘功能。

方案2:统一使用float类型矩阵

将arrA和arrB改为float,同时修改scanf的格式符为%f,确保输入正确读取:

float arrA[2][2];
float arrB[2][2];
// ...
scanf("%f", &arrA[i][j]);
// ...
scanf("%f", &arrB[i][j]);

此方案支持输入小数,所有运算逻辑统一为浮点数运算,结果更灵活。

修正后的代码(方案1示例)

#include <stdio.h>

int main()
{
    int arrA[2][2];
    int arrB[2][2];
    float arrSum[2][2];
    float arrDiff[2][2];
    float arrProd[2][2];
    float arrQuo[2][2];
    int i,j;
    
    // 输入第一个矩阵
    printf("Enter Elements of 1st Matrix\n");
    for (i=1; i<3; i++)
    {
        for(j=1; j<3; j++)
        {
            printf("Enter a[%d][%d]: ",i,j);
            scanf("%d", &arrA[i][j]);
        }
    }
    
    // 输入第二个矩阵
    printf("Enter Elements of 2nd Matrix\n");
    for (i=1; i<3; i++)
    {
        for(j=1; j<3; j++)
        {
            printf("Enter b[%d][%d]: ",i,j);
            scanf("%d", &arrB[i][j]);
        }
    }
    
    // 矩阵加法
    printf("Sum of Matrix: \n");
    for (i=1; i<3; i++)
    {
        for(j=1; j<3; j++)
        {
            arrSum[i][j] = arrA[i][j] + arrB[i][j];
            printf("%.1f ", arrSum[i][j]);
        }
        printf("\n");
    }
    
    // 矩阵减法
    printf("Difference of Matrix: \n");
    for (i=1; i<3; i++)
    {
        for(j=1; j<3; j++)
        {
            arrDiff[i][j] = arrA[i][j] - arrB[i][j];
            printf("%.1f ", arrDiff[i][j]);
        }
        printf("\n");
    }
    
    // 矩阵乘法(元素级)
    printf("Product of Matrix: \n");
    for (i=1; i<3; i++)
    {
        for(j=1; j<3; j++)
        {
            arrProd[i][j] = arrA[i][j] * arrB[i][j];
            printf("%.1f ", arrProd[i][j]);
        }
        printf("\n");
    }
    
    // 矩阵除法(元素级)
    printf("Quotient of Matrix: \n");
    for (i=1; i<3; i++)
    {
        for(j=1; j<3; j++)
        {
            // 强制转换为float触发浮点数除法
            arrQuo[i][j] = (float)arrA[i][j] / arrB[i][j];
            printf("%.2f ", arrQuo[i][j]);
        }
        printf("\n");
    }
    
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 14:36:35