使用二维数组的矩阵乘法

问题描述 投票:0回答:1

我正在尝试学习二维数组。我偶然发现了一个问题。它表示使用名为 readMatrix() 的函数读取两个阶数 a*b 和 m*n 的矩阵,使用 processMatrix() 将矩阵相乘并使用 showMatrix() 显示结果。

我正在尝试仅使用数组来解决它。

这就是我尝试做的。

#include <stdio.h>
#include<math.h>
void readMatrix();
void processMatrix(int p[][100],int q[][100],int a,int b,int m,int n);
void showMatrix(int c[][100],int a,int n);

int main() {
    
     readMatrix();
}
void readMatrix()
{
    int i,j,m,n,a,b;
    
    printf("For matrix 1 \n");
    
    printf("Enter the number of rows: ");
    scanf("%d",&a);
    
    printf("Enter the number of columns: ");
    scanf("%d",&b);
    
    printf("For matrix 2 \n");
    
    printf("Enter the number of rows: ");
    scanf("%d",&m);
    
    printf("Enter the number of columns: ");
    scanf("%d",&n);
    int p[a] [b];
    int q[m] [n];
    if (b == m)
    {
    printf("For 1st Matrix\n");
    
    for(i = 0;i<a;i++)
    {
        for(j = 0; j < b;j++)
    {
        printf("%d row %d column: ",i+1,j+1);
        scanf("%d",&p[i][j]);
        
    }
    }
    
    printf("For 2nd Matrix\n");
    
    for(i = 0;i < m;i++)
    {
        for(j = 0; j < n;j++)
        {
        printf("%d row %d column: ",i+1,j+1);
        scanf("%d",&q[i][j]);
        }
    }
    }
    else
    {   
        printf("Enter a valid dimension. ");
    }    
    processMatrix(p,q,a,b,m,n);
    
    
}
void processMatrix(int p[][100],int q[][100],int a,int b,int m,int n)
{
    int i,j,k;
    int c[a][n];
    for(i=0;i < a;i++)
    {   
        for(j = 0; j < n;j++)
        { c[i][j]=0;
            for(k = 0; k < b;k++)
            {
                c[i] [j] = c[i][j] + p[i][k] * q[k][j];
            }
        }
    }
    showMatrix(c,a,n);
}
void showMatrix(int c[][100],int a,int n)
{   int i,j;
    for(i = 0; i < a; i++)
    {for(j = 0; j< n; j++)
        printf("%d ",c[i][j]);
    }
    printf("\n");
}

该程序确实读取元素但显示抓取值。我哪里错了?

c algorithm multidimensional-array
1个回答
0
投票

我注意到的第一件事是,您正在声明

p
q
c
矩阵以及用户插入的运行时维度。这是不可以做的,以这种方式进行的动态分配是不标准的。看看这个问题

我猜你正在开始你的旅程,所以在这种情况下教授的通常方法是将

p
q
c
矩阵定义为:

#define ROWS 100
#define COLS 100

...

void readMatrix()
{
    int p[ROWS][COLS];
}

这先验地告诉你矩阵的大小。使用这种方法,您必须检查

a, b, m, n
是否小于 100。

我没有检查矩阵乘法方法,但我认为现在你可以继续没有垃圾值。

最后一件事:请注意,即使用户插入了不兼容的矩阵维度,您也会调用

processMatrix(p,q,a,b,m,n);
:)

© www.soinside.com 2019 - 2024. All rights reserved.