矩阵运算C语言实现.docx
- 文档编号:26912864
- 上传时间:2023-06-24
- 格式:DOCX
- 页数:18
- 大小:17.43KB
矩阵运算C语言实现.docx
《矩阵运算C语言实现.docx》由会员分享,可在线阅读,更多相关《矩阵运算C语言实现.docx(18页珍藏版)》请在冰豆网上搜索。
矩阵运算C语言实现
#include"stdafx.h"
#include
//结构体
typedefstruct{
double**mat;
introw;
intcol;
}Matrix;
voidInitialMatrix(Matrix*T,introw,intcol);//只分配空间不初始化;
voidInitialMatrixZero(Matrix*T,introw,intcol);//初始化为0
voidInitialMatrixRand(Matrix*T,introw,intcol);//初始化为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;
测试程序参考界面如下所示:
矩阵函数测试,请选择功能,输入对应的数字:
***************************************************
1:
输入一个矩阵,求矩阵均值;
2:
产生一个随机数矩阵,求矩阵均值;
3:
输入两个个矩阵,求矩阵和;
4:
输入两个个矩阵,求矩阵差;
5:
输入两个个矩阵,求矩阵积;
6:
产生两个个随机数矩阵,求矩阵和;
7:
产生两个个随机数矩阵,求矩阵差;
8:
产生两个个随机数矩阵,求矩阵积;
9:
求矩阵的子阵,如矩阵的2-4行,1-3列的子阵;
0:
结束!
#include
#include
//结构体
typedefstruct{
double**mat;
introw;
intcol;
}Matrix;
//函数声明
voidInitialMatrix(Matrix*T,introw,intcol);
voidInitialMatrixZero(Matrix*T,introw,intcol);
voidInitialMatrixRand(Matrix*T,introw,intcol);
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;
voidNMatrix(void);//求逆矩阵
//主函数
intmain()
{
intinputevent;
//inti,j;
introw,col;
MatrixT;
MatrixA;
MatrixB;
MatrixC;
printf("矩阵函数测试,请选择功能,输入对应的数字:
\n");
printf("***************************************************\n\n");
printf("1:
输入一个矩阵,求矩阵均值;\n");
printf("2:
产生一个随机数矩阵,求矩阵均值;\n");
printf("3:
输入两个个矩阵,求矩阵和;\n");
printf("4:
输入两个个矩阵,求矩阵差;\n");
printf("5:
输入两个矩阵,求矩阵积;");
printf("\n6:
产生两个随机数矩阵,求矩阵和;\n");
printf("7:
产生两个随机数矩阵,求矩阵差;\n");
printf("8:
产生两个随机数矩阵,求矩阵积;\n");
printf("9:
求矩阵的子阵,如矩阵的2-4行D,1-3列的子阵;\n");
printf("10:
输入一个方阵,求其逆矩阵\n");
printf("0:
结束!
\n");
printf("\n\n选择:
");
scanf("%d",&inputevent);
while(inputevent!
=0)
{
if(inputevent==1){
printf("您要输入的矩阵的行数和列数e.g:
5,6:
");
scanf("%d,%d",&row,&col);
InitialMatrix(&T,row,col);
InitialMatrixZero(&T,T.row,T.col);
InputMatrix(&T);
printf("\n矩阵的平均值为:
\n%lf\n\n",MeanMatrix(&T));
DestroyMatrix(&T);
}
if(inputevent==2){
printf("输入您要产生的矩阵的行数和列数e.g:
5,6:
");
scanf("%d,%d",&row,&col);
InitialMatrix(&T,row,col);
InitialMatrixRand(&T,row,col);
MeanMatrix(&T);
PrintfMatrix(&T);
printf("\n矩阵的平均值为:
\n%lf\n\n",MeanMatrix(&T));
DestroyMatrix(&T);
}
if(inputevent==3){
printf("您要输入的矩阵A的行数和列数e.g:
5,6:
");
scanf("%d,%d",&row,&col);
InitialMatrix(&A,row,col);
InitialMatrixZero(&A,A.row,A.col);
InputMatrix(&A);
printf("您要输入的矩阵B的行数和列数e.g:
5,6:
");
scanf("%d,%d",&row,&col);
InitialMatrix(&B,row,col);
InitialMatrixZero(&B,B.row,B.col);
InputMatrix(&B);
InitialMatrix(&C,B.row,B.col);
InitialMatrixZero(&C,C.row,C.col);
if(AddMatrix(&A,&B,&C)==1){
printf("\n\n矩阵的和为:
A*B\n\n");
PrintfMatrix(&C);
}
elseprintf("\n\n无法计算!
\n\n");
DestroyMatrix(&A);
DestroyMatrix(&B);
DestroyMatrix(&C);
}
if(inputevent==4){
printf("您要输入的矩阵A的行数和列数e.g:
5,6:
");
scanf("%d,%d",&row,&col);
InitialMatrix(&A,row,col);
InitialMatrixZero(&A,A.row,A.col);
InputMatrix(&A);
printf("您要输入的矩阵B的行数和列数e.g:
5,6:
");
scanf("%d,%d",&row,&col);
InitialMatrix(&B,row,col);
InitialMatrixZero(&B,B.row,B.col);
InputMatrix(&B);
InitialMatrix(&C,B.row,B.col);
InitialMatrixZero(&C,C.row,C.col);
if(MinusMatrix(&A,&B,&C)==1){
printf("\n矩阵的差为:
A-B=\n\n");
PrintfMatrix(&C);
}
elseprintf("\n\n无法计算!
\n\n");
DestroyMatrix(&A);
DestroyMatrix(&B);
DestroyMatrix(&C);
}
if(inputevent==5){
intable;
printf("您要输入的矩阵A的行数和列数e.g:
5,6:
");
scanf("%d,%d",&row,&col);
InitialMatrix(&A,row,col);
InitialMatrixZero(&A,A.row,A.col);
InputMatrix(&A);
printf("您要输入的矩阵B的行数和列数e.g:
5,6:
");
scanf("%d,%d",&row,&col);
InitialMatrix(&B,row,col);
InitialMatrixZero(&B,B.row,B.col);
InputMatrix(&B);
InitialMatrix(&C,A.row,B.col);
InitialMatrixZero(&C,C.row,C.col);
able=MultiMatrix(&A,&B,&C);
if(able==1){
printf("\n积为:
A*B\n\n");
PrintfMatrix(&C);
}
elseprintf("\n\n无法计算!
\n\n");
DestroyMatrix(&A);
DestroyMatrix(&B);
DestroyMatrix(&C);
}
if(inputevent==6){
printf("您要产生的矩阵A的行数和列数e.g:
5,6:
");
scanf("%d,%d",&row,&col);
InitialMatrix(&A,row,col);
InitialMatrixRand(&A,row,col);
printf("A为:
\n\n");
PrintfMatrix(&A);
printf("您要产生的矩阵B的行数和列数e.g:
5,6:
");
scanf("%d,%d",&row,&col);
InitialMatrix(&B,row,col);
InitialMatrixRand(&B,row,col);
printf("B为:
\n\n");
PrintfMatrix(&B);
InitialMatrix(&C,A.row,A.col);
InitialMatrixZero(&C,C.row,C.col);
if(AddMatrix(&A,&B,&C)==1){
printf("\n矩阵的和为:
A+B=\n\n");
PrintfMatrix(&C);
}
elseprintf("\n\n无法计算!
\n\n");
DestroyMatrix(&A);
DestroyMatrix(&B);
DestroyMatrix(&C);
}
if(inputevent==7){
printf("您要产生的矩阵A的行数和列数e.g:
5,6:
");
scanf("%d,%d",&row,&col);
InitialMatrix(&A,row,col);
InitialMatrixRand(&A,row,col);
printf("您要产生的矩阵B的行数和列数e.g:
5,6:
");
scanf("%d,%d",&row,&col);
InitialMatrix(&B,row,col);
InitialMatrixRand(&B,row,col);
InitialMatrix(&C,A.row,A.col);
InitialMatrixZero(&C,C.row,C.col);
if(MinusMatrix(&A,&B,&C)==1){
printf("\n矩阵的差为:
A-B=\n\n");
PrintfMatrix(&C);
}
elseprintf("\n\n无法计算!
\n\n");
DestroyMatrix(&A);
DestroyMatrix(&B);
DestroyMatrix(&C);
}
if(inputevent==8){
printf("您要产生的矩阵A的行数和列数e.g:
5,6:
\n");
scanf("%d,%d",&row,&col);
InitialMatrix(&A,row,col);
InitialMatrixRand(&A,row,col);
printf("A为:
\n\n");
PrintfMatrix(&A);
printf("您要产生的矩阵B的行数和列数e.g:
5,6:
\n");
scanf("%d,%d",&row,&col);
InitialMatrix(&B,row,col);
InitialMatrixRand(&B,row,col);
printf("B为:
\n\n");
PrintfMatrix(&B);
InitialMatrix(&C,A.row,A.col);
InitialMatrixZero(&C,C.row,C.col);
if(MultiMatrix(&A,&B,&C)==1){
printf("\n积为:
A*B=\n\n");
PrintfMatrix(&C);;
}
elseprintf("\n\n无法计算;\n\n");
DestroyMatrix(&A);
DestroyMatrix(&B);
DestroyMatrix(&C);
}
if(inputevent==9)printf("对不起,该函数尚在完善中\n\n");
if(inputevent==10)NMatrix();
if(inputevent==0)
break;
printf("矩阵函数测试,请选择功能,输入对应的数字:
\n");
printf("***************************************************\n\n");
printf("1:
输入一个矩阵,求矩阵均值;\n");
printf("2:
产生一个随机数矩阵,求矩阵均值;\n");
printf("3:
输入两个个矩阵,求矩阵和;\n");
printf("4:
输入两个个矩阵,求矩阵差;\n");
printf("5:
输入两个矩阵,求矩阵积;");
printf("\n6:
产生两个随机数矩阵,求矩阵和;\n");
printf("7:
产生两个随机数矩阵,求矩阵差;\n");
printf("8:
产生两个随机数矩阵,求矩阵积;\n");
printf("9:
求矩阵的子阵,如矩阵的2-4行D,1-3列的子阵;\n");
printf("10:
输入一个方阵,求其逆矩阵\n");
printf("0:
结束!
\n");
printf("\n\n选择:
");
scanf("%d",&inputevent);
}
return0;
}
//其他函数
voidInitialMatrix(Matrix*T,introw,intcol)
{
//printf("分配内存中......\n");
inti;
intsucc=1;
//T=(Matrix*)malloc(sizeof(Matrix));
T->row=row;
T->col=col;
T->mat=(double**)malloc(T->row*sizeof(double*));
if(T->mat==NULL){
succ=0;
}
else{
for(i=0;i
T->mat[i]=(double*)malloc(T->col*sizeof(double));
if(T->mat[i]==NULL){
succ=0;
break;
}
}
//if(succ==1)
//printf("内存分配成功|;?
\n");
//elseprintf("内存分配失败;\n");
}
}
voidInitialMatrixZero(Matrix*T,introw,intcol){
//printf("矩阵初始化为零中......\n");
inti,j;
for(i=0;i for(j=0;j T->mat[i][j]=0; //printf("矩阵初始化为零矩阵成功;\n"); } voidInitialMatrixRand(Matrix*T,introw,intcol){ inti,j; for(i=0;i for(j=0;j (*T).mat[i][j]=rand()%50; } voidInputMatrix(Matrix*T){ printf("输入矩阵: \n"); inti,j; for(i=0;i<(*T).row;i++) for(j=0;j<(*T).col;j++) scanf("%lf",&(*T).mat[i][j]); } voidDestroyMatrix(Matrix*T) { inti; for(i=0;i<(*T).row;i++) free((*T).mat[i]); } voidPrintfMatrix(Matrix*T) { inti,j; for(i=0;i<(*T).row;i++) { for(j=0;j<(*T).col;j++) printf("%lf",(*T).mat[i][j]); printf("\n"); } } intAddMatrix(Matrix*A,Matrix*B,Matrix*C) { inti,j; if((*A).row==(*B).row&&(*A).col==(*B).col) { for(i=0;i<(*A).row;i++) for(j=0;j<(*A).col;j++) (*C).mat[i][j]=(*A).mat[i][j]+(*B).mat[i][j]; for(i=0;i<(*A).row;i++) for(j=0;j<(*A).col;j++) return1; } else{ printf("这两个矩阵不能相加! \n"); return0; } } intMinusMatrix(Matrix*A,Matrix*B,Matrix*C) { inti,j; if((*A).row==(*B).row&&(*A).col==(*B).col) { for(i=0;i<(*A).row;i++) for(j=0;j<(*A).col;j++) (*C).mat[i][j]=(*A).mat[i][j]-(*B).mat[i][j]; return1; } else printf("这两个矩阵不能相减! \n"); return0; } intMultiMatrix(Matrix*A,Matrix*B,Matrix*C) { inti=0,j=0; intk=0; if((*A).col==(*B).row) { for(i=0;i<(*A).row;i++){ for(j=0;j<(*B).col;j++) for(k=0;k<(A->col);k++) (*C).mat[i][j]+=(*A).mat[i][k]*(*B).mat[k][j]; } return1; } else printf("这两个矩阵不能相乘! \n"); return0
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 矩阵 运算 语言 实现
![提示](https://static.bdocx.com/images/bang_tan.gif)