计本《数据结构课程设计报告》_第1页
计本《数据结构课程设计报告》_第2页
计本《数据结构课程设计报告》_第3页
计本《数据结构课程设计报告》_第4页
计本《数据结构课程设计报告》_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

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

文档简介

1、安徽省巢湖学院计算机与信息工程学院 课程设计报告 课程名称oracle数据库 课题名称企业人事管理系统 专业班级11计科工程*班 学号 姓名 联系方指导教师邢慧芬 完成日期:年 月曰 目录 1 数据结构课程设计任务书 1 1.1 题目 1 1.2 要求 1 2 总体设计 1 2.1 功能模块设计 1 2.2 所有功能模块的流程图 1 3 详细设计 1 3.1 程序中所采用的数据结构及存储结构的说明 1 3.2 算法的设计思想 2 3.3 稀疏矩阵各种运算的性质变换 2 4 调试与测试: 2 4.1 调试方法与步骤: 2 4.2 测试结果的分析与讨论: 3 4.3 测试

2、过程中遇到的主要问题及采取的解决措施: 3 5 时间复杂度的分析: 4 6 源程序清单和执行结果 4 7 总结 8 8 参考文献 8 1数据结构课程设计任务书 1.1题目 【示例】用三元组实现稀疏矩阵的转置、相加、相乘 1.2要求 【示例】 1)用creat函数创建三元组; 2)用print函数打印计算结果; 3)用add函数实现稀疏矩阵的相加运算; 4)用mult函数实现稀疏矩阵的相乘运算; 5)用Transm函数实现稀疏矩阵的转置运算; 相加运算 对于两个稀疏矩阵相加,即行与行,列与列相加 b)相乘运算 若设Q=M*N其中M是m1*n1矩阵,N是m2*n2矩阵,只有当n仁m2时才可以相乘。

3、 乘积矩阵Q中元素 Qvi, j) =EMi, k) *Nk , j)1 i m11 j n2 在算法中,不论Mi , k)和N相乘即可。 c转置运算 对于一个 m*n的矩阵M,它的转置矩阵 T是一个n*m的矩阵,且Ti,j) =Mj, i ), 1 i gnwj w。完成一个稀疏矩阵的转置分为三步: 1)将矩阵的行列值相互交换; 2)将每个三元组中的i和j相互调换; 加法运算 两个稀疏矩阵的加和矩阵仍然是稀疏矩阵 b)乘法运算 两个稀疏矩阵的乘积矩阵不是稀疏矩阵 c)转置运算 一个稀疏矩阵的转置矩阵仍然是稀疏矩阵 4调试与测试: 4.1调试方法与步骤: 【示例11简述测试步骤 第一步:测试矩

4、阵加法: 过程 略) 第二步:测试矩阵乘法: 过程 加法运算 由于两矩阵行列相等,故时间复杂度为0行*列) b) 乘法运算 设M是ml*n1矩阵,N是m2*n2矩阵,则时间复杂度是 0m1*n1*n2) c) 转置运算 时间复杂度和原矩阵的列数及非零元的个数的乘积成正比,即0 【示例11 #i nclude #i nclude #in clude #i nclude #define MAXSIZE 100 /*假设非零元个数的最大值为 20*/ typedef struct int i,j。/*该非零元的行下标和列下标*/ int v。 Triple。 typedef struct Tripl

5、e dataMAXSIZE+1。/*非零元三元组表,dataO未用 */ int mu,nu,tu。/*矩阵的行数,列数和非零元个数*/ juzhe ng。 void creat(juzheng &T/* 创建三元组 */ int k,i,j。 printf(n请输入矩阵n。 do printf(n请输入矩阵的行数,列数,非零元素个数n。 scan f(%d%d%d, &T.mu, &T.n u, &T.tu。 if(T.mu20|(T. nu20|(T.tu/(T.mu*T. nu0.05|(T.tuT.mu*T. nu |T.tu MAXSIZE printf(n不满足,请重新输入!n。

6、while(T.mu20|(T. nu20|(T.tu/(T.mu*T. nu0.05|(T.tuT.mu*T. nu| |T.tuMAXSIZE。 for(k=1。k do printf(n请输入非零元素的行数i,列数j,数值vn。 scan f(%d%d%d, &T.datak.i, &T.datak.j, &T.datak.v。 if(T.datak.iT.mu|(T.datak.jvO|T.datak.jT .n u|(T.datak.v=0 printf(n不满足,请重新输入!n。 while(T.datak.iT.mu|(T.datak.jvO|T.datak.jT.nu|(T.d

7、atak.v=O。 return。 void print(juzheng A /* 打印计算结果 */ int q,n,k,a=0 。 printf(nn 矩阵为: n 。 for(n=1。n for(k=1。 k for(q=1。 q if(A.dataq.i=n&A.dataq.j=kprintf(t%-3d,A.dataq.v 。 break。 if(qA.tuprintf(t%-3d,a 。 printf(n 。 void add(juzheng Ajuzheng B/*加法运算 */ int n,k 。 if(A.mu!=B.mu|A.nu!=B.nu printf(n 不满足相加条

8、件 。 printf(n 两矩阵行列各自相等才可加 。 else for(n=1。 n for(k=1。 k/*将矩阵T的非零元接至 M中*/ if(A.datan.i=B.datak.i&A.datan.j=B.datak.j A.datan.v+=B.datak.v 。 B.datak.v=0 。 for(k=1 。 k if(B.datak.v!=0 A.dataA.tu+1.i=B.datak.i 。 A.dataA.tu+1.j=B.datak.j 。 A.dataA.tu+1.v=B.datak.v。 A.tu+。 print(A 。 void mult(juzheng A,juz

9、heng B/* 乘法运算 */ int z,n1,k1,n2,k2,s,sum,count=0。 juzheng Z。 int b1100100,b2100100,b3100100 。 if(A.nu!=B.muprintf( 矩阵列数与行数不等,不能进行乘法运算 。 else Z.mu=A.mu 。 Z.nu=B.nu。 for(n仁1。n1/* 初始化为零 */ for(k1=1。 k1b1n1k1=0 。 for(n1=1。 n1 for(k1=1。 k1b2n1k1=0 。 for(n1=1。 n1/ *装载三元组数据 */ b1A.datan1.iA.datan1.j=A.data

10、n1.v 。 for(n1=1。 n1 b2B.datan1.iB.datan1.j=B.datan1.v 。 for(n1=1。 n1 for(k2=1 。 k2 sum=0。 for(k1=1。 k1 sum+=b1n1k1*b2k1k2 。 if(sum!=0 count+。 Z.datacount.i=n1。 Z.datacount.j=k2。 Z.datacount.v=sum。 Z.tu=count。 print(Z。 void Transm(juzheng A/ *转置运算 */ juzheng B。 int p,q,col。 B.mu=A.nu。 B.nu=A.mu。 B.tu

11、=A.tu。 if(B.tu q=1。 for(col=1。 col for(p=1。 p if(A.datap.j=col B.dataq.i=A.datap.j 。 B.dataq.j=A.datap.i 。 B.dataq.v=A.datap.v。 q+。 print(B 。 char menu(/菜单 char n。 printf(n 。 printf( 稀疏矩阵运算器 n。 printf(n 。 printf(实现运算 n。 printf(n 。 printf(1:矩阵相加 n。 printf(2: 矩阵相乘 n。 printf(3: 矩阵转置 n。 printf(4:退出 n。 p

12、rintf(n 。 printf(n 你要选择的操作是 : n=getchar(。 return n。 main( juzheng A,B。 for(。 switch(menu( case 1:creat(A。 print(A。 creat(B。 print(B。 printf(n 。 add(A,B。 getch(。 break。 case 2:creat(A。 print(A。 creat(B。 print(B。 printf(n 。 mult(A,B。 getch(。 break。 case 3: creat(A。 print(A。 printf(n 。 Transm(A。 getch(

13、。 break。 case 4: exit(O。 system(PAUSE。 return EXIT_SUCCESS。 7总结 【示例1】本程序在刚开始调试时有许多错误,但在我的努力及同学的帮助下都被一一 克服,现在在操作本程序时可根据提示进行相关操作,能正确输出结果。在刚开始的几 次调试中曾经出现过不能运行、不能产生十以内随机数字、不能随机出现加减、不会正 确输出结果、不能进行循环练习等等问题。经过我的努力及同学的帮助,这些问题得到 克服,并且使程序的功能也得到了一定的完善。现在它能对出错的题目发出报警声,并 且给出正确答案。最后还能分别输出对错的题数及所得分数。 在这次设计过程中,不仅复习课本上所学知识,还通过查资料、问同学学到了课本 上没有的知识。从而启发我,要想写好程序,在写好课本知识的同时还需要多读和专业 有关的一些书籍,同时还需要多动脑子,

温馨提示

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

评论

0/150

提交评论