欢迎来到三一文库! | 帮助中心 三一文库31doc.com 一个上传文档投稿赚钱的网站
三一文库
全部分类
  • 研究报告>
  • 工作总结>
  • 合同范本>
  • 心得体会>
  • 工作报告>
  • 党团相关>
  • 幼儿/小学教育>
  • 高等教育>
  • 经济/贸易/财会>
  • 建筑/环境>
  • 金融/证券>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 三一文库 > 资源分类 > DOCX文档下载  

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

    • 资源ID:14446718       资源大小:14.98KB        全文页数:12页
    • 资源格式: DOCX        下载积分:4
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录   微博登录  
    二维码
    微信扫一扫登录
    下载资源需要4
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

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

    #include "stdafx.h"#include <stdlib.h>/ 结构体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);/键盘输入矩阵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:输入两个个矩阵,求矩阵差;5:输入两个个矩阵,求矩阵积;6:产生两个个随机数矩阵,求矩阵和;7:产生两个个随机数矩阵,求矩阵差;8:产生两个个随机数矩阵,求矩阵积;9:求矩阵的子阵,如矩阵的2-4 行, 1-3 列的子阵;0:结束!#include <stdio.h>#include <stdlib.h>/ 结构体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;Matrix B;Matrix C;printf(" 矩阵函数测试,请选择功能,输入对应的数字:n");printf(" *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("nn 选择: ");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%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 矩阵的平均值为: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);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("您要输入的矩阵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) 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.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");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(" 您要产生的矩阵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 无法计算!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);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=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);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);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 (inputevent = 9) printf(" 对不起,该函数尚在完善中nn");if (inputevent = 10) NMatrix();if (inputevent = 0) break;n");printf(" 矩阵函数测试,请选择功能,输入对应的数字: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 列的子阵;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 (T->mat = NULL) succ = 0; else for (i = 0; i < T->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+)for (j = 0; j < col; j+) T->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", &(*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 && (*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 = (*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=0;k <(A->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)#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;i<T;i+)for (j=0;j<T;j+) scanf("%f",&bij);printf(" 原矩阵为:n");for (i=0;i<T;i+)for (j=0;j<T;j+)printf("%10.3f",bij);printf("n"); for(i=0;i<T;i+)for(j=0;j<(2*T);j+) if (j<T) aij=bij;else if (j=T+i) aij=1.0;else aij=0.0;for(i=0;i<T;i+)for(k=0;k<T;k+)if(k!=i) t=aki/aii; for(j=0;j<(2*T);j+) x=aij*t; akj=akj-x; for(i=0;i<T;i+)t=aii;for(j=0;j<(2*T);j+)aij=aij/t;)for(i=0;i<T;i+)y=y*aii;if(y=0)printf("对不起,您输入的矩阵没有逆矩阵,请重新输入。n");else for(i=0;i<T;i+)for(j=0;j<T;j+)bij=aij+T;printf("逆矩阵为:n");for (i=0;i<T;i+)for (j=0;j<T;j+)printf("%10.4f ",bij);printf("n"); )

    注意事项

    本文(矩阵运算——C语言实现.docx)为本站会员(scccc)主动上传,三一文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




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

    三一文库
    收起
    展开