矩阵运算 - C语言实现

2020-06-08 11:35

#include \#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); //初始化为0

void InitialMatrixRand(Matrix *T,int row, int col); //初始化为50以内随机正整数 void InputMatrix(Matrix *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 *T1,Matrix *T2,int BeginRow,int BeginCol,int EndRow,int EndCol); //求T1的子矩阵T2;

测试程序参考界面如下所示:

矩阵函数测试,请选择功能,输入对应的数字: *************************************************** 1:输入一个矩阵,求矩阵均值; 2:产生一个随机数矩阵,求矩阵均值; 3:输入两个个矩阵,求矩阵和; 4:输入两个个矩阵,求矩阵差;

1 / 13

5:输入两个个矩阵,求矩阵积; 6:产生两个个随机数矩阵,求矩阵和; 7:产生两个个随机数矩阵,求矩阵差; 8:产生两个个随机数矩阵,求矩阵积;

9:求矩阵的子阵,如矩阵的2-4行,1-3列的子阵; 0:结束!

#include #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); void InitialMatrixRand(Matrix *T, int row, int col); void InputMatrix(Matrix *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 *T1, Matrix *T2, int BeginRow, int BeginCol, int EndRow, int EndCol); //求T1的子矩阵T2;

void NMatrix(void);//求逆矩阵

//主函数 int main() { int inputevent; //int i, j; int row, col; Matrix T; Matrix A;

2 / 13

Matrix B; Matrix C;

printf(\ 矩阵函数测试,请选择功能,输入对应的数字:\\n\

printf(\printf(\:输入一个矩阵,求矩阵均值;\\n\

printf(\:产生一个随机数矩阵,求矩阵均值;\\n\printf(\:输入两个个矩阵,求矩阵和;\\n\printf(\:输入两个个矩阵,求矩阵差;\\n\printf(\:输入两个矩阵,求矩阵积;\

printf(\:产生两个随机数矩阵,求矩阵和;\\n\printf(\:产生两个随机数矩阵,求矩阵差;\\n\printf(\:产生两个随机数矩阵,求矩阵积;\\n\

printf(\求矩阵的子阵,如矩阵的2-4行D,1-3列的子阵;\\n\printf(\:输入一个方阵,求其逆矩阵\\n\printf(\结束!\\n\printf(\选择:\scanf(\

while (inputevent != 0) { if (inputevent == 1) { printf(\您要输入的矩阵的行数和列数e.g:5,6:\ scanf(\ InitialMatrix(&T, row, col); InitialMatrixZero(&T, T.row, T.col); InputMatrix(&T);

}

if (inputevent == 2) { }

printf(\输入您要产生的矩阵的行数和列数e.g:5,6:\scanf(\InitialMatrix(&T, row, col);

InitialMatrixRand(&T, row, col); MeanMatrix(&T); PrintfMatrix(&T);

printf(\矩阵的平均值为:\\n%lf\\n\\n\DestroyMatrix(&T);

printf(\矩阵的平均值为:\\n%lf\\n\\n\DestroyMatrix(&T);

3 / 13

if (inputevent == 3) {

printf(\您要输入的矩阵A的行数和列数e.g:5,6:\scanf(\InitialMatrix(&A, row, col);

InitialMatrixZero(&A, A.row, A.col); InputMatrix(&A);

printf(\您要输入的矩阵B的行数和列数e.g:5,6:\scanf(\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(\矩阵的和为:A*B\\n\\n\ PrintfMatrix(&C); }

else printf(\无法计算!\\n\\n\

}

DestroyMatrix(&A); DestroyMatrix(&B); DestroyMatrix(&C);

if (inputevent == 4) {

printf(\您要输入的矩阵A的行数和列数e.g:5,6:\scanf(\InitialMatrix(&A, row, col);

InitialMatrixZero(&A, A.row, A.col); InputMatrix(&A);

printf(\您要输入的矩阵B的行数和列数e.g:5,6:\scanf(\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) {

4 / 13

}

}

printf(\矩阵的差为:A-B=\\n\\n\PrintfMatrix(&C);

else printf(\无法计算!\\n\\n\DestroyMatrix(&A); DestroyMatrix(&B); DestroyMatrix(&C);

if (inputevent == 5) { int able; }

printf(\您要输入的矩阵A的行数和列数e.g: 5,6: \scanf(\InitialMatrix(&A, row, col);

InitialMatrixZero(&A, A.row, A.col); InputMatrix(&A);

printf(\您要输入的矩阵B的行数和列数e.g:5,6: \scanf(\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(\积为:A*B\\n\\n\ PrintfMatrix(&C); }

else printf(\无法计算!\\n\\n\DestroyMatrix(&A); DestroyMatrix(&B); DestroyMatrix(&C);

if (inputevent == 6) { printf(\您要产生的矩阵A的行数和列数e.g:5,6: \ scanf(\ InitialMatrix(&A, row, col);

5 / 13


矩阵运算 - C语言实现.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2012年9月计算机等级三级信息管理真题-中大网校

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: