C語(yǔ)言每日練習(xí)之求兩個(gè)矩陣的乘積詳解
分析
在數(shù)學(xué)中,矩陣(Matrix)是一個(gè)按照長(zhǎng)方陣列排列的復(fù)數(shù)或?qū)崝?shù)集合,矩陣是高等代數(shù)學(xué)中的常見(jiàn)工具,也常見(jiàn)于統(tǒng)計(jì)分析等應(yīng)用數(shù)學(xué)學(xué)科中。
矩陣的乘法有以下注意事項(xiàng):
- 1、當(dāng)矩陣A的列數(shù)(column)等于矩陣B的行數(shù)(row)時(shí),A與B可以相乘。
- 2、矩陣C的行數(shù)等于矩陣A的行數(shù),C的列數(shù)等于B的列數(shù)。
- 3、乘積C的第m行第n列的元素等于矩陣A的第m行的元素與矩陣B的第n列對(duì)應(yīng)元素乘積之和。
代碼實(shí)現(xiàn):只需要用矩陣乘積的公式求出新的矩陣,即為兩個(gè)矩陣的乘積,程序中還需要判斷輸入的兩個(gè)矩陣是否可以相乘。
代碼實(shí)現(xiàn)
#include <stdio.h> int main() { int line_a = 0; //A矩陣行數(shù) int col_a = 0; //A矩陣列數(shù) int line_b = 0; //B矩陣行數(shù) int col_b = 0; //B矩陣列數(shù) int i = 0; int j = 0; int k = 0; /* 獲取A矩陣行數(shù)和列數(shù) */ printf("請(qǐng)輸入A矩陣的行數(shù)和列數(shù)\n"); scanf("%d%d", &line_a, &col_a); int matrix_A[line_a][col_a]; /* 獲取B矩陣行數(shù)和列數(shù) */ printf("請(qǐng)輸入B矩陣的行數(shù)和列數(shù)\n"); scanf("%d%d", &line_b, &col_b); int matrix_B[line_b][col_b]; if(col_a != line_b) { printf("error,A矩陣的列數(shù)和B矩陣的行數(shù)必須相等!\n"); return 0; } int matrix_C[line_a][col_b]; //C矩陣:A矩陣和B矩陣的乘積 /* 獲取A矩陣元素 */ for(i = 0; i< line_a; i++) { printf("請(qǐng)輸入A矩陣第%d行元素\n", i); for(j = 0; j < col_a; j++) { scanf("%d", &matrix_A[i][j]); } } /* 獲取B矩陣元素 */ for(i = 0; i< line_b; i++) { printf("請(qǐng)輸入B矩陣第%d行元素\n", i); for(j = 0; j < col_b; j++) { scanf("%d", &matrix_B[i][j]); } } /* 打印矩陣 */ printf("輸入的A矩陣為:\n"); for(i = 0; i < line_a; i++) { for(j = 0; j < col_a; j++) { printf("%d\t", matrix_A[i][j]); } printf("\n"); } printf("輸入的B矩陣為:\n"); for(i = 0; i < line_b; i++) { for(j = 0; j < col_b; j++) { printf("%d\t", matrix_B[i][j]); } printf("\n"); } /* 求AB的乘積,即矩陣C */ for(i = 0; i < line_a; i++) { for(j = 0; j < col_b; j++) { matrix_C[i][j] = 0; //初始化 for(k = 0; k < col_a; k++) matrix_C[i][j] += matrix_A[i][k] * matrix_B[k][j]; } } /* 打印C矩陣 */ printf("A矩陣乘B矩陣:\n"); for(i = 0; i < line_a; i++) { for(j = 0; j < col_b; j++) { printf("%d\t", matrix_C[i][j]); } printf("\n"); } return 0; }
運(yùn)行結(jié)果
總結(jié)
本篇文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
C++11中l(wèi)onglong超長(zhǎng)整型和nullptr初始化空指針
本文介紹?C++11?標(biāo)準(zhǔn)中新添加的?long?long?超長(zhǎng)整型和?nullptr?初始化空指針,在?C++11?標(biāo)準(zhǔn)下,相比?NULL?和?0,使用?nullptr?初始化空指針可以令我們編寫(xiě)的程序更加健壯,本文結(jié)合示例代碼給大家詳細(xì)講解,需要的朋友跟隨小編一起看看吧2022-12-12C++ map與set封裝實(shí)現(xiàn)過(guò)程講解
set set是一種關(guān)聯(lián)式容器,下面這篇文章主要給大家介紹了關(guān)于C++中map和set使用的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用C++具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2023-03-03用VC++6.0的控制臺(tái)實(shí)現(xiàn)2048小游戲的程序
本文是作者拜讀劉地同學(xué)的《C語(yǔ)言控制臺(tái)版2048》之后感覺(jué)非常不錯(cuò),添加了注釋之后分享給大家的,方便更多的初學(xué)者閱讀學(xué)習(xí),有需要的小伙伴參考下。2015-03-03Dev C++編譯時(shí)運(yùn)行報(bào)錯(cuò)source file not compile問(wèn)題
這篇文章主要介紹了Dev C++編譯時(shí)運(yùn)行報(bào)錯(cuò)source file not compile問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01C語(yǔ)言如何寫(xiě)類實(shí)現(xiàn)教程示例
這篇文章主要為大家介紹了C語(yǔ)言如何寫(xiě)類的實(shí)現(xiàn)教程示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04