版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、精选优质文档-倾情为你奉上特殊矩阵计算器1、特殊矩阵计算器 问题描述:创建两个特殊矩阵 A 和 B,计算 A+B、A-B、A*B、B*A、A(或 B)的逆、A(或 B)的 转置、A(或 B)的行列式等,具体要求如下: A、B 均是压缩存储的特殊矩阵,如上/下三角矩阵、对称矩阵、对角矩阵、单位矩阵等。 A、B 的矩阵类型、行列数、各位置的元素值等信息均在运行时指定(对于不同类型的矩阵, 要求输入的数据也不尽相同)。 各运算若可行,则打印结果;若不可行,则给出提示信息。 各运算需自己实现,禁止调用语言內建或第三方类库的矩阵 API。 涉及算法及知识:特殊矩阵的压缩存储、矩阵相关运算。#includ
2、e<stdio.h>#include<math.h>#define max 100typedef structint row,col;/定义矩阵行数、列数 int amaxmax; Matrix; /存储结构typedef structint arraymax;int n; /定义矩阵的阶 M;Matrix A,B,C,D; M p; /*矩阵的压缩存储*/int CompressMatrix(int m,int i,int j,int n)int k;if(m=1)if(i<=j)k=(2*n-i+1)*i/2+(j-i)+1;elsek=0;return k;
3、if(m=2)if(i>=j)k=i*(i+1)/2+j+1;elsek=0;return k;if(m=3) if(i>=j)k=i*(i+1)/2+j;elsek=j*(j+1)/2+i;return k;if(m=4)if(i!=j)k=0;elsek=i+1;return k;if(m=5)if(i=j)return 1;elsereturn 0;return 0;/*矩阵定义*/上三角矩阵 /void CreateMatrixUppertri(M &a,Matrix &A)int i,j,t,n;printf("请输入上三角矩阵的行数和列数(行数
4、与列数相同):");scanf("%d%d",&A.row,&A.col);n=A.row; a.n=n; printf("请输入%d个数:",n*(n+1)/2);a.array0=0;for(i=1;i<=n*(n+1)/2;i+)scanf("%d",&a.arrayi);for(i=0;i<n;i+)for(j=0;j<n;j+)t=CompressMatrix(1,i,j,n);A.aij=a.arrayt;/下三角矩阵 void CreateMatrixLowertri(
5、M &a,Matrix &A)int i,j,t,n;printf("请输入下三角矩阵的行数和列数(行数与列数相同):");scanf("%d%d",&A.row,&A.col);n=A.row; a.n=n; printf("请输入%d个数:",n*(n+1)/2);a.array0=0;for(i=1;i<=n*(n+1)/2;i+)scanf("%d",&a.arrayi);for(i=0;i<n;i+)for(j=0;j<n;j+)t=Compres
6、sMatrix(2,i,j,n);A.aij=a.arrayt; /对称矩阵 void CreateMatrixSymmetry(M &a,Matrix &A)int i,j,t,n;printf("请输入对称矩阵的行数和列数(行数与列数相同):");scanf("%d%d",&A.row,&A.col);n=A.row; a.n=n; printf("请输入%d个数:",n*(n+1)/2);for(i=0;i<n*(n+1)/2;i+)scanf("%d",&a.a
7、rrayi);for(i=0;i<n;i+)for(j=0;j<n;j+)t=CompressMatrix(3,i,j,n);A.aij=a.arrayt; /对角矩阵 void CreateMatrixDiagonal(M &a,Matrix &A)int i,j,t,n;printf("请输入对角矩阵的行数和列数(行数与列数相同):");scanf("%d%d",&A.row,&A.col);n=A.row; a.n=n; printf("请输入%d个数:",n);a.array0=0;
8、for(i=1;i<=n;i+)scanf("%d",&a.arrayi);for(i=0;i<n;i+)for(j=0;j<n;j+)t=CompressMatrix(4,i,j,n);A.aij=a.arrayt; /单位矩阵 void CreateMatrixUnit(M &a,Matrix &A)int i,j,t,n;printf("请输入单位矩阵的行数和列数(行数与列数相同):");scanf("%d%d",&A.row,&A.col);n=A.row; a.n=n
9、; a.array0=0;a.array1=1; for(i=0;i<n;i+)for(j=0;j<n;j+)t=CompressMatrix(5,i,j,n);A.aij=a.arrayt; /*矩阵运算*/矩阵加法 int Add(Matrix A,Matrix B,Matrix &C) int i,j;if(A.row!=B.row)return 0;elseC.row=A.row;C.col=A.col; for(i=0;i<A.row;i+)for(j=0;j<A.col;j+)C.aij=A.aij+B.aij;return 1;/矩阵减法 int
10、Sub(Matrix A,Matrix B,Matrix &C) int i,j;if(A.row!=B.row)return 0;elseC.row=A.row;C.col=A.col;for(i=0;i<A.row;i+)for(j=0;j<A.col;j+)C.aij=A.aij-B.aij;return 1;/矩阵乘法int Mul(Matrix A,Matrix B,Matrix &C)int i,j,k;if(A.row!=B.row)return 0;elseC.row=A.row; C.col=A.col;for(i=0;i<A.row;i+)
11、 for(j=0;j<A.col;j+)C.aij=0; for(i=0;i<A.row;i+) /A的行数 for(j=0;j<A.col;j+) /A的列数和B的行数 for(k=0;k<A.col;k+) /B的列数 C.aij+=A.aik*B.akj;return 1; /矩阵的逆运算void Inverse(Matrix A)Matrix C;float p,q;int k,i,j,n;n=A.row;for(i=0;i<n ;i+)for(j=0;j<(n *2);j+) if(j<n) C.a ij=A.a ij; else if(j=
12、n+i) C.a ij=1.0;else C.a ij=0.0;for(k=0;k<n ;k+)for(i=0;i<n ;i+)if(i!=k)p=C.a ik/C.a ii;for(j=0;j<(n *2);j+)q=C.a ij*p;C.a ij=C.a ij-q; for(i=0;i<n ;i+)p=C.aii;for(j=0;j<n*2;j+)C.aij=C.aij/p;float y=1.0;for(i=0;i<n;i+)y=y*C.aii;for(i=0;i<n;i+)for(j=0;j<n;j+)A.aij=C.aij+n;prin
13、tf("逆运算结果:n");for(i=0;i<n;i+)for(j=0;j<n;j+)printf("%d ",A.aij);printf("n"); /矩阵转置 void Tans(Matrix A,Matrix &C) int i,j; C.row=A.row;C.col=A.col; for(i=0;i<A.row;i+) for(j=0;j<A.col;j+)C.aji=A.aij; /矩阵行列式的值 void Determinant(Matrix A) int count100; int s
14、um=0;int n;n=A.row; /矩阵的阶nfor (int p = 0; p < n; p+) int k = 0; int j = p%n;countp= A.akp;for (int i = 1; i < n; i+) k+; j+;k = k%n;j = j%n;countp *= A.akj;for (p = n-1; p >=0; p-) int k = 0; int j = p%n;count2*n-1-p = A.akp;for (int i = 1; i < n; i+) k+; j-;k = (k+n)%n;j =(j+n)%n;count2
15、*n-1-p *= A.akj;for (int i = 0; i < n; i+)sum+= (counti-counti + n);printf(" %dn",sum); /输出函数void print(Matrix A) int i,j;for(i=0;i<A.row;i+)for(j=0;j<A.col;j+)printf(" %d ",A.aij);printf("n");/菜单函数void showMenu()printf("特殊矩阵计算器n"); printf("选项1:上
16、三角矩阵n"); printf("选项2:下三角矩阵n");printf("选项3:对称矩阵n");printf("选项4:对角矩阵n");printf("选项5:单位矩阵n");void showMenu2()printf("输入选项得到结果后,如果想继续选择,请输入“Y”,否则输入任意字符退出:n"); printf("选项1:矩阵相加n"); printf("选项2:矩阵相减n"); printf("选项3:矩阵相乘n"
17、); printf("选项4:矩阵的逆矩阵n"); printf("选项5:矩阵转置n"); printf("选项6:矩阵行列式n"); /主函数int main()char ifcontinue;int x;int y;showMenu();/输出矩阵Aprintf("矩阵A类型为(输入数字选择):"); scanf("%d",&x); if(x=1) CreateMatrixUppertri(p,A); printf("输出上三角矩阵A:n"); print(A)
18、;if(x=2) CreateMatrixLowertri(p,A); printf("输出下三角矩阵A:n"); print(A);if(x=3) CreateMatrixSymmetry(p,A); printf("输出对称矩阵A:n"); print(A);if(x=4) CreateMatrixDiagonal(p,A); printf("输出对角矩阵A:n"); print(A);if(x=5) CreateMatrixUnit(p,A);printf("输出单位矩阵A:n"); print(A);/输出
19、矩阵B printf("矩阵B类型为(输入数字选择):"); scanf("%d",&x); if(x=1) CreateMatrixUppertri(p,B); printf("输出上三角矩阵B:n"); print(B);if(x=2) CreateMatrixLowertri(p,B); printf("输出下三角矩阵B:n"); print(B);if(x=3) CreateMatrixSymmetry(p,B); printf("输出对称矩阵B:n"); print(B);if
20、(x=4) CreateMatrixDiagonal(p,B); printf("输出对角矩阵B:n"); print(B);if(x=5) CreateMatrixUnit(p,B);printf("输出单位矩阵B:n"); print(B);/选择矩阵运算 showMenu2();while(1) printf("请选择运算方式(输入数字选择):n"); scanf("%d",&y);switch(y)case 1:if(Add(A,B,C)print(C);elseprintf("运算错误n");printf("*n");b
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 雨水管网清淤维护专项工作方案
- 叉车特种设备安全风险管控办法
- 婴幼儿洗澡抚触操作标准流程
- 门店员工仪容仪表
- 农药登记残留试验田块管理方案
- 员工职业健康行为规范手册
- 蔬菜冷库储藏管理规范标准
- 骨密度检测报告解读指南
- 家政员工离职工作交接管理规定
- 心血管健康风险评估方案指引
- 煤矿掘进工安全培训内容课件
- 2025年西安市8中小升初试题及答案
- 机械设备保修期服务方案及保证措施
- 《贵州省涉路工程安全技术指南(试行)》
- 2025年湖南省中考物理试卷(含解析)
- 食品安全日管控、周排查及月调度记录表
- 《资治通鉴》与为将之道知到课后答案智慧树章节测试答案2025年春武警指挥学院
- 数字生活产数人才练习试题及答案
- 数据新闻教程 课件 第6章 数据新闻的叙事
- 2024年10月自考13180操作系统试题及答案
- 污水处理厂提标改造工程施工组织设计
评论
0/150
提交评论