資源簡(jiǎn)介
strassen矩陣乘法的C代碼
【問題描述】
從文件arr.in中讀入一個(gè)m行k列的整數(shù)矩陣a和一個(gè)k行n列的整數(shù)矩陣b(1 < m, k, n < 200),在標(biāo)準(zhǔn)輸出上輸出這兩個(gè)矩陣的乘積。
【輸入形式】
輸入文件arr.in中有m+k行,前m行是矩陣a的元素aij,后k行是矩陣b的元素bij (-3000 < aij, bij < 3000)。
【輸出形式】
輸出結(jié)果為m行,每行n個(gè)元素,按整數(shù)左對(duì)齊方式輸出,每個(gè)元素占相同的位數(shù),且各個(gè)元素之間空格的最少數(shù)量應(yīng)等于1。
【輸入樣例】
1 0
0 1
1 1
1 1
【輸出樣例】
1 1
1 1
代碼片段和文件信息
#include?“stdio.h“
#include
#define?mytype?int//矩陣元素的數(shù)據(jù)類型
#define?myinputmode?“%d“//矩陣元素的輸入格式
#define?myprintmode?“%4d“//矩陣元素的輸出格式
/*以上參數(shù)的設(shè)置可根據(jù)所計(jì)算矩陣的元素的數(shù)值類型進(jìn)行相應(yīng)改變
如更改為浮點(diǎn)型數(shù)據(jù)則可以使用下面的設(shè)置
#define?mytype?float
#define?myinputmode?“%f“
#define?myprintmode?“%6.2f“
*/
/////////////////////////////////////////
/****************************************
函數(shù)名:is2
參數(shù):m為長(zhǎng)整型整數(shù)
功能:檢測(cè)m是否是2的正整數(shù)次冪
返回值:返回布爾型變量
????????true則表示m為2的正整數(shù)次冪
??false則表示m不是2的正整數(shù)次冪
****************************************/
int?is2(int?m)
{
?if(m<0)return?0;
?if(m>=2)
?{
??if((m%2)==0)?return?is2(m/2);
??else?return?0;
?}
?else
?{
??if(m==1)return?1;
??else?return?0;
?}
?return?0;
}
/////////////////////////////////////////
/****************************************
函數(shù)名:inputmatrix
參數(shù):M為指向數(shù)組的指針,用來存儲(chǔ)輸入的矩陣
??????m長(zhǎng)整型,是數(shù)組M所存矩陣的維數(shù)
???name字符型數(shù)組,是需要進(jìn)行數(shù)據(jù)輸入的矩陣的名字
功能:矩陣數(shù)據(jù)輸入的函數(shù),通過輸入矩陣的每個(gè)元素將
??????矩陣存入數(shù)組
返回值:無
****************************************/
void?inputmatrix(mytype?*?Mint?mchar?*nameint?a[][200])
{
?int?ij;
?for(i=0;i ??for(j=0;j ??{
???
???M[i*m+j]=a[i+1][j+1];
??
??}
}
/////////////////////////////////////////
/****************************************
函數(shù)名:printmatrix
參數(shù):M為指向數(shù)組的指針,數(shù)組中存儲(chǔ)著矩陣
??????m長(zhǎng)整型,是數(shù)組M所存矩陣的維數(shù)
???name字符型數(shù)組,是需要進(jìn)行數(shù)據(jù)輸入的矩陣的名字
功能:矩陣數(shù)據(jù)輸出顯示的函數(shù),將矩陣元素一一顯示一在屏幕上
返回值:無
****************************************/
void?printmatrix(mytype?*?Mint?mint?nchar?*name)
{
?int?ij;
?for(i=0;i ?{
??for(j=0;j ??{
???printf(myprintmodeM[i*m+j]);
??}
??printf(“\n“);
?}
}
void?printmatrix2(mytype?*?Mint?Nint?mint?nchar?*name)
{
?int?ijk;
?for(k=0i=0;k ?{
??for(j=0;j ??{
???printf(myprintmodeM[i+j]);
??}
??printf(“\n“);
?}
}
/////////////////////////////////////////
/****************************************
函數(shù)名:Matrix_add_sub
參數(shù):A,B為指向數(shù)組的指針,數(shù)組中存儲(chǔ)著矩陣
???C為指向數(shù)組的指針,用來存儲(chǔ)運(yùn)算結(jié)果
??????m長(zhǎng)整型,是數(shù)組A、B、C所存矩陣的維數(shù)
???add為布爾型變量,為true則C=A+B,為false則C=A-B
功能:根據(jù)add值對(duì)A、B進(jìn)行加減運(yùn)算并將結(jié)果存入C
返回值:無
****************************************/
void?Matrix_add_sub(mytype?*?Amytype?*?Bmytype?*?Cint?mint?add)
{
?long?i;
?for(i=0;i ?{
??if(add==1)
???C[i]=A[i]+B[i];
??else
???C[i]=A[i]-B[i];
?}
}
/////////////////////////////////////////
/****************************************
函數(shù)名:GetHalfValue
參數(shù):B為指向數(shù)組的指針,數(shù)組中存儲(chǔ)著矩陣。其中B是指向m維矩陣中的一個(gè)元素。
???A為指向數(shù)組的指針,用來接收B中的四分之一數(shù)據(jù)
??????m長(zhǎng)整型,是數(shù)組B所指矩陣的維數(shù)
功能:從B所在位置向左和向右取矩陣的m/2維的子矩陣(子矩陣中包括B所指元素)并存入A
返回值:無
****************************************/
void?GetHalfValue(mytype?*?Amytype?*?Bint?m)
{
?int?ij;
?for(i=0;i ?{
??for(j=0;j ??{
???A[i*m/2+j]=B[i*m+j];
??}
?}
}
/////////////////////////////////////////
/****************************************
函數(shù)名:UpdateHalfValue
參數(shù):B為指向數(shù)組的指針,數(shù)組中存儲(chǔ)著矩陣。其中B是指向m維矩陣中的一個(gè)元素。
???A為指向數(shù)組的指針,存儲(chǔ)著一個(gè)m/2維矩陣
??????m長(zhǎng)整型,是數(shù)組B所指矩陣的維數(shù)
功能:把A矩陣所有元素存入從B所在位置向左和向右的m/2維的子矩陣(子矩陣中包括B所指元素)
返回值:無
****************************************/
void?UpdateHalfValue(mytype?*?A
評(píng)論
共有 條評(píng)論