C中两个矩阵的和与积(带函数)

C中两个矩阵的和与积(带函数),c,function,matrix,C,Function,Matrix,我必须用C语言写一个程序,求两个矩阵的和和和积 我编写了这些函数,但在main中调用它们时遇到了困难。我不知道哪个变量用于结果矩阵的行和列 #include <stdio.h> void enterMatrix(int a[][10], int rows, int columns) { int i,j; for(i=0;i<rows;i++) { for(j=0;j<columns;j++) {

我必须用C语言写一个程序,求两个矩阵的和和和积

我编写了这些函数,但在
main
中调用它们时遇到了困难。我不知道哪个变量用于结果矩阵的行和列

#include <stdio.h>
void enterMatrix(int a[][10], int rows, int columns)
{
    int i,j;
    for(i=0;i<rows;i++)
    {
        for(j=0;j<columns;j++)
        {
            printf("a(%d,%d)=",i,j);
            scanf("%d",&a[i][j]);
        }
    }
}
void displayMatrix(int a[][10], int rows, int columns)
{
    int i,j;
    for(i=0;i<rows;i++)
    {
        for(j=0;j<columns;j++)
        {
            printf("%d", a[i][j]);
            printf(" ");
        }
        printf("\n");
    }
}
void matrixSum(int a[][10], int b[][10], int c[][10], int rows, int columns)
{
    int i,j;
    for(i=0;i<rows;i++)
    {
        for(j=0;j<columns;j++)
        {
            c[i][j]=a[i][j]+b[i][j];
        }
    }
}
void matrixProduct(int a[][10], int b[][10], int c[][10], int rows, int columns)
{
    int i,j,k;
    for(i=0;i<rows;i++)
    {
        for(j=0;j<columns;j++)
        {
            c[i][j]=0;
            for(k=0;k<columns;k++)
            {
                c[i][j]+=a[i][k]*b[k][j];
            }

        }
    }
}
int main(void)
{
    int a[10][10], b[10][10], sum[10][10], product[10][10];
    int rowsA,columnsA,rowsB,columnsB;
    printf("Number of rows for matrix A: \n");
    scanf("%d",&rowsA);
    printf("Number of columns for matrix A: \n");
    scanf("%d",&columnsA);
    printf("Number of rows for matrix B: \n");
    scanf("%d",&rowsB);
    printf("Number of columns for matrix B: \n");
    scanf("%d",&columnsB);
    printf("Enter first matrix: \n");
    enterMatrix(a,rowsA,columnsA);
    printf("Show first matrix: \n");
    displayMatrix(a,rowsA,columnsA);
    printf("Enter second matrix: \n");
    enterMatrix(b,rowsB,columnsB);
    printf("Show second matrix: \n");
    displayMatrix(b,rowsB,columnsB);

    if((rowsA==rowsB) && (columnsA==columnsB))
    {
        matrixSum(a,b,sum, ???, ???);
        printf("The sum matrix is: \n");
        displayMatrix(sum, ???, ???);
    }
    else
    {
        printf("Wrong information.");
    }
    if((rowsA==columnsB) && (rowsB==columnsA))
    {
        matrixProduct(a,b,product,???,???);
        printf("The product matrix is \n");
        displayMatrix(product,???,???);
    }
    return 0;
}

#包括
无效输入矩阵(int a[][10],int行,int列)
{
int i,j;

对于(i=0;i对于矩阵sum,只需给出rowsA和columnsA,因为它们等于rowsB和columnsB

对于matrixProduct,您需要三个数字:rowsA、columnsA和columnsB。不需要rowsB,因为它等于columnsA

您需要更改matrixProduct函数,以便在正确的位置使用这三个数字。除非所有数字相等,否则当前代码不起作用

另外,在调用matrixProduct之前,您的测试
if((rowsB==columnsB)和&(rowsB==columnsA))
只需要
if(rowsB==columnsA)

您的matrixProduct功能可以进行如下调整:

void matrixProduct(int a[][10], int b[][10], int c[][10], int rowsA, int columnsA, int columnsB)
{
    int i,j,k;
    for(i=0;i<rowsA;i++)
    {
        for(j=0;j<columnsB;j++)
        {
            c[i][j]=0;
            for(k=0;k<columnsA;k++)
            {
                c[i][j]+=a[i][k]*b[k][j];
            }
        }
    }
}
void matrixProduct(int a[][10]、int b[][10]、int c[][10]、int rowsA、int columnsA、int columnsB)
{
int i,j,k;

对于(i=0;我感谢您的回答。编译器说我对函数“matrixProduct”的参数太多。您需要调整对matrixProduct的调用以及函数本身的声明。验证每个输入,例如,
if(scanf(“%d”,&a[i][j])!=1{/*处理错误*/}
void matrixProduct(int a[][10], int b[][10], int c[][10], int rowsA, int columnsA, int columnsB)
{
    int i,j,k;
    for(i=0;i<rowsA;i++)
    {
        for(j=0;j<columnsB;j++)
        {
            c[i][j]=0;
            for(k=0;k<columnsA;k++)
            {
                c[i][j]+=a[i][k]*b[k][j];
            }
        }
    }
}