1、矩阵运算C语言实现#include stdafx.h#include /结构体typedef struct double * 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 *
2、T); /键盘输入矩阵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
3、*T1,Matrix *T2,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 #incl
4、ude /结构体typedef 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 PrintfMatr
5、ix(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, int BeginRow, int BeginCol, int EndRow, i
6、nt EndCol); /求T1的子矩阵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); pr
7、intf(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); while (inputevent != 0) if (inputevent = 1) printf(您要输入的矩阵的行数和列数e.g:5,6:);
8、 scanf(%d,%d, &row, &col); InitialMatrix(&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, r
9、ow, col); MeanMatrix(&T); PrintfMatrix(&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:); scan
10、f(%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(nn矩阵的和为:A*Bnn); PrintfMatrix(&C); else printf(nn无法计算!nn); DestroyMatrix(&A); DestroyMat
11、rix(&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.
12、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=nn); PrintfMatrix(&C); else printf(nn无法计算!nn); DestroyMatrix(&A); DestroyMatrix(&B); DestroyMatrix(&C); if (inputevent = 5) int able; printf(您要输入的矩阵A
13、的行数和列数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
14、); InitialMatrixZero(&C, C.row, C.col); able = MultiMatrix(&A, &B, &C); if (able = 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,
15、 row, col); InitialMatrixRand(&A, row, col); printf(A为:nn); PrintfMatrix(&A); printf(您要产生的矩阵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)
16、; if (AddMatrix(&A, &B, &C) = 1) printf(n矩阵的和为:A+B=nn); PrintfMatrix(&C); else printf(nn无法计算!nn); 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); prin
17、tf(您要产生的矩阵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=nn); PrintfMatrix(&C); else printf(nn无法计算!nn); DestroyMatrix(&
18、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为:nn); PrintfMatrix(&A); printf(您要产生的矩阵B的行数和列数e.g:5,6: n); scanf(%d,%d, &row, &col); InitialMatrix(&B, row,
19、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, &C) = 1) printf(n积为:A*B=nn); PrintfMatrix(&C); else printf(nn无法计算;nn); DestroyMatrix(&A); DestroyMatrix(&B); DestroyMatrix(&C); if (in
20、putevent = 9) printf(对不起,该函数尚在完善中nn); if (inputevent = 10) NMatrix(); if (inputevent = 0) break; printf( 矩阵函数测试,请选择功能,输入对应的数字:n); printf( *nn); printf(1:输入一个矩阵,求矩阵均值;n); printf(2:产生一个随机数矩阵,求矩阵均值;n); printf(3:输入两个个矩阵,求矩阵和;n); printf(4:输入两个个矩阵,求矩阵差;n); printf(5:输入两个矩阵,求矩阵积;); printf(n6:产生两个随机数矩阵,求矩阵和;
21、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;/其他函数void InitialMatrix(Matrix *T, int row, int col) /printf(分配内存中.n); int i; int succ = 1; /T=(Matrix *)malloc(
22、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); if (T-mati = NULL) succ = 0; break; /if(succ=1) / printf(内存分配成功|;?n); /else printf(内存分配失败;n); void In
23、itialMatrixZero(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; for (i = 0; i row; i+) for (j = 0; j col; j+) (*T).matij = rand() % 50;void InputMatrix(Mat
24、rix *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 *T)int i, j; for (i = 0; i (*T).row; i+) for (j = 0; j (*T).col; j+) printf(%lf ,
25、 (*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 = 0; i (*A).row; i+) for (j = 0; j (*A).col; j+) return 1; else printf(
26、这两个矩阵不能相加!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; else printf(这两个矩阵不能相减!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; else printf(这两个矩阵不能相乘!n); return 0
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1