geekdoc-python-zh/docs/overiq/117.md

3.3 KiB
Raw Permalink Blame History

C 程序:相乘两个矩阵

原文:https://overiq.com/c-examples/c-program-to-multiply-two-matrices/

最后更新于 2020 年 9 月 23 日


下面是一个 C 程序,用来相乘两个矩阵:

/******************************************
 Program to multiply two matrices
******************************************/

#include<stdio.h> // include stdio.h
#define ROW1 2
#define COL1 2
#define ROW2 COL1
#define COL2 3

int main()
{
    int i, j, arr1[ROW1][COL1],
              arr2[ROW2][COL2],
              arr3[ROW1][COL2];

    printf("Enter first matrix (%d x %d): \n", ROW1, COL1);

    // input first matrix
    for(i = 0; i < ROW1; i++)
    {
        for(j = 0; j < COL1; j++)
        {            
            scanf("%d", &arr1[i][j]);
        }                
    }

    printf("\nEnter second matrix (%d x %d): \n", ROW2, COL2);

    // input second matrix
    for(i = 0; i < ROW2; i++)
    {
        for(j = 0; j < COL2; j++)
        {            
            scanf("%d", &arr2[i][j]);
        }                
    }

    printf("\narr1 * arr2 = ");        

    // multiply two matrices
    for(i = 0; i < ROW1; i++)
    {
        for(j = 0; j < COL2; j++)
        {
            arr3[i][j] = 0;

            for(int k = 0; k < COL1; k++)
            {
                arr3[i][j] += arr1[i][k] * arr2[k][j];            
            }                                    
        }                

        printf("\n");
    }       

    // print the result
    for(i = 0; i < ROW2; i++)
    {
        for(j = 0; j < COL2; j++)
        {
            printf("%d ", arr3[i][j]);
        }              
        printf("\n");
    }

    // signal to operating system everything works fine
    return 0;
}

现在试试

预期输出:

Enter first matrix (2 x 2): 
2 3
4 5

Enter second matrix (2 x 3): 
6 4 2
7 8 9

arr1 * arr2 =

33 32 31 
59 56 53

它是如何工作的

只有当第一个矩阵的列数等于第二个矩阵的行数时,两个矩阵才能相乘。

设,A为大小为2x3的矩阵,B为大小为3x2的矩阵,则,A * B由下式给出:


\左(\ begin { array } { CCC } a&b&c \ \ d&e&f \ end { array } \右)* \左(\ begin { array } { cc } g&h \ \ k&l \ \ o&p \ end { array } \右)= \左(\ begin { array } { cc } a * g+b * k+c * o&a * h+b * l+c * p \ \ d * g+o

一般来说,如果矩阵`A`的大小是`m x n``B`的大小是`n x p`,那么矩阵`A * B`的大小就是`m x p`。

以下是该程序的工作原理:

1.  第一个 for 循环(第 20-26 行)要求用户输入第一个矩阵。
2.  第二个 for 循环(第 31-37 行)要求用户输入第二个矩阵。
3.  第三个 for 循环(第 42-55 行)将矩阵相乘。
4.  第四个 for 循环(第 58-65 行)打印矩阵乘法的结果。

* * *

**推荐阅读:**

*   [C 程序求数组中最大最小元素](/c-examples/c-program-to-find-the-maximum-and-minimum-element-in-the-array/)
*   [反转数组元素的程序](/c-examples/c-program-to-reverse-the-elements-of-an-array/)
*   [对数组元素求和的程序](/c-examples/c-program-to-sum-the-elements-of-an-array/)
*   [C 程序求数组中奇偶元素的个数](/c-examples/c-program-to-find-the-count-of-even-and-odd-elements-in-the-array/)
*   [C 程序添加两个加法矩阵](/c-examples/c-program-to-add-two-matrices/)

* * *

* * *