使用函数将Hadamard乘积应用于C中的2个矩阵3x3

时间:2018-10-26 16:14:57

标签: c function matrix-multiplication

我尝试使用两个int分隔此代码。

#include <stdio.h>
#include <conio.h>
int main(){
    int a[3][3],b[3][3],c[3][3],i,d,e;
    puts("multiplica 2 matrices de 3x3");
    puts("Matriz A");
    for (int i=0; i<3; i++){
        for (int d=0; d<3; d++){
            printf("introdusca el dato %d,%d\t",i+1,d+1);
            scanf ("%d",&a[i][d]);
            }
        }
    puts("Matriz B");
    for (int i=0; i<3; i++){
        for (int d=0; d<3; d++){
            printf("introdusca el dato %d,%d\t",i+1,d+1);
            scanf ("%d",&b[i][d]);
            }
        }
    for (int i=0; i<3; i++){
        for (int d=0; d<3; d++){
        c[i][d]=a[i][d]*b[i][d];
            }
        }
    for (int i=0; i<3; i++){
        printf("| ");
        for (int d=0; d<3; d++){
            printf("%4.2d",c[i][d]);
            }
        printf("|");
        printf("\n");
        }
    getch();
    return 0;
}

使用void效果很好,但是当我尝试使用int给我随机数而不是最后一个代码期望的实数乘法时,我遇到了麻烦。

#include <stdio.h>
#include <conio.h>
int mult(int x[3][3], int y[3][3]){
int c[3][3];
    for (int k=0; k<3; k++){
        for (int l=0; l<3; l++){
        c[k][l]=x[k][l]*y[k][l];
            }
        }
    return c[3][3];
}
int main (){
    int a[3][3],b[3][3],i,j;
    puts("multiplica 2 matrices de 3x3");
    puts("Matriz A");
    for (int i=0; i<3; i++){
        for (int j=0; j<3; j++){
            printf("introdusca el dato %d,%d\t",i+1,j+1);
            scanf ("%d",&a[i][j]);
            }
        }
    puts("Matriz B");
    for (int i=0; i<3; i++){
        for (int j=0; j<3; j++){
            printf("introdusca el dato %d,%d\t",i+1,j+1);
            scanf ("%d",&b[i][j]);
            }
        }
    for (int i=0; i<3; i++){
        printf("|");
        for (int j=0; j<3; j++){
            printf("%4.2d",mult(a,b));
            }
        printf(" |");
        printf("\n");
    }
    getch();
    return 0;
}

我猜想我将printf("%4.2d",mult(a,b));放入for循环中的方式没有在int mult上分配数据,或者没有正确返回“ c”。

1 个答案:

答案 0 :(得分:-1)

好的,如果Hadamard的计算还可以。您需要先分配矩阵,然后再发送回指针。

int **mult(int x[3][3], int y[3][3])
{
   if (!(c = malloc(sizeof(int*) * 3)))
    return (0);

    for (int k = 0; k < 3; k++)
        for (int l = 0; l < 3; l++)
                c[k][l] = x[k][l] * y[k][l];

    return c;
}