C/C++語言程序實現矩陣相乘----通俗易懂(口決記憶)

一:先看下面兩個矩陣相乘:
矩陣A和B都是兩行兩列,矩陣相乘時,A的行元素乘以B的列元素,然後相加。即
在這裏插入圖片描述
202+51=45作爲C11(矩陣C的第一行第一列)

201+54=40作爲C12(矩陣C的第一行第二列)

152+101=40作爲C21(矩陣C的第二行第一列)

151+104=55作爲C22(矩陣C的第二行第二列)

學過線性代數的,肯定非常熟悉!

二:例題
在這裏插入圖片描述
三:解題思路:
(1)使用a【8】【8】和b【8】【8】 兩個二維數組,接受用戶使用鍵盤輸入2個矩陣。二維數組c作爲結果矩陣。
(2)思路:通過分析矩陣相乘的規則。
宏觀上來看,每次就是操作二維數組a的每一行,二維數組b的每一列。所以首先就需要使用兩層嵌套for循環,外層遍歷範圍是a的行數,內層是b的列數。現在計算二維數組c架子已經搭起來了,剩下就是填充二維數組的值了。我們在使用一層for循環,即一共三層嵌套for循環,那麼第三層for循環的範圍是多少?就是公共的下標號(例:2 X 3,3 X 1 就是相同的3)。好了,之前的二層for循環可以搭配第三層的for循環開始幹活了,第一層搭配第三層能夠取二維數組a的每一行元素,第二層搭配第三層能夠取出二維數組b的每一列,進行相乘就行了。
在這裏插入圖片描述
我們可以編一個口訣幫助記憶(tip:用一些順口溜,圖解可以容易理解也方便記憶)
一層循環 到行號
二層循環 到列號
三層循環 相同號
行列元素相乘出結果
我是這樣編的,有文采好的朋友,歡迎留言

代碼:

#include <iostream>
#include <stdio.h>
#define Length 8
using namespace std;

int main() {
	int m, n, p, q=0;
	int a[Length][Length], b[Length][Length],c[Length][Length];
	cout << "請輸入m*n的m和n的值" << endl;
	cin >> m >> n;
	cout << "請輸入m*n的具體元素" << endl;
	for (int i = 0; i < m; i++) {
		for (int j = 0; j < n; j++){
			cin >> a[i][j];
		}
	}
	cout << "請輸入p*q的具體元素" << endl;
	cin >> p >> q;
	cout << "請輸入p*q的具體元素" << endl;
	for (int i = 0; i < p; i++) {
		for (int j = 0; j < q; j++) {
			cin >> b[i][j];
		}
	}
	for (int i = 0; i < m; i++) {// 一層循環 第一個矩陣的行號
		for (int j = 0; j < q; j++) {// 二層循環 第二個矩陣的列號
			int sum = 0;
			for (int ii = 0; ii < n; ii++){// 三層循環 兩個矩陣的共同號
					sum+=a[i][ii] * b[ii][j];// 行列元素相乘出結果
			}
			c[i][j] =sum;
		}
	}
	for (int i = 0; i < m; i++) {// 輸出
		for (int j = 0; j < q; j++) {
			cout << c[i][j]<<" ";
		}
		cout << endl;
	}
	return 0;

效果:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章