矩阵运算——C语言实现.docx

上传人:scccc 文档编号:14446718 上传时间:2022-02-06 格式:DOCX 页数:12 大小:14.98KB
返回 下载 相关 举报
矩阵运算——C语言实现.docx_第1页
第1页 / 共12页
矩阵运算——C语言实现.docx_第2页
第2页 / 共12页
矩阵运算——C语言实现.docx_第3页
第3页 / 共12页
矩阵运算——C语言实现.docx_第4页
第4页 / 共12页
矩阵运算——C语言实现.docx_第5页
第5页 / 共12页
亲,该文档总共12页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《矩阵运算——C语言实现.docx》由会员分享,可在线阅读,更多相关《矩阵运算——C语言实现.docx(12页珍藏版)》请在三一文库上搜索。

1、#include stdafx.h#include / 结构体typedef structdouble * mat;int row;int col;Matrix;void InitialMatrix(Matrix *T, int row,int col); / 只分配空间不初始化;void InitialMatrixZero(Matrix *T,int row, int col); /初始化为0void InitialMatrixRand(Matrix *T,int row, int col); / 初始化为50 以内随机正整数void InputMatrix(Matrix *T);/键盘输入

2、矩阵void DestroyMatrix(Matrix *T);/释放矩阵空间void PrintfMatrix(Matrix *T);/矩阵输出int AddMatrix(Matrix *A,Matrix *B,Matrix *C);/ 矩阵加int MinusMatrix(Matrix *A,Matrix *B,Matrix *C); /矩阵减int MultiMatrix(Matrix *A,Matrix *B,Matrix *C);/ 矩阵乘法double MeanMatrix(Matrix *T);/ 矩阵元素均值int SubMatrix(Matrix *T1,Matrix *T2

3、,int BeginRow,int BeginCol,int EndRow,int EndCol); / 求T1 的子矩阵T2;测试程序参考界面如下所示:矩阵函数测试,请选择功能,输入对应的数字:*1:输入一个矩阵,求矩阵均值;2:产生一个随机数矩阵,求矩阵均值;3:输入两个个矩阵,求矩阵和;4:输入两个个矩阵,求矩阵差;5:输入两个个矩阵,求矩阵积;6:产生两个个随机数矩阵,求矩阵和;7:产生两个个随机数矩阵,求矩阵差;8:产生两个个随机数矩阵,求矩阵积;9:求矩阵的子阵,如矩阵的2-4 行, 1-3 列的子阵;0:结束!#include #include / 结构体typedef stru

4、ct double *mat;int row;int col; Matrix;/ 函数声明void InitialMatrix(Matrix *T, int row, int col);void InitialMatrixZero(Matrix *T, int row, int col);void InitialMatrixRand(Matrix *T, int row, int col);void InputMatrix(Matrix *T);void DestroyMatrix(Matrix *T);/ 释放矩阵空间void PrintfMatrix(Matrix *T);/ 矩阵输出in

5、t AddMatrix(Matrix *A, Matrix *B, Matrix *C);/ 矩阵加int MinusMatrix(Matrix *A, Matrix *B, Matrix *C); / 矩阵减int MultiMatrix(Matrix *A, Matrix *B, Matrix *C);/ 矩阵乘法double MeanMatrix(Matrix *T);/ 矩阵元素均值/int SubMatrix(Matrix *T1, Matrix *T2, int BeginRow, int BeginCol, int EndRow, int EndCol); / 求T1 的子矩阵T

6、2;void NMatrix(void);/ 求逆矩阵/ 主函数int main()int inputevent;/int i, j;int row, col;Matrix T;Matrix A;Matrix B;Matrix C;printf( 矩阵函数测试,请选择功能,输入对应的数字:n);printf( *printf(1 :输入一个矩阵,求矩阵均值;n);printf(2 :产生一个随机数矩阵,求矩阵均值;n);printf(3 :输入两个个矩阵,求矩阵和;n);printf(4 :输入两个个矩阵,求矩阵差;n);printf(5 :输入两个矩阵,求矩阵积;);printf(n6 :产

7、生两个随机数矩阵,求矩阵和;n);printf(7 :产生两个随机数矩阵,求矩阵差;n);printf(8 :产生两个随机数矩阵,求矩阵积;n);printf(9: 求矩阵的子阵,如矩阵的2-4 行 D,1-3 列的子阵;n);printf(10 :输入一个方阵,求其逆矩阵n);printf(0: 结束 !n);printf(nn 选择: );scanf(%d, &inputevent);while (inputevent != 0)if (inputevent = 1) printf( 您要输入的矩阵的行数和列数e.g:5,6:);scanf(%d,%d, &row, &col);Initi

8、alMatrix(&T, row, col);InitialMatrixZero(&T, T.row, T.col);InputMatrix(&T);printf(n 矩阵的平均值为:n%lfnn, 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(&

9、T);printf(n 矩阵的平均值为:n%lfnn, 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, co

10、l);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(nn 矩阵的和为:A*Bnn);PrintfMatrix(&C);else printf(nn 无法计算!nn);DestroyMatrix(&A);DestroyMatrix(&B);DestroyMatrix(&C);if (inputevent = 4) printf(您

11、要输入的矩阵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);In

12、itialMatrixZero(&C, C.row, C.col);if (MinusMatrix(&A, &B, &C) = 1) printf(n 矩阵的差为:A-B=nn);PrintfMatrix(&C);else printf(nn 无法计算!nn);DestroyMatrix(&A);DestroyMatrix(&B);DestroyMatrix(&C);if (inputevent = 5) int able;printf(您要输入的矩阵 A的行数和列数e.g: 5,6:);scanf(%d,%d, &row, &col);InitialMatrix(&A, row, col);

13、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 =

14、 1) printf(n 积为: A*Bnn);PrintfMatrix(&C);else printf(nn 无法计算!nn);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 为: nn);PrintfMatrix(&A);printf( 您要产生

15、的矩阵B 的行数和列数e.g:5,6: );scanf(%d,%d, &row, &col);InitialMatrix(&B, row, col);InitialMatrixRand(&B, row, col);printf(B 为: nn);PrintfMatrix(&B);InitialMatrix(&C, A.row, A.col);InitialMatrixZero(&C, C.row, C.col);if (AddMatrix(&A, &B, &C) = 1) printf(n 矩阵的和为:A+B=nn);PrintfMatrix(&C);else printf(nn 无法计算!n

16、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

17、, row, col);InitialMatrix(&C, A.row, A.col);InitialMatrixZero(&C, C.row, C.col);if (MinusMatrix(&A, &B, &C) = 1) printf(n 矩阵的差为:A-B=nn);PrintfMatrix(&C);else printf(nn 无法计算!nn);DestroyMatrix(&A);DestroyMatrix(&B);DestroyMatrix(&C); if (inputevent = 8) printf(您要产生的矩阵A的行数和列数e.g:5,6: n);scanf(%d,%d, &r

18、ow, &col);InitialMatrix(&A, row, col);InitialMatrixRand(&A, row, col);printf(A 为: nn);PrintfMatrix(&A);printf( 您要产生的矩阵B 的行数和列数e.g:5,6: n);scanf(%d,%d, &row, &col);InitialMatrix(&B, row, col);InitialMatrixRand(&B, row, col);printf(B 为: nn);PrintfMatrix(&B);InitialMatrix(&C, A.row, A.col);InitialMatri

19、xZero(&C, C.row, C.col);if (MultiMatrix(&A, &B, &C) = 1) printf(n 积为: A*B=nn);PrintfMatrix(&C);else printf(nn 无法计算;nn);DestroyMatrix(&A);DestroyMatrix(&B);DestroyMatrix(&C);if (inputevent = 9) printf( 对不起,该函数尚在完善中nn);if (inputevent = 10) NMatrix();if (inputevent = 0) break;n);printf( 矩阵函数测试,请选择功能,输入

20、对应的数字:printf(n *nn);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 列的

21、子阵;n);printf(10 :输入一个方阵,求其逆矩阵n);printf(0: 结束 !n);printf(nn 选择: );scanf(%d, &inputevent);return 0;/ 其他函数void InitialMatrix(Matrix *T, int row, int col) /printf( 分配内存中n);int i;int succ = 1;/T=(Matrix *)malloc(sizeof(Matrix);T-row = row; T-col = col;T-mat = (double *)malloc(T-row * sizeof(double *);if

22、(T-mat = NULL) succ = 0; else for (i = 0; i row; i+) T-mati = (double *)malloc(T-col * sizeof(double); if (T-mati = NULL) succ = 0; break;/if(succ=1)/ printf( 内存分配成功| ; ?n);/else printf( 内存分配失败;n);void InitialMatrixZero(Matrix *T, int row, int col) /printf( 矩阵初始化为零中n);int i, j;for (i = 0; i row; i+)

23、for (j = 0; j matij = 0;/printf( 矩阵初始化为零矩阵成功;n);void InitialMatrixRand(Matrix *T, int row, int col) int i, j;for (i = 0; i row; i+)for (j = 0; j col; j+)(*T).matij = rand() % 50; void InputMatrix(Matrix *T) printf( 输入矩阵:n);int i, j;for (i = 0; i (*T).row; i+)for (j = 0; j (*T).col; j+)scanf(%lf, &(*

24、T).matij); void DestroyMatrix(Matrix *T)int i;for (i = 0; i (*T).row; i+) free(*T).mati);void PrintfMatrix(Matrix *T)int i, j;for (i = 0; i (*T).row; i+) for (j = 0; j (*T).col; j+) printf(%lf , (*T).matij);printf(n); int AddMatrix(Matrix *A, Matrix *B, Matrix *C)int i, j;if (*A).row = (*B).row & (*

25、A).col = (*B).col)for (i = 0; i (*A).row; i+)for (j = 0; j (*A).col; j+)(*C).matij = (*A).matij + (*B).matij;for (i = 0; i (*A).row; i+)for (j = 0; j (*A).col; j+)return 1;else printf( 这两个矩阵不能相加!n);return 0; int MinusMatrix(Matrix *A, Matrix *B, Matrix *C)int i, j;if (*A).row = (*B).row & (*A).col =

26、 (*B).col) for (i = 0; i (*A).row; i+)for (j = 0; j (*A).col; j+)(*C).matij = (*A).matij - (*B).matij;return 1;elseprintf( 这两个矩阵不能相减!n);return 0; int MultiMatrix(Matrix *A, Matrix *B, Matrix *C)int i=0, j=0;int k = 0;if (*A).col = (*B).row)for (i = 0; i (*A).row; i+) for (j = 0; j (*B).col; j+)for(k

27、=0;k col);k+)(*C).matij += (*A).matik * (*B).matkj;return 1;elseprintf( 这两个矩阵不能相乘!n);return 0;double MeanMatrix(Matrix *T)/ 矩阵元素均值double mean;double sum = 0;int i, j;for (i = 0; i (*T).row; i+)for (j = 0; j (*T).col; j+)sum += (*T).matij;mean = sum / (*T).row*(*T).col);return mean;void NMatrix(void)

28、#define M 20#define N 20int i,j,m,n;float y=1.0;float aM2 * M;float bN2 * N;float t, x;int k, T;printf( 输入方阵的维数:n); / 请输入方阵,即行和列相等的矩阵。scanf(%d,&T); printf( 请输入矩阵:n);for(i=0;iT;i+)for (j=0;jT;j+) scanf(%f,&bij);printf( 原矩阵为:n);for (i=0;iT;i+)for (j=0;jT;j+)printf(%10.3f,bij);printf(n); for(i=0;iT;i+)

29、for(j=0;j(2*T);j+) if (jT) aij=bij;else if (j=T+i) aij=1.0;else aij=0.0;for(i=0;iT;i+)for(k=0;kT;k+)if(k!=i) t=aki/aii; for(j=0;j(2*T);j+) x=aij*t; akj=akj-x; for(i=0;iT;i+)t=aii;for(j=0;j(2*T);j+)aij=aij/t;)for(i=0;iT;i+)y=y*aii;if(y=0)printf(对不起,您输入的矩阵没有逆矩阵,请重新输入。n);else for(i=0;iT;i+)for(j=0;jT;j+)bij=aij+T;printf(逆矩阵为:n);for (i=0;iT;i+)for (j=0;jT;j+)printf(%10.4f ,bij);printf(n); )

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1