您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 商业计划书 > 矩阵运算——C语言实现
1/13#includestdafx.h#includestdlib.h//结构体typedefstruct{double**mat;introw;intcol;}Matrix;voidInitialMatrix(Matrix*T,introw,intcol);//只分配空间不初始化;voidInitialMatrixZero(Matrix*T,introw,intcol);//初始化为0voidInitialMatrixRand(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:输入两个个矩阵,求矩阵差;2/135:输入两个个矩阵,求矩阵积;6:产生两个个随机数矩阵,求矩阵和;7:产生两个个随机数矩阵,求矩阵差;8:产生两个个随机数矩阵,求矩阵积;9:求矩阵的子阵,如矩阵的2-4行,1-3列的子阵;0:结束!#includestdio.h#includestdlib.h//结构体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;3/13MatrixB;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);}4/13if(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){5/13printf(\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);6/13InitialMatrixRand(&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);7/13DestroyMatrix(&A);DestroyMatrix(&B);DestroyMatrix(&C);}if(inputevent==8){printf(您要产生的矩阵A的行数和列数e.g:5,
本文标题:矩阵运算——C语言实现
链接地址:https://www.777doc.com/doc-1874461 .html