矩阵运算——C语言实现_第1页
矩阵运算——C语言实现_第2页
矩阵运算——C语言实现_第3页
矩阵运算——C语言实现_第4页
矩阵运算——C语言实现_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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);/键盘输入矩阵vo

2、id 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

4、 struct 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);/矩阵输

5、出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, int BeginRow, int BeginCol, int EndRow, int EndCol); /求T1的子矩

6、阵T2;void NMatrix(void);/求逆矩阵 /主函数int main()int inputevent;/int i, j;int row, col;Matrix T;Matrix A;Matrix B;Matrix C;printf( 矩阵函数测试,请选择功能,输入对应的数字:n);printf( *nn);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);InitialMatrix(&T,

8、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(&T);printf(n矩阵的平

9、均值为: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, col);InitialMatrixZe

10、ro(&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(您要输入的矩阵A的行数和列数e.g:5,6

11、:);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.

12、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);InitialMatrixZero(&A, A.

13、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*Bnn);Prin

14、tfMatrix(&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(您要产生的矩阵B的行数和列数e.g:5,6: );scanf(%d,%

15、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无法计算!nn);DestroyMatrix(&A);DestroyMatrix(&

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

17、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, &row, &col);InitialMatrix(&A, row, col);In

18、itialMatrixRand(&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);InitialMatrixZero(&C, C.row, C.col);if (MultiMatrix(&A, &B

19、, &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;printf( 矩阵函数测试,请选择功能,输入对应的数字:n);printf( *nn);printf(1:输入一个矩阵,求矩阵均值;n);printf(

20、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(nn选择:);scanf(%d, &inputevent);return 0;/

21、其他函数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 (T-mat = NULL) succ = 0;else for (i = 0; i row; i+) T-mati = (double *)malloc(T-col * sizeof(double);

22、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+)for (j = 0; j matij = 0;/printf(矩阵初始化为零矩阵成功;n);void InitialMatrixRand(Matrix *T, int row, int col) int i, j;

23、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, &(*T).matij);void DestroyMatrix(Matrix *T)int i;for (i = 0; i (*T).row; i+)free(*T).mati);void PrintfMatrix(Matrix

24、 *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 & (*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

25、= 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 = (*B).col)for (i = 0; i (*A).row; i+)for (j = 0; j (*A).col; j+)(*C).matij = (*A).matij - (*B).matij;return 1;elseprin

26、tf(这两个矩阵不能相减!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=0;k col);k+)(*C).matij += (*A).matik * (*B).matkj;return 1; elseprintf(这两个矩阵不能相乘!n);return 0;double MeanMatrix(Matrix *T) /矩阵元素均值double mean;double su

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论