Matrixmultiplikation in C

CCBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Lab werden wir ein C-Programm zur Matrixmultiplikation schreiben. Wir werden lernen, wie man eine Matrix erstellt, Matrixoperationen durchführt und den Standardalgorithmus für die Matrixmultiplikation diskutieren. Wir werden ein C-Programm erstellen, um zwei Matrizen zu multiplizieren und die resultierende Matrix auszugeben.

Hinweis: Sie müssen die Datei ~/project/main.c selbst erstellen, um zu üben, wie man Code schreibt und wie man es mit gcc kompiliert und ausführt.

cd ~/project
## main.c erstellen
touch main.c
## main.c kompilieren
gcc main.c -o main
## main ausführen
./main

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL c(("C")) -.-> c/BasicsGroup(["Basics"]) c(("C")) -.-> c/ControlFlowGroup(["Control Flow"]) c(("C")) -.-> c/CompoundTypesGroup(["Compound Types"]) c(("C")) -.-> c/UserInteractionGroup(["User Interaction"]) c/BasicsGroup -.-> c/variables("Variables") c/ControlFlowGroup -.-> c/for_loop("For Loop") c/CompoundTypesGroup -.-> c/arrays("Arrays") c/UserInteractionGroup -.-> c/user_input("User Input") subgraph Lab Skills c/variables -.-> lab-123281{{"Matrixmultiplikation in C"}} c/for_loop -.-> lab-123281{{"Matrixmultiplikation in C"}} c/arrays -.-> lab-123281{{"Matrixmultiplikation in C"}} c/user_input -.-> lab-123281{{"Matrixmultiplikation in C"}} end

Matrizen erstellen

Zunächst lernen wir, wie man Matrizen erstellt. Eine Matrix ist ein zweidimensionales Array. Hier ist ein Beispiel dafür, wie man eine 2x2-Matrix in C deklariert und initialisiert:

int matrix[2][2] = {{1, 2}, {3, 4}};

Wir können bestimmte Elemente der Matrix über zwei Indizes zugreifen, wie im folgenden Beispiel:

int element = matrix[1][0];

Matrixmultiplikation mit einem Skalarenwert

Die Matrixmultiplikation mit einem einzelnen Wert ist einfach und erfolgt wie folgt:

int arr[2][2], n;
// Skalarenwert eingeben
scanf("%d", &n);

// Matrixelemente eingeben
for(int i = 0; i < 2; i++) {
    for(int j = 0; j < 2; j++){
        scanf("%d", &arr[i][j]);
    }
}
// Jedes Element der Matrix mit dem Skalarenwert multiplizieren
for(int i = 0; i < 2; i++) {
    for(int j = 0; j < 2; j++){
        arr[i][j] = arr[i][j] * n;
    }
}

// Die aktualisierten Matrixelemente ausgeben
for(int i = 0; i < 2; i++) {
    for(int j = 0; j < 2; j++){
        printf("%d ", arr[i][j]);
    }
    printf("\n");
}

Das Programm multipliziert jedes Element der Matrix mit dem von dem Benutzer eingegebenen Skalarenwert und gibt dann die aktualisierte Matrix aus.

Matrixmultiplikation mit zwei Matrizen

Um zwei Matrizen zu multiplizieren, müssen Sie bestimmte Regeln befolgen. Erstens sollte die Anzahl der Spalten der ersten Matrix der Anzahl der Zeilen der zweiten Matrix entsprechen. Zweitens wird die resultierende Matrix die gleiche Anzahl von Zeilen wie die erste Matrix und die gleiche Anzahl von Spalten wie die zweite Matrix haben.

Nehmen wir an, dass wir zwei Matrizen haben:

A = {{1, 3, 5},
     {4, 2, 6}};

B = {{7, 4},
     {3, 1},
     {6, 9}};

Um diese zwei Matrizen zu multiplizieren, werden wir ein Skalarprodukt auf ihren Zeilen und Spalten ausführen. Die Elemente der Matrizen werden mit der folgenden Formel multipliziert:

result[row][col] = matrix1[row][0] * matrix2[0][col]
                  + matrix1[row][1] * matrix2[1][col]
                  + matrix1[row][2] * matrix2[2][col]
                  +...;

Folgendes ist ein C-Programm zur Matrixmultiplikation:

#include <stdio.h>

int main()
{
  int m, n, p, q, c, d, k, sum = 0;

  // definieren Sie zwei Matrizen
  int first[10][10], second[10][10], result[10][10];

  // geben Sie die Anzahl der Zeilen und Spalten der ersten Matrix ein
  printf("Geben Sie die Anzahl der Zeilen und Spalten der ersten Matrix ein:\n");
  scanf("%d %d", &m, &n);

  // geben Sie die Elemente der ersten Matrix ein
  printf("Geben Sie die %d Elemente der ersten Matrix ein:\n", m * n);
  for (c = 0; c < m; c++) {
    for (d = 0; d < n; d++) {
      scanf("%d", &first[c][d]);
    }
  }

  // geben Sie die Anzahl der Zeilen und Spalten der zweiten Matrix ein
  printf("Geben Sie die Anzahl der Zeilen und Spalten der zweiten Matrix ein:\n");
  scanf("%d %d", &p, &q);

  // geben Sie die Elemente der zweiten Matrix ein
  printf("Geben Sie die %d Elemente der zweiten Matrix ein:\n", p * q);
  for (c = 0; c < p; c++) {
    for (d = 0; d < q; d++) {
      scanf("%d", &second[c][d]);
    }
  }

  // überprüfen, ob die Matrizen multipliziert werden können
  if (n!= p) {
    printf("Matrizen können nicht miteinander multipliziert werden.\n");
  } else {
    // multiplizieren der Matrizen
    for (c = 0; c < m; c++) {
      for (d = 0; d < q; d++) {
        for (k = 0; k < p; k++) {
          sum = sum + first[c][k] * second[k][d];
        }
        result[c][d] = sum;
        sum = 0;
      }
    }

    // geben Sie die resultierende Matrix aus
    printf("Die resultierende Matrix ist:\n");
    for (c = 0; c < m; c++) {
      for (d = 0; d < q; d++) {
        printf("%d\t", result[c][d]);
      }
      printf("\n");
    }
  }

  return 0;
}

Das Programm wird den Benutzer auffordern, die Elemente von zwei Matrizen einzugeben, überprüfen, ob sie multipliziert werden können, sie multiplizieren, wenn möglich, und die resultierende Matrix ausgeben.

Vollständiges Programm

Hier ist das vollständige Programm, das alle Schritte kombiniert:

#include<stdio.h>

int main()
{
    int n, m, c, d, p, q, k, first[10][10], second[10][10], pro[10][10], sum = 0;

    printf("\nGeben Sie die Anzahl der Zeilen und Spalten der ersten Matrix ein: \n\n");
    scanf("%d%d", &m, &n);

    printf("\nGeben Sie die %d Elemente der ersten Matrix ein: \n\n", m*n);
    for(c = 0; c < m; c++) {
        for(d = 0; d < n; d++) {
            scanf("%d", &first[c][d]);
        }
    }

    printf("\nGeben Sie die Anzahl der Zeilen und Spalten der ersten Matrix ein: \n\n");
    scanf("%d%d", &p, &q);

    if(n!= p)
        printf("Matrizen mit der angegebenen Ordnung können nicht miteinander multipliziert werden.\n\n");

    else {
        printf("\nGeben Sie die %d Elemente der zweiten Matrix ein: \n\n",m*n);

        for(c = 0; c < p; c++) {
            for(d = 0; d < q; d++) {
                scanf("%d", &second[c][d]);
            }
        }

        printf("\n\nDie erste Matrix ist: \n\n");
        for(c = 0; c < m; c++) {
            for(d = 0; d < n; d++) {
                printf("%d\t", first[c][d]);
            }
            printf("\n");
        }

        printf("\n\nDie zweite Matrix ist: \n\n");
        for(c = 0; c < p; c++) {
            for(d = 0; d < q; d++){
                printf("%d\t", second[c][d]);
            }
            printf("\n");
        }

        for(c = 0; c < m; c++) {
            for(d = 0; d < q; d++) {
                for(k = 0; k < p; k++) {
                    sum = sum + first[c][k] * second[k][d];
                }
                pro[c][d] = sum;
                sum = 0;
            }
        }

        printf("\n\nDie Multiplikation der beiden eingegebenen Matrizen ist: \n\n");
        for(c = 0; c < m; c++) {
            for(d = 0; d < q; d++) {
                printf("%d\t", pro[c][d]);
            }
            printf("\n");
        }
    }
    printf("\n\n\t\t\tCoding ist Spaß!\n\n\n");
    return 0;
}

Zusammenfassung

In diesem Lab haben wir gelernt, wie man in C eine Matrix erstellt und welche verschiedenen Arten von Matrixmultiplikationsoperationen wir durchführen können. Wir haben ein Programm erstellt, um die Multiplikation von zwei Matrizen in C zu berechnen, und haben das Standardalgorithmus für die Matrixmultiplikation diskutiert.