c语言矩阵函数用法 c语言进行矩阵运算( 二 )


}
//输入矩阵的元素
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;
//动态建立一个矩阵空间以存放运算结果
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;
//动态建立一个矩阵空间以存放运算结果
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; //行数和列数在此更改
int **a,**b,**c;
a = NewMatrix(row,col); //动态建立矩阵a
b = NewMatrix(row,col); //动态建立矩阵b
//调用函数,求两矩阵的和
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]);
}
}
//调用函数 , 求两矩阵的积
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]);
}
}
}
本来程序还可以写得简单一些,由于你要求两矩阵同时能够相加和相乘,从而可以判定两矩阵的行数和列数应该是相等的,因而在函数传递参数的时候只要传一个就行了 。但是考虑到程序的可移植性 , 我在写相加和相乘的子函数时,考虑了普遍性 , 即对于给定的任意的row和col(甚至row != col),加法和乘法都能够适用 。然而这样一来,形参看起来就比较多了 。你自己就情况而定吧,不懂的地方发我消息 。
c语言矩阵运算矩阵乘法程序,动态分配内存c语言矩阵函数用法:
#includestdio.h
// b[j][k] * c[k][i] = a[j][i]
void matrix(int **b,int **c, int **a, int nx, int ny, int nk)
{
int i,j,k;
for (j=0;jny;j++)for(i=0;inx;i++)a[j][i]= 0;
for(j=0;jny;j++){
for(i=0;inx;i++){
for(k=0;knk;k++)a[j][i]+= b[j][k]*c[k][i];
};
};
}
void main()
{
int i,j,k,tmp;
int b_row,b_col;
int c_row,c_col;
int a_row,a_col;
int **b,**c,**a;
// 输入B 阵 行数 列数
printf("please enter b_row b_col of matrix B\n");
scanf("%d %d",b_row,b_col);
c_row = b_col;
// 输入C阵 列数
printf("please enter c_col of matrix C\n");
scanf("%d",c_col);
a_row = b_row;
a_col = c_col;
a= (int **) malloc(sizeof(int *) * a_row);
for (j=0;ja_row;j++){
a[j] = (int *) malloc(sizeof(int) * a_col);
}
b= (int **) malloc(sizeof(int *) * b_row);
for (j=0;jb_row;j++){
b[j] = (int *) malloc(sizeof(int) * b_col);
}
c= (int **) malloc(sizeof(int *) * c_row);
for (j=0;jc_row;j++){
c[j] = (int *) malloc(sizeof(int) * c_col);
}
if (!c[c_row-1]) {

推荐阅读