C語言每日練習(xí)之求兩個(gè)矩陣的乘積詳解
分析
在數(shù)學(xué)中,矩陣(Matrix)是一個(gè)按照長方陣列排列的復(fù)數(shù)或?qū)崝?shù)集合,矩陣是高等代數(shù)學(xué)中的常見工具,也常見于統(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é)
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
如何實(shí)現(xiàn)socket網(wǎng)絡(luò)編程的多線程
首先,學(xué)好計(jì)算機(jī)網(wǎng)絡(luò)知識(shí)真的很重要。雖然,學(xué)不好不會(huì)影響理解下面這個(gè)關(guān)于宏觀講解,但是,學(xué)好了可以自己打漁吃,學(xué)不好就只能知道眼前有魚吃卻打不到漁。在Java中網(wǎng)絡(luò)程序有2種協(xié)議:TCP和UDP,下面可以和小編一起學(xué)習(xí)下2019-05-05
C語言實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)(多文件)
這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)學(xué)生信息管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-12-12
C++11中的可變參數(shù)模板/lambda表達(dá)式
C++11的新特性可變參數(shù)模板能夠讓我們創(chuàng)建可以接受可變參數(shù)的函數(shù)模板和類模板,相比C++98和C++03,類模板和函數(shù)模板中只能含固定數(shù)量的模板參數(shù),可變參數(shù)模板無疑是一個(gè)巨大的改進(jìn),這篇文章主要介紹了C++11中的可變參數(shù)模板/lambda表達(dá)式,需要的朋友可以參考下2023-03-03
C++函數(shù)參數(shù)匹配規(guī)則示例小結(jié)
這篇文章主要介紹了C++函數(shù)參數(shù)匹配規(guī)則,本文通過示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-08-08
Windows程序內(nèi)部運(yùn)行機(jī)制實(shí)例詳解
這篇文章主要介紹了Windows程序內(nèi)部運(yùn)行機(jī)制實(shí)例詳解,對(duì)于學(xué)習(xí)Windows程序設(shè)計(jì)來說是非常重要的一課,需要的朋友可以參考下2014-08-08

