新浪博客

c语言——综合程序九——矩阵运算

2017-11-01 13:00阅读:
综合程序九——矩阵运算
1. 编写矩阵定义、初始化函数;
2. 编写矩阵加法函数;
3. 编写矩阵减法函数;
4. 编写矩阵乘法函数;
5. 编写求矩阵均值函数;
6. 编写求一个矩阵的子阵函数;
7. 编写矩阵输出函数;
8. 编写主控函数;
主要函数和结构参考原型如下:
typedefstruct{
double**mat;
introw;
intcol;
}Matrix;

voidInitialMatrix(Matrix*T,introw,intcol);//只分配空间不初始化;
voidInitialMatrixZero(Matrix*T,introw,intcol);//初始化为0
voidInitialMatrixRand(Matrix *T,int row, int col); //初始化为50以内随机正整数
voidInputMatrix(Matrix*T); //键盘输入矩阵
voidDestroyMatrix(Matrix*T); //释放矩阵空间
voidPrintfMatrix(Matrix*T); //矩阵输出
intAddMatrix(Matrix*A,Matrix*B,Matrix*C);//矩阵加
intMinusMatrix(Matrix*A,Matrix*B,Matrix*C); //矩阵减
intMultiMatrix(Matrix*A,Matrix*B,Matrix*C); //矩阵乘法
doubleMeanMatrix(Matrix*T); //矩阵元素均值
intSubMatrix(Matrix*T1,Matrix*T2,intBeginRow,intBeginCol,intEndRow,intEndCol); //T1的子矩阵T2;
void PrintMatrix(Matrix*T); //矩阵输出

测试程序参考界面如下所示:
矩阵函数测试,请选择功能,输入对应的数字:
***************************************************
1:输入一个矩阵,求矩阵均值;
2:产生一个随机数矩阵,求矩阵均值;
3:输入两个个矩阵,求矩阵和;
4:输入两个个矩阵,求矩阵差;
5:输入两个个矩阵,求矩阵积;
6:产生两个个随机数矩阵,求矩阵和;
7:产生两个个随机数矩阵,求矩阵差;
8:产生两个个随机数矩阵,求矩阵积;
9:求矩阵的子阵,如矩阵的2-4行,1-3列的子阵;
0:结束!


源程序清单如下:
#include
#include
#include
#include
//by 郑元帅 UESTC c语言——EXERCISE
typedef struct{
double**mat;
int row;
int col;
}Matrix;
void InitialMatrix(Matrix*T,int row,int col)//只分配空间不初始化;
{
int i;
T->mat=(double**)malloc(row*sizeof(double*));
for(i=0;i
T->mat[i]=(double*)malloc(col*sizeof(double));
T->row=row;
T->col=col;
}
void InitialMatrixZero(Matrix*T,int row,int col)//初始化为0
{
int i,j;
InitialMatrix(T,row,col);
for(i=0;i
for(j=0;j
T->mat[i][j]=0;
T->row=row;
T->col=col;
}
void InitialMatrixRand(Matrix *T,int row, int col) //初始化为50以内随机正整数
{
int i,j;
// srand((unsigned) time(NULL));
InitialMatrix(T,row,col);
for(i=0;i
for(j=0;j
T->mat[i][j]=rand()P+1;
T->row=row;
T->col=col;
}
void InputMatrix(Matrix*T,int row,int col) //键盘输入矩阵
{
InitialMatrix(T,T->row,T->col);
int i,j;
for(i=0;irow;i++)
for(j=0;jcol;j++)
scanf('%lf',&T->mat[i][j]);
T->row=row;
T->col=col;
}
void DestroyMatrix(Matrix*T) //释放矩阵空间
{
int i;
for(i=0;irow;i++)
free(T->mat[i]);
free(T->mat);
}
void PrintfMatrix(Matrix*T) //矩阵输出
{
int i,j;
for(i=0;irow;i++)
{
for(j=0;jcol;j++)
printf('%.2lf\t',T->mat[i][j]);
printf('');
}
}
void AddMatrix(Matrix*A,Matrix*B,Matrix*C)//矩阵加
{
int i,j;
for(i=0;irow;i++)
for(j=0;jcol;j++)
C->mat[i][j]=A->mat[i][j]+B->mat[i][j];
}
void MinusMatrix(Matrix*A,Matrix*B,Matrix*C) //矩阵减
{
int i,j;
for(i=0;irow;i++)
for(j=0;jcol;j++)
C->mat[i][j]=A->mat[i][j]-B->mat[i][j];
}
void MultiMatrix(Matrix*A,Matrix*B,Matrix*C) //矩阵乘法
{
int i,j,sum=0;
int n;
for(i=0;irow;i++)
{
for(j=0;jcol;j++)
{
for(n=0;nrow;n++)
sum=A->mat[i][n]*B->mat[n][j]+sum;
C->mat[i][j]=sum;
sum=0;
}
}
}
double MeanMatrix(Matrix*T) //矩阵元素均值
{
int i,j;
double sum=0;
double ave=0;
for(i=0;irow;i++)
for(j=0;jrow;j++)
sum=T->mat[i][j]+sum;
ave=sum/(T->row*T->row);
return ave;
}
void SubMatrix(Matrix*T1,Matrix*T2,int BeginRow,int BeginCol,int EndRow,int EndCol) //T1的子矩阵T2;
{
int i,j;
for(i=BeginRow-1;i
for(j=BeginCol-1;j
T2->mat[i-BeginRow+1][j-BeginCol+1]=T1->mat[i][j];
T2->row=EndRow-BeginRow+1;
T2->col=EndCol-BeginCol+1;
}
int main()
{
int p=1;
double t;
int row,col;
int BeginRow,BeginCol,EndRow,EndCol;
Matrix*A = (Matrix*)malloc(sizeof(Matrix));
Matrix*B = (Matrix*)malloc(sizeof(Matrix));
Matrix*C = (Matrix*)malloc(sizeof(Matrix));
InitialMatrixZero(A,row,col);
InitialMatrixZero(B,row,col);
InitialMatrixZero(C,row,col);
while(p!=0)
{
printf('矩阵函数测试,请选择功能,输入对应的数字:');

printf('***************************************************1:输入一个矩阵,求矩阵均值;2:产生一个随机数矩阵,求矩阵均值:3:输入两个个矩阵,求矩阵和;

我的更多文章

下载客户端阅读体验更佳

APP专享