ImageVerifierCode 换一换
你正在下载:

C++实践.doc

[预览]
格式:DOC , 页数:22 ,大小:173KB ,
资源ID:9161347      下载积分:10 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.docduoduo.com/d-9161347.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(C++实践.doc)为本站会员(scg750829)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

C++实践.doc

1、苏州科技学院二一 二一一学年第一学期电子信息工程学院课程设计报告书课程名称: 面向对象技术 班 级: 组 号: 组长姓名: 组成员姓名: 指导教师: 二一一年七月一 类设计class edgetype /定义含权边类protected:char v1; /两个结点char v2;float edgeweight; /权值public:friend graph; ;class graph /定义含权无向图类public:graph(); /构造函数 graph(graph /拷贝构造函数 graph(); /析构函数 void addnode(char a); /添加结点 void deleno

2、de(char c); /删除结点 void addedge(char p,char q,float weight); /增加含权的边 void deledge(char c,char b); /删除含权的边,该边的权值以 MAX 表示 void printnodenum(); /求图中结点的个数 void printedgenum(); /求图中边的个数 void Ppath(int path,int i,int v); /前向递归查找路径上的顶点 void Dispath(float dist,int path,float s,int n,int v); /输出路径(以 MAX 表示两点重

3、合的情况) void Dijkstra(int v); /用 Dijkstra 算法求单源最短路径 void build(); /建立图的邻接矩阵存储 void print(); /输出邻接矩阵 int locate(char v); /找顶点 V 在图中的位置 int find(int father,int v,int num); /找下标为 v 的结点的根父节点 void kruskal(int father); /kruskal 算法求最小生成树 void open(); /从文件中读取数据void save(); /保存数据protected:int nodenum; /顶点数int

4、arcnum; /边数char *vex; /顶点信息(动态) float *a; /邻接矩阵(动态) edgetype *edge; /边数组(动态)二 ;小组成员分工graph:graph() /构造函数 graph:graph(graph int i,*father,v;float weight;char q,a,c;father=NULL;printname();menu();cini;while(i!=0)switch(i)case 1:g.build ();break;case 2:g.print ();break;case 3:printf(“请输入你要添加的结点:“);cina

5、;g.addnode(a);break;case 4:printf(“请输入你要删除的结点:“);cinc;g.delenode(c);break;case 5:printf(“请输入要增加的边的两个端点和该边的权值:n“);cinacweight;g.addedge(a,c,weight);break;case 6:printf(“请输入用两个端点表示你要删除的含权的边:“);cinac;g.deledge(a,c);break;case 7:g.printnodenum();break;case 8:g.printedgenum();break;case 9:printf(“请输入源点:“

6、);cinq;v=g.locate(q);g.Dijkstra(v);break;case 10:g.kruskal(father);break;case 11:g.save();break;case 12:g.open();break;menu();cini;return 0;三 类源程序代码class graph; /提前引用声明class edgetype /定义含权边类protected:char v1; /两个结点char v2;float edgeweight; /权值public:friend graph; ;class graph /定义含权无向图类public:graph()

7、; /构造函数 graph(graph /拷贝构造函数 graph(); /析构函数 void addnode(char a); /添加结点 void delenode(char c); /删除结点 void addedge(char p,char q,float weight); /增加含权的边 void deledge(char c,char b); /删除含权的边,该边的权值以MAX 表示 void printnodenum(); /求图中结点的个数 void printedgenum(); /求图中边的个数 void Ppath(int path,int i,int v);/前向递归查

8、找路径上的顶点 void Dispath(float dist,int path,float s,int n,int v);/输出路径(以 MAX 表示两点重合的情况) void Dijkstra(int v); /用 Dijkstra 算法求单源最短路径 void build(); /建立图的邻接矩阵存储 void print(); /输出邻接矩阵 int locate(char v);/找顶点 V 在图中的位置 int find(int father,int v,int num);/找下标为 v 的结点的根父节点 void kruskal(int father);/kruskal 算法求最

9、小生成树 void open(); /从文件中读取数据void save(); /保存数据protected:int nodenum; /顶点数int arcnum; /边数char *vex; /顶点信息(动态) float *a; /邻接矩阵(动态) edgetype *edge; /边数组(动态);graph:graph() /构造函数 vex=NULL;a=NULL;edge=NULL;arcnum=0;nodenum=0;graph:graph(graph arcnum=g.arcnum;nodenum=g.nodenum;vex=new charnodenum;a=new floa

10、t*nodenum;for(i=0;ib;arcnum=arcnum+b;edge1=edge;edge=new edgetypearcnum;for(i=0;ipqweight;for(c=0;cpqweight;for(c=0;c=0 void menu() /菜单 printf(“n“);printf(“ *含权边类与含权无向图类*nn“);printf(“ 01.-建立图的邻接矩阵存储- 02.-输出邻接矩阵-nn“);printf(“ 03.-添加结点- 04.-删除结点-nn“);printf(“ 05.-增加含权的边- 06.-删除含权的边-nn“);printf(“ 07.-求

11、图中结点的个数- 08.-求图中边的个数-nn“);printf(“ 09.-用 Dijkstra 算法求单源最短路径- 10.-用 kruskal 算法求最小生成树nn“);printf(“ 11.-保存数据- 12.-从文件中读取数据-nn“);printf(“ 00.-退出-nn“);printf(“ *n“);printf(“ 请选择:“);/* Method Name: main* Discription: 主函数,用于测试对象 graph.* Parameter:graph g;* int i,*father,v;float weight;* char q,a,c; * Retur

12、n: return 0;* Author: 柏雪,田晓霞,华丽娜* Date: 2011/07/02* Version: V0.1*/int main() /main 函数graph g;int i,*father,v;float weight;char q,a,c;father=NULL;printname();menu();cini;while(i!=0)switch(i)case 1:g.build ();break;case 2:g.print ();break;case 3:printf(“请输入你要添加的结点:“);cina;g.addnode(a);break;case 4:pr

13、intf(“请输入你要删除的结点:“);cinc;g.delenode(c);break;case 5:printf(“请输入要增加的边的两个端点和该边的权值:n“);cinacweight;g.addedge(a,c,weight);break;case 6:printf(“请输入用两个端点表示你要删除的含权的边:“);cinac;g.deledge(a,c);break;case 7:g.printnodenum();break;case 8:g.printedgenum();break;case 9:printf(“请输入源点:“);cinq;v=g.locate(q);g.Dijkst

14、ra(v);break;case 10:g.kruskal(father);break;case 11:g.save();break;case 12:g.open();break;menu();cini;return 0;四 调试分析过程描述1 在删除某些点时,一开始忘了删除与那点有关的边了,导致后来求邻接矩阵时出错,后来将那些边的权值都修改为 MAX 表示已被删了,这样才解决了问题。2 在用*表示删除了的边后,在求结点的个数时,忘了将*排除在外了,后来加上了一个 if 判断条件语句才修改了错误。3 由于我们的含权无向图类是动态的,一开始我们在保存数据和读取数据时,用的是fwrite()和 f

15、read()函数,这两个函数是将类里面的数据整体保存和读出,但是由于我的类里面的数据有的为指针,这样做是不行的,后来我们采用的是 fprintf()和fscanf()函数才解决了问题。4 由于未看清源点的性质,我们在执行时一直以为程序有错误,结果在老师的指点下,我们理解了源点这个函数概念的定义,最终实验完成。五 本组的创新内容1在删除结点时,一开始我们想到的是,将存放顶点的字符数组从要删除的结点的后一个依次往前移一个,将要删除的店覆盖,但是后来发现,这么做,要对邻接矩阵做很大的改动,而且这样做会导致要修改很多的数据成员,为下面输出邻接矩阵,求单源最短路径和求最小生成树带来了很大的麻烦,最终,我

16、们决定用*来代替要删除的结点, ,这样,操作会大大简化,大部分数据成员都不需要修改,只需要修改邻接矩阵对应的点和一些边的权值,大大简化了后面的操作。这是我们举得一个例子:下面是原邻接矩阵:这是删除了点 c 之后的邻接矩阵:由此图可以看出:c 点被*替换了,原来 c 点所在的行和列的权值都变成了 MAX2这个项目的题目要求中没有让我们用动态,但是我们考虑到如果不用动态,一旦程序的规模大起来,对内存空间的浪费是非常大的所以我们将它做成了动态。这样跟利于内存空间的释放。六 总结1 通过这次的课程设计,我们能深刻地体会到面向对象与面向过程在实现功能方面的不同,面向对象具有面向过程所不具有的许多特点,就

17、拿 C 语言与 C+来说,C是一个面向过程的语言,C+是同时具有面向过程与面向对象功能的语言,C 语言在写小型程序时非常具有优势,但是一旦程序的规模大起来了,那么 C 语言就现在力不从心了,这时 C+的面向对象的功能就发挥出来了。如果一个大型程序你用C 来写,你要考虑好多细节方面的东西,很是麻烦。2 在用面向对象技术设计程序时,类的设计非常非常的重要,这直接关系到你后面的工作,把哪些成员封装起来,把哪些成员作为私有的,把哪些成员作为公有的,怎么样把这些成员3 通过这才的实践,我们体会到了团队分工、团队合作的重要性,在完成一个比较大的项目时,怎么样根据你们小组成员的实际情况来给他们分配任务是非常重要的一个环节,只有做好这个环节,你才能发挥出一个团队的最好水平,这样你的任务完成起来会相对比较好了。

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报