Multiplication de masortingce en C

J’essaie de résoudre un problème de multiplication de masortingce avec C. Les tailles de masortingce données dans le problème (2×2) J’ai écrit ce code mais il n’imprime pas le résultat comme prévu. Je pense que je manque un point sur les règles de C.

Quelle est mon erreur dans ce code?

#include  int main() { int matA[2][2]={0,1,2,3}; int matB[2][2]={0,1,2,3}; int matC[2][2]; int i, j, k; for (i = 0; i < 2; i++) { for(j = 0; j < 2; j++) { for(k = 0; k < 2; k++) { matC[i][j] += matA[i][k] * matB[k][j]; } printf("%d\n",matC[i][j]); } } } 

Résultat d’impression:

 2 3 4195350 11 

Le problème est que dans la ligne

 matC[i][j] += matA[i][k] * matB[k][j]; 

vous ajoutez des éléments à matC, mais lorsque vous le créez, vous ne l’initialisez pas, il y a donc des ordures.

Vous devriez faire quelque chose comme:

int matC[2][2] = {0} qui initialisera toute la masortingce avec des 0

Voici le code de multiplication de masortingce que j’utilise:

 for(i=0;i 

Le gros problème est de mettre la masortingce de réponses à zéro (comme l’ont dit les autres sans code).

matC contient initialement des valeurs de déchets. Iniatialisez le martix à tous les zéros. Cela pourrait résoudre votre problème

Vous pouvez avoir une multiplication de masortingce de toute taille donnée par utilisateur de la manière suivante:

 #include void main() { int r1, c1, r2, c2; printf("Enter number of rows and columns for masortingx A : "); scanf("%d %d",&r1,&c1); printf("Enter number of rows and columns for masortingx B : "); scanf("%d %d",&r2,&c2); int a[r1][c1], b[r2][c2], ab[r1][c2], ba[r2][c1],i,j,k,temp; if(c1==r2 && r1==c2) { printf("\nEnter element in masortingx A : "); for(i=0;i 

Vous devez d’abord initialiser les éléments de C à zéro.

Vous devez initialiser matC à tous les zéros.

Si la taille et les dépendances importent peu, je suggérerais d’utiliser la bibliothèque scientifique GNU. Voir ici pour les fonctionnalités: http://en.wikipedia.org/wiki/GNU_Scientific_Library

Il contient des routines optimisées pour les calculs mathématiques et est assez rapide avec certaines optimisations du compilateur.

Déjà utilisé avec succès pour les opérations masortingcielles en développement 3D.

Vous souhaiterez peut-être allouer dynamicment de la mémoire pour la masortingce résultante. Si c’est le cas, utilisez calloc() pour allouer et effacer les éléments. printMasortingx() est appelée pour imprimer le résultat, mais n’est pas définie ici.

 /* masortingx1: [rows1 x cols1]; masortingx2: [rows2 x cols2]; product is masortingx3: [rows1 x cols2] if (cols1 == rows2) is true. calloc to allocate / clear memory for masortingx3. Algorithm is O(n^3) */ float ** masortingx3; if (cols1 == rows2) { // product masortingx can be calculated // calloc product masortingx3 masortingx3 = (float **)calloc(rows1, sizeof(float *)); for (int i = 0; i < rows1; i++) matrix3[i] = (float *)calloc(cols2, sizeof(float)); int i, j, k; float tmp; for (i = 0; i < rows1; i++) { for (j = 0; j < cols2; j++) { tmp = 0.0; for (k = 0; k < rows2; k++) tmp += matrix1[i][k] * matrix2[k][j]; matrix3[i][j] = tmp; } } printMatrix(matrix3, rows1, cols2, 3); free(matrix3); } else { // cols1 != rows2 puts("dimensional mismatch; can't multiply matrices"); }