我尝试使用两个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”。
答案 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;
}