C++兩個矩陣相乘


/*
編程求兩個矩陣相乘的結果。輸入第一行是整數m,n,表示第一個矩陣式m行n列的;然后是一個m * n的矩陣。
再下一行的輸入時整數p,q,表示下一個矩陣p行,q列的(n=p);然后就是一個p行q列的矩陣。
要求輸出兩個矩陣相乘的結果矩陣(1<m、n、p、q<=8).
P82頁
2014年10月3日21:32:23
*/
#include <iostream>
using namespace std;
const int size = 10;
void init(int *, int *, int a[][size]);//初始化數組
void multi(int, int, int, int, int a[][size], int b[][size], int result[][size]);
void print(int, int, int result[][size]);
int main()
{
    int m, n, p, q;
    int a[size][size];
    int b[size][size];
    int result[size][size] = { 0 }; //將保存結果的數組初始化為0;
    /*
    int a[size][size] = { { 2, 4, 5 }, { 2, 1, 3 } };  //初始化數組
    int b[size][size] = { { 1, 1, 1 }, { 2, 3, 2 }, { 0, 1, 4 } };  //初始化數組
    m = 2;
    n = 3;
    p = q = 3;
    */
    init(&m, &n, a);
    init(&p, &q, b);
    multi(m, n, p, q, a, b, result);
    //print(m, n, a);   檢查輸入矩陣
    //print(p, q, b);
    print(m, q, result);
    system("pause");
    return 0;
}
void multi(int m, int n, int p, int q, int a[][size], int b[][size], int result[][size])
{
    if (n == p) //第一個矩陣的列數與第二個矩陣的行數相等時,兩個矩陣才能相乘;
        for (int i = 0; i < m; i++)  //a的行數
        {
            for (int j = 0; j < q; j++)      //b的列數
            {
                for (int k = 0; k < n; k++)  //a的列數
                {
                    result[i][j] += a[i][k] * b[k][j];
                }
            }
        }
    else
        printf("行數不匹配\n");
}
void print(int m, int q, int result[][size])
{
    for (int i = 0; i < m; i++)
    {
        for (int j = 0; j < q; j++)
        {
            printf("%d\t", result[i][j]);
        }
        printf("\n");
    }
}
void init(int *pm, int *pn, int a[][size])
{
    cin >> *pm >> *pn;
    for (int i = 0; i < *pm; i++)
    {
        for (int j = 0; j < *pn; j++)
        {
            cin >> a[i][j];
        }
    }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM