老師布置的作業,對于怎么寫這個自定函式完全沒有頭緒,望大神指教,感激不盡
Declare a 3x3 2D integer array, int iarray[3][3], and initialize the values for all elements.
iarray[3][3] =
1 2 3
0 1 4
5 6 0
Write a function to perform integer matrix multiplication and the prototype of the function should be
as follows,
int **MatrixMult(int **A, int m, int n, int **B, int p, int q);
You should check if n equals to p in order to perform matrix multiplication. The function should return
a 2D integer array with mxq.
Declare another 3x3 integer arrays, int B[3][3], and initialize them as follows,
B[3][3] =
?24 18 5
20 ?15 ?4
?5 4 1
Call MatrixMult function to perform matrix multiplication of these two 3x3 integer arrays declared
above.
uj5u.com熱心網友回復:
用矩陣公式求就可以,兩個回圈一個可以解決uj5u.com熱心網友回復:
矩陣相乘?很久沒搞了還專門去搜了下怎么個乘法:處理一個問題,我一般都是分析后在自己的邏輯中走得通再以代碼實作
1.首先我們先理解矩陣是怎么相乘的,以下摘自百度百科:
矩陣相乘最重要的方法是一般矩陣乘積。它只有在第一個矩陣的列數(column)和第二個矩陣的行數(row)相同時才有意義 。一般單指矩陣乘積時,指的便是一般矩陣乘積。一個m×n的矩陣就是m×n個數排成m行n列的一個數陣
2.從以上得知,第一步我們得判斷 第一個矩陣的列數(column)和第二個矩陣的行數(row) 是否相等,相等才能進行下一步,不等則應該提示錯誤。這一點貌似提中也有提到You should check if n equals to p in order to perform matrix multiplication. 就是判斷n和q是否相等
3.

題中給出的函式原型:
int ** MatrixMult(int ** A,int m,int n,int ** B,int p,int q);
首先我們的宣告一個二維陣列,以m為行,q為列
函式原型沒有給出回傳值的傳入,為了避免堆疊被彈出時在使用回傳值產生難以預料的后果,可以使用new或者malloc動態申請這個二維陣列的記憶體
4.乘積C的第m行第n列的元素等于矩陣A的第m行的元素與矩陣B的第n列對應元素乘積之和:
for(int i = 0;i<m;i++)//矩陣C的行數等于矩陣A的行數
{
for(int j =0;j<q;j++)//C的列數等于B的列數。
{
for(int k =0;k<n;k++)//獲取C中第i行j列的元素
{
C[i][j] += A[i][j]*B[j][i];//A中第i行j列與B中j行i列的元素相乘
}
}
}
uj5u.com熱心網友回復:
我覺得用二維指標來操作二維陣列不可行,而應該用陣列指標(int (*A)[3])或者一維指標(int *A)來操作二維陣列。由于二維指標不知道你一行多少列,所以無法對二維陣列進行操作,只有陣列指標或者一維指標可以
其中,陣列指標的操作就跟使用二維陣列一樣都是A[行號][列號]的形式,而一維陣列則是*(A+行號*列數+列號)
這樣才能正確操作二維陣列。
不知道你們老師是如何成功地使用二維指標來操作二維陣列的,因此我對該題答案也很感興趣,如果有了答案還請讓我參考參考,增添些知識。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/49200.html
標籤:新手樂園
上一篇:基于winpacp的arp欺騙實驗,編譯一直出錯,大家可以幫忙看看嘛?
下一篇:誰能告訴我這是怎么回事
