c - 矩阵相乘没有给出正确答案

标签 c

我为我的学校类(class)编写了这个基本代码。代码运行,但未正确计算乘法矩阵。据我所知,没有什么问题,但这就是我来这里的原因。它给了我数以百万计的数字。
感谢任何人可以提供的帮助。

for (i = 0; i <= 3; i++)
 {
    for (j = 0; j <= 1; j++)
    {
        sum = 0;
        for (k = 0; k <= 2; k++)
        {
            sum = sum + a[i][k] * b[k][j];
        }
        c[i][j] = sum;

根据我在这些论坛上其他地方读到的内容,我认为这个乘法部分是正确的。

#include<stdio.h>

int main()
{
int a[10][10], c[10][10], i, j, k;
int sum = 0;
printf("Enter your values for the 2x4 matrix:\n");
for (i = 0; i < 4; i++)
{
    for (j = 0; j < 2; j++)
    {
        scanf("%d", &a[i][j]);
    }
}
int b[3][3];
b[0][0]=2;
b[1][0]=41;
b[2][0]=12;
b[3][0]=15;
b[0][1]=7;
b[0][2]=34;
b[0][3]=3;
b[1][1]=32;
b[2][1]=1;
b[3][1]=5;
b[1][2]=13;
b[1][3]=6;
b[2][2]=0;
b[3][2]=7;
b[2][3]=11;
b[3][3]=9;
 for (i = 0; i <= 3; i++)
{
    for (j = 0; j <= 1; j++)
    {
        sum = 0;
        for (k = 0; k <= 2; k++)
        {
            sum = sum + a[i][k] * b[k][j];
        }
        c[i][j] = sum;
    }
}
printf("Multiplication Of Two Matrices: \n");
for (i = 0; i < 2; i++)
{
    for (j = 0; j < 4; j++)
    {
        printf(" %d ", c[i][j]);
    }
    printf("\n");
}
return 0;
}

最佳答案

有很多错误:

  • 您的错误在于 b 矩阵的定义。它的大小为 3x3,但您的定义使其为 4x4。需要明确的是,bb[0][0] 开始,到 b[2][2] 结束,因此有 3x3=9 个元素。
  • 矩阵a的大小为4x2。矩阵 b 的大小为 3x3。两者不能相乘。矩阵 b 应更改为 2x3 大小,或将 a 更改为 4x3 大小。

所以,正确的代码是:

    #include<stdio.h>

    int main()
    {
    int a[10][10], c[10][10], i, j, k;
    int sum = 0;
    printf("Enter your values for the 2x4 matrix:\n");
    for (i = 0; i < 4; i++)
    {
        for (j = 0; j < 3; j++)
        {
            scanf("%d", &a[i][j]);
        }
    }
    int b[3][3];
    b[0][0]=2;
    b[1][0]=41;
    b[2][0]=12;
   /* b[3][0]=15; */
    b[0][1]=7;
    b[0][2]=34;
    b[0][3]=3;
    b[1][1]=32;
    b[2][1]=1;
   /* b[3][1]=5; */
    b[1][2]=13;
    b[1][3]=6;
    b[2][2]=0;
    b[3][2]=7;
    b[2][3]=11;
  /*  b[3][3]=9; */
     for (i = 0; i <= 3; i++)
    {
        for (j = 0; j <= 1; j++)
        {
            sum = 0;
            for (k = 0; k <= 2; k++)
            {
                sum = sum + a[i][k] * b[k][j];
            }
            c[i][j] = sum;
        }
    }
    printf("Multiplication Of Two Matrices: \n");
    for (i = 0; i < 2; i++)
    {
        for (j = 0; j < 4; j++)
        {
            printf(" %d ", c[i][j]);
        }
        printf("\n");
    }
    return 0;
    }

关于c - 矩阵相乘没有给出正确答案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40034641/

相关文章:

c - 在 C 中处理带空格的文件名

c - 如果我发现列表在任何中间点(冒泡排序)中排序,如何停止我的进程?

c - 创建 split 函数时出错

c - 我该如何修复这个 C 代码/BLAS 错误?

c - 我想使用箭头键在 C 语言中的屏幕上移动符号

c - C语言排序程序

c - Windows 是否有一个好的 Valgrind 替代品?

c - 如何在c中的字符串末尾插入NULL

c - 广度优先搜索 - 错误的结果

c - 在 C 中使用子进程的 exec 命令执行 bin 程序