多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# 程序将两个矩阵相乘 > 原文: [https://www.geeksforgeeks.org/c-program-multiply-two-matrices/](https://www.geeksforgeeks.org/c-program-multiply-two-matrices/) 给定两个矩阵,将它们相乘的任务。 矩阵可以是正方形或矩形。 **示例**: ``` Input : mat1[][] = {{1, 2}, {3, 4}} mat2[][] = {{1, 1}, {1, 1}} Output : {{3, 3}, {7, 7}} Input : mat1[][] = {{2, 4}, {3, 4}} mat2[][] = {{1, 2}, {1, 3}} Output : {{6, 16}, {7, 18}} ``` ![](https://img.kancloud.cn/f1/1f/f11f23635de54933abc3f985cab0897b_461x340.png) **平方矩阵的乘积**: 下面的程序将两个大小为 4 * 4 的平方矩阵相乘,我们可以为不同的维数更改 N。 ## C++ ```cpp // C++ program to multiply  // two square matrices. #include <iostream> using namespace std; #define N 4 // This function multiplies  // mat1[][] and mat2[][], and  // stores the result in res[][] void multiply(int mat1[][N],                int mat2[][N],                int res[][N]) {     int i, j, k;     for (i = 0; i < N; i++)     {         for (j = 0; j < N; j++)         {             res[i][j] = 0;             for (k = 0; k < N; k++)                 res[i][j] += mat1[i][k] *                               mat2[k][j];         }     } } // Driver Code int main() {     int i, j;     int res[N][N]; // To store result     int mat1[N][N] = {{1, 1, 1, 1},                       {2, 2, 2, 2},                       {3, 3, 3, 3},                       {4, 4, 4, 4}};     int mat2[N][N] = {{1, 1, 1, 1},                       {2, 2, 2, 2},                       {3, 3, 3, 3},                       {4, 4, 4, 4}};     multiply(mat1, mat2, res);     cout << "Result matrix is \n";     for (i = 0; i < N; i++)     {         for (j = 0; j < N; j++)         cout << res[i][j] << " ";         cout << "\n";     }     return 0; } // This code is contributed // by Soumik Mondal ``` ## C ``` // C program to multiply two square matrices. #include <stdio.h> #define N 4 // This function multiplies mat1[][] and mat2[][], // and stores the result in res[][] void multiply(int mat1[][N], int mat2[][N], int res[][N]) {     int i, j, k;     for (i = 0; i < N; i++)     {         for (j = 0; j < N; j++)         {             res[i][j] = 0;             for (k = 0; k < N; k++)                 res[i][j] += mat1[i][k]*mat2[k][j];         }     } } int main() {     int mat1[N][N] = { {1, 1, 1, 1},                     {2, 2, 2, 2},                     {3, 3, 3, 3},                     {4, 4, 4, 4}};     int mat2[N][N] = { {1, 1, 1, 1},                     {2, 2, 2, 2},                     {3, 3, 3, 3},                     {4, 4, 4, 4}};     int res[N][N]; // To store result     int i, j;     multiply(mat1, mat2, res);     printf("Result matrix is \n");     for (i = 0; i < N; i++)     {         for (j = 0; j < N; j++)            printf("%d ", res[i][j]);         printf("\n");     }     return 0; } ``` ## Java ```java // Java program to multiply two square // matrices. import java.io.*; class GFG {     static int N = 4;     // This function multiplies mat1[][]     // and mat2[][], and stores the result     // in res[][]     static void multiply(int mat1[][],                    int mat2[][], int res[][])     {         int i, j, k;         for (i = 0; i < N; i++)         {             for (j = 0; j < N; j++)             {                 res[i][j] = 0;                 for (k = 0; k < N; k++)                     res[i][j] += mat1[i][k]                                  * mat2[k][j];             }         }     }     // Driver code     public static void main (String[] args)      {         int mat1[][] = { {1, 1, 1, 1},                          {2, 2, 2, 2},                          {3, 3, 3, 3},                          {4, 4, 4, 4}};         int mat2[][] = { {1, 1, 1, 1},                          {2, 2, 2, 2},                          {3, 3, 3, 3},                          {4, 4, 4, 4}};         // To store result         int res[][] = new int[N][N] ;         int i, j;         multiply(mat1, mat2, res);         System.out.println("Result matrix"                                 + " is ");         for (i = 0; i < N; i++)         {             for (j = 0; j < N; j++)                 System.out.print( res[i][j]                                     + " ");             System.out.println();         }     } } // This code is contributed by anuj_67\. ``` ## Python 3 ``` # 4x4 matrix multiplication using Python3 # Function definition def matrix_multiplication(M,N):     # List to store matrix multiplication result     R = [[0, 0, 0, 0],          [0, 0, 0, 0],          [0, 0, 0, 0],         [0, 0, 0, 0]]      for i in range(0, 4):          for j in range(0, 4):             for k in range(0, 4):                  R[i][j] += M[i][k] * N[k][j]      for i in range(0,4):          for j in range(0,4):              #if we use print(), by default cursor moves to next line each time,              #Now we can explicitly define ending character or sequence passing             #second parameter as end="<character or string>"             #syntax: print(<variable or value to print>, end="<ending with>")             #Here space (" ") is used to print a gape after printing              #each element of R             print(R[i][j],end=" ")         print("\n",end="") # First matrix. M is a list M = [[1, 1, 1, 1],      [2, 2, 2, 2],      [3, 3, 3, 3],     [4, 4, 4, 4]] # Second matrix. N is a list N = [[1, 1, 1, 1],      [2, 2, 2, 2],      [3, 3, 3, 3],     [4, 4, 4, 4]]  # Call matrix_multiplication function matrix_multiplication(M,N) # This code is contributed by Santanu ``` ## C# ```cs // C# program to multiply two square // matrices. using System; class GFG {     static int N = 4;     // This function multiplies mat1[][]     // and mat2[][], and stores the result     // in res[][]     static void multiply(int[,] mat1,                  int [,]mat2, int [,]res)     {         int i, j, k;         for (i = 0; i < N; i++)         {             for (j = 0; j < N; j++)             {                 res[i,j] = 0;                 for (k = 0; k < N; k++)                     res[i,j] += mat1[i,k]                                  * mat2[k,j];             }         }     }     // Driver code     public static void Main ()      {         int [,]mat1 = { {1, 1, 1, 1},                         {2, 2, 2, 2},                         {3, 3, 3, 3},                         {4, 4, 4, 4}};         int [,]mat2 = { {1, 1, 1, 1},                         {2, 2, 2, 2},                         {3, 3, 3, 3},                         {4, 4, 4, 4}};         // To store result         int [,]res = new int[N,N] ;         int i, j;         multiply(mat1, mat2, res);         Console.WriteLine("Result matrix"                                 + " is ");         for (i = 0; i < N; i++)         {             for (j = 0; j < N; j++)                 Console.Write( res[i,j]                                     + " ");             Console.WriteLine();         }     } } // This code is contributed by anuj_67\. ``` ## PHP ```php <?php // PHP program to multiply two  // square matrices. // This function multiplies mat1[][] and  // mat2[][], and stores the result in res[][] function multiply(&$mat1, &$mat2, &$res) {     $N = 4;     for ($i = 0; $i < $N; $i++)     {         for ($j = 0; $j < $N; $j++)         {             $res[$i][$j] = 0;             for ($k = 0; $k < $N; $k++)                 $res[$i][$j] += $mat1[$i][$k] *                                  $mat2[$k][$j];         }     } } // Driver Code $mat1 = array(array(1, 1, 1, 1),               array(2, 2, 2, 2),               array(3, 3, 3, 3),               array(4, 4, 4, 4)); $mat2 = array(array(1, 1, 1, 1),               array(2, 2, 2, 2),               array(3, 3, 3, 3),               array(4, 4, 4, 4)); multiply($mat1, $mat2, $res); $N = 4; echo ("Result matrix is \n"); for ($i = 0; $i < $N; $i++) {     for ($j = 0; $j < $N; $j++)     {         echo ($res[$i][$j]);         echo(" ");     }     echo ("\n"); } // This code is contributed  // by Shivi_Aggarwal  ?> ``` **输出**: ``` Result matrix is 10 10 10 10 20 20 20 20 30 30 30 30 40 40 40 40 ``` **矩形矩阵的乘法**: 我们在 C 中使用指针来乘法到矩阵。 请参考以下帖子作为代码的前提条件。 [如何在 C 中将 2D 数组作为参数传递?](https://www.geeksforgeeks.org/pass-2d-array-parameter-c/) ## C++ ``` // C++ program to multiply two // rectangular matrices #include<bits/stdc++.h> using namespace std; // Multiplies two matrices mat1[][]  // and mat2[][] and prints result. // (m1) x (m2) and (n1) x (n2) are  // dimensions of given matrices. void multiply(int m1, int m2, int mat1[][2],                int n1, int n2, int mat2[][2]) {     int x, i, j;     int res[m1][n2];     for (i = 0; i < m1; i++)      {         for (j = 0; j < n2; j++)          {             res[i][j] = 0;             for (x = 0; x < m2; x++)              {                 *(*(res + i) + j) += *(*(mat1 + i) + x) *                                      *(*(mat2 + x) + j);             }         }     }     for (i = 0; i < m1; i++)      {         for (j = 0; j < n2; j++)          {             cout << *(*(res + i) + j) << " ";         }         cout << "\n";     } } // Driver code int main() {     int mat1[][2] = { { 2, 4 }, { 3, 4 } };     int mat2[][2] = { { 1, 2 }, { 1, 3 } };     int m1 = 2, m2 = 2, n1 = 2, n2 = 2;     multiply(m1, m2, mat1, n1, n2, mat2);     return 0; } // This code is contributed  // by Akanksha Rai(Abby_akku) ```