void arymul(int a[4][5], int b[5][3], int c[4][3])
網(wǎng)站建設哪家好,找創(chuàng)新互聯(lián)公司!專注于網(wǎng)頁設計、網(wǎng)站建設、微信開發(fā)、微信小程序定制開發(fā)、集團企業(yè)網(wǎng)站建設等服務項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了榆林免費建站歡迎大家使用!
{
int i, j, k;
int temp;
for(i = 0; i 4; i++){
for(j = 0; j 3; j++){
temp = 0;
for(k = 0; k 5; k++){
temp += a[i][k] * b[k][j];
}
c[i][j] = temp;
printf("%d/t", c[i][j]);
}
printf("%d/n");
}
}
上面那個程序是我寫的,下面寫的是兩個2*2矩陣相加和相乘的程序(行數(shù)和列數(shù)可以在主函數(shù)中更改),不得不說一句,有關矩陣的東西就是麻煩:
#include stdio.h
#include stdlib.h
int** NewMatrix(int row,int col) //動態(tài)開辟一個數(shù)組
{
int i,j;
int** matrix;
matrix=(int **)malloc(sizeof(int *)*row);
for(i=0;irow;i++)
{
matrix[i]=(int*)malloc(sizeof(int)*col);
}
//輸入矩陣的元素
printf("please input the array elements:\n") ;
for(i=0;irow;i++)
{
for(j=0;jcol;j++)
{
scanf("%d",matrix[i][j]);
}
}
return matrix;
}
//兩矩陣相加a[row][col]+b[row][col]
int **addMatrix(int** a,int** b,int row,int col)
{
int i,j;
int** matrix;
//動態(tài)建立一個矩陣空間以存放運算結(jié)果
matrix=(int **)malloc(sizeof(int *)*row);
for(i=0;irow;i++)
{
matrix[i]=(int*)malloc(sizeof(int)*col);
}
//計算a+b
for(i=0;irow;i++)
{
for(j=0;jcol;j++)
{
matrix[i][j] = a[i][j] + b[i][j];
}
}
return matrix;
}
//兩矩陣相乘a[row][com]*b[com][col]
int **multiplyMatrix(int **a,int **b,int row,int com,int col)
{
int i,j,k;
int** matrix;
//動態(tài)建立一個矩陣空間以存放運算結(jié)果
matrix=(int **)malloc(sizeof(int *)*row);
for(i=0;irow;i++)
{
matrix[i]=(int*)malloc(sizeof(int)*col);
}
//計算a+b
for(i=0;irow;i++)
{
for(j=0;jcol;j++)
{
matrix[i][j] = 0;
for(k=0;kcom;k++)
{
matrix[i][j] += a[i][k] * b[k][j];
}
}
}
return matrix;
}
void main()
{
int i,j;
int row = 2,col = 2; //行數(shù)和列數(shù)在此更改
int **a,**b,**c;
a = NewMatrix(row,col); //動態(tài)建立矩陣a
b = NewMatrix(row,col); //動態(tài)建立矩陣b
//調(diào)用函數(shù),求兩矩陣的和
c = addMatrix(a,b,row,col);
//輸出兩矩陣的和
printf("\na add b is:\n");
for(i=0;irow;i++)
{
printf("\n");
for(j=0;jcol;j++)
{
printf("%d ",c[i][j]);
}
}
//調(diào)用函數(shù),求兩矩陣的積
c = multiplyMatrix(a,b,row,row,col);
//輸出兩矩陣的積
printf("\na multiply b is:\n");
for(i=0;irow;i++)
{
printf("\n");
for(j=0;jcol;j++)
{
printf("%d ",c[i][j]);
}
}
}
本來程序還可以寫得簡單一些,由于你要求兩矩陣同時能夠相加和相乘,從而可以判定兩矩陣的行數(shù)和列數(shù)應該是相等的,因而在函數(shù)傳遞參數(shù)的時候只要傳一個就行了。但是考慮到程序的可移植性,我在寫相加和相乘的子函數(shù)時,考慮了普遍性,即對于給定的任意的row和col(甚至row != col),加法和乘法都能夠適用。然而這樣一來,形參看起來就比較多了。你自己就情況而定吧,不懂的地方發(fā)我消息。
函數(shù)類型是根據(jù)有無返回值判斷的,無返回值就把函數(shù)定義為void類型
如果是單純輸出矩陣那就不用返回了,如果還要傳回主函數(shù)有其它應用那就返回吧
用C語言編寫程序(兩個矩陣相加)代碼如下:
/**
MatrixAddition.c
實現(xiàn)兩個矩陣相加
*/
#includestdio.h
const int COLS=3;
void printMatirx(int *pArray,int rows,int cols);
void printMatirx2(int (*pArray)[COLS],int rows);
int main()
{
int A[3][4]={{15,10,9,12},
{18,14,8,7},
{16,13,6,11}};
printf("矩陣A=\n");
printMatirx(A,3,4);
int B[3][4]={{4,3,5,2},
{0,9,6,1},
{5,7,2,6}};
printf("矩陣B=\n");
printMatirx(B,3,4);
int C[3][4];
int i,j;
//矩陣相加:兩個矩陣必須行數(shù)和列數(shù)一樣才能相加,
//和矩陣的每個元素分別是兩個矩陣對應的元素的和
printf("矩陣A+矩陣B=\n");
for(i=0;i3;i++)//控制行
{
for(j=0;j4;j++)
{
C[i][j]=A[i][j]+B[i][j];
//printf("%3d",C[i][j]);//輸出結(jié)果
}
//? ? ? ? printf("\n");
}
int (*p)[COLS]=C;
printMatirx2(p,3);
/*結(jié)果應為:
19 13 14 14
18 23 14? 8
21 20? 8 17
*/
printf("矩陣C-矩陣A=\n");
for(i=0;i3;i++)//控制行
{
for(j=0;j4;j++)
{
printf("%3d",C[i][j]-A[i][j]);//輸出結(jié)果
}
printf("\n");
}
/*結(jié)果應為:
4? 3? 5? 2
0? 9? 6? 1
5? 7? 2? 6
*/
//矩陣數(shù)乘:
int D[3][4];
printf("矩陣D:\n");
for(i=0;i3;i++)//控制行
{
for(j=0;j4;j++)
{
D[i][j]=1;
printf("%d\t", D[i][j]);//輸出結(jié)果
}
printf("\n");
}
int mul;
printf("矩陣D數(shù)乘以:");
scanf("%d",mul);
printf("矩陣D數(shù)乘以%d=\n",mul);
for(i=0;i3;i++)//控制行
{
for(j=0;j4;j++)
{
D[i][j]=D[i][j]*mul;
printf("%d\t", D[i][j]);//輸出結(jié)果
}
printf("\n");
}
return 0;
}
擴展資料:
C語言矩陣加減法函數(shù):
void matrix_a(double **a_matrix, const double **b_matrix, const double **c_matrix,int krow, int kline, int ktrl)
////////////////////////////////////////////////////////////////////////////
// ?a_matrix=b_matrix+c_matrix
// ? krow ? :行數(shù)
// ? kline ?:列數(shù)
// ? ktrl ? :大于0: 加法 ?不大于0:減法
////////////////////////////////////////////////////////////////////////////
{
int k, k2;
for (k = 0; k krow; k++)?
{
for(k2 = 0; k2 kline; k2++)
?
{
a_matrix[k][k2] = b_matrix[k][k2]
? ? ? ? ?
+ ((ktrl 0) ? c_matrix[k][k2] : -c_matrix[k][k2]);
}
}
}
參考資料:
百度百科-C語言