




免费预览已结束,剩余7页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
学 生 实 验 报 告实验课程名称 C+程序设计 开课实验室 计算机中心 学 院 2011 级 信息与计算科学 专业班 一班 学 生 姓 名 陈世超 学 号 631122020113 开 课 时 间 2012 至 2013 学年第 1 学期评分细则评 分报告表述的清晰程度和完整性(30分)程序设计的正确性(40分)实验结果的分析和体会(30分)总 成 绩综合设计实验一、实验内容:1无序输入多个用户的记录电话号码(至少包括姓名和电话两个域),要求以单链表结构存储。然后编写冒泡排序程序,将用户记录可以按照用户名或者电话顺序输出。2对于上题的单链表结构存储的用户电话号码记录,实现二分查找算法,可以分别按照姓名和电话来查询到相应的记录。要求:1)每个用户记录是由用户类生成的一个对象,用户记录至少包括姓名和电话两个域,该域为类里的private成员。2)提供成员函数dispName()、disCode() 分别用来显示该对象的姓名和电话号码。提供成员函数setName()、setCode() 分别用来修改该对象的姓名和电话号码。3.实现CardGame类用来表示普通的52张纸牌,有四种花色(红心、方块、梅花和黑桃),每种花色各有13张:A、K、Q、J、10、9、2,用适当的方式实现纸牌的基本功能。CardGame类派生出桥牌Bridge类,为Bridge类设计deal函数,用来将纸牌分为4手,每手13张;从CardGame类派生出扑克Poker类,为Poker类设计deal函数,用来将纸牌分为n(n从2到7,代表游戏人数)手,每手5张。完成类的设计,并编写完整的程序测试。分析:(本题目考察类的继承和派生关系。发牌过程中,需要使用随机函数rand(),用于获得一个随机数。)实验要求:按照实验要求设计算法,编写程序。对每个题目要有相应的源程序(可以是一组源程序,每个功能模块采用不同的函数实现)。源程序要按照写程序的规则来编写。要结构清晰,重点函数的重点变量,重点功能部分要加上清晰的程序注释。2、 程序代码#include#include#includestdio.husing namespace std;class list;class aafriend class list;private:string name;/姓名string number;/电话号码aa *next;public:aa()/初始化用户信息name= ; number= ; next=NULL;void dispName()/显示用户的姓名coutname;void dispCode()/显示用户的电话号码coutnumber;void setName(string na1)name=na1; void setName()/修改用户的姓名coutname;void setCode(string nu1)number=nu1;void setCode()/修改用户的电话号码 coutnumber;void setnext() next=NULL;void setnext(aa *b1) next=b1; string getname()/返回用户的姓名 return name;string getnumber()/返回用户的电话号码return number;aa* getnext()/返回指向下一条用户信息的指针 return next; ;class listprivate:int s;/所包含的用户信息的条数aa *head;/头指针public:list()/初始化链表head=new aa;s=0;list(int n)/创建一个包含n条记录的链表int i;s=n; head=new aa;aa *temp;aa *a; temp=head;for(i=1;isetName(); temp-setCode();a=new aa; temp-setnext(a); temp=a;temp-setName();temp-setCode(); temp-setnext();list()/析构函数 aa *q;while(head) q=head-getnext();delete head;head=q;void sortname()/按姓名降序排列 int i,j;aa *p,*n,*temp; temp=new aa;p=head;for(i=1;igetnext();temp-setName(p-getname();temp-setCode(p-getnumber();for(j=i+1;jgetname().compare(n-getname()setName(n-getname(); temp-setCode(n-getnumber();n-setName(p-getname();n-setCode(p-getnumber();p-setName(temp-getname();p-setCode(temp-getnumber();n=n-getnext();p=p-getnext();delete temp;void sortnumber()/*冒泡排序算法,按电话号码降序排列*/int i,j;aa *p,*n,*temp;temp=new aa;p=head;for(i=1;igetnext();temp-setName(p-getname();temp-setCode(p-getnumber();for(j=i+1;jgetnumber().compare(n-getnumber()setName(n-getname(); temp-setCode(n-getnumber();n-setName(p-getname();n-setCode(p-getnumber();p-setName(temp-getname();p-setCode(temp-getnumber();n=n-getnext();p=p-getnext();delete temp;void displist()/*显示电话簿的信息*/int i; aa *p;cout 姓名 电话号码endl;p=head;for(i=0;is;i+)cout getname() getnumber()getnext(); int searchname()/*按姓名查找*/int i;string na;coutna;aa *p;p=head;for(i=0;igetname().compare(na)=0)cout所查找的用户的电话号码是:getnumber()next;cout未能找到符合要求的用户信息endl;return 0;int searchnumber()/*按电话号码查找*/int i; string nu;coutnu;aa*p;p=head;for(i=0;igetnumber().compare(nu)=0)cout所查找的用户的姓名为:getname()getnext();cout找不到符合要求的用户信息endl;return 0;void main()int num;coutnum;list test(num);/*创建一个包含num条记录的电话簿*/cout创建的电话簿为endl;test.displist();cout按姓名升序排列endl;test.sortname(); test.displist();cout按电话号码升序排列endl;test.sortnumber(); test.displist();cout按姓名查找算法的测试endl;test.searchname(); test.searchname();cout按电话号码查找算法的测试endl;test.searchnumber(); test.searchnumber();实验结果:实验体会:通过实验我学会了怎么用二分查找法对链表进行查找,以及用冒泡法给数据排序和单链表结构存储数据。程序代码:/*实现纸牌的洗牌,发牌功能*/#include #include #include #include #include class CardGame;class card /用来表示一张扑克牌的面值及花色friend class CardGame;private:int value; /一张牌的数值,从113char s; /一张牌的花色,红桃,黑桃,梅花,方块 char face3; /一张牌的面值,A,210,J,Q,Kpublic:card() /初始化一张牌value=0; strcpy(face, );s= ;void showcard()/显示一张牌的面值及花色cout ; coutface; couts;cout ; void makecard(int number)/为一张牌赋予特定的面值和花色根据传入参数的不同int a;a=number%13;value=a+1; switch(a)case 0:strcpy(face,K);break;case 1:strcpy(face,Q);break;case 2:strcpy(face,J);break;case 3:strcpy(face,10);break;case 4:strcpy(face,9);break;case 5:strcpy(face,8);break;case 6:strcpy(face,7);break;case 7:strcpy(face,6);break;case 8:strcpy(face,5);break;case 9:strcpy(face,4);break;case 10:strcpy(face,3);break;case 11:strcpy(face,2);break;case 12:strcpy(face,A);break;/纸牌的花色分别用红桃,黑桃,梅花,方块的ASCII码表示 if(number12&number25&number38&number=51)s=4; ; /方块class CardGame /一副纸牌类,用来表示52张牌的面值及花色protected:card cardarray52;/用来存放52张纸牌public:CardGame()/构造函数,生成一副完整牌,有52张,每张都有具体的花色和面值int i;for(i=0;i52;i+)cardarrayi.makecard(i);void showall()/按顺序显示一副牌int i,count=1;cout一幅新牌endl;for(i=0;i52;i+)cardarrayi.showcard();if(count%10=0)coutn;count+;coutendl; ;class Brige:public CardGame/桥牌类int brigeplayer413;/*存放四位玩家的牌,用整数152依次对应CardGame类中cardarray数组的下标051,即一副牌的每一张都对应一个152的整数*/public:Brige():CardGame()/初始化桥牌类的成员变量,并生成一副新纸牌int i,j;for(i=0;i4;i+) for(j=0;j13;j+)brigeplayerij=0;void deal()/将纸牌分成四手,每手十三张,即将牌发给四位玩家并显示int i,j,tape52;for(i=0;i52;i+) tapei=0;/*tape数组用来保证brigeplayer数组的所有值的大小不同,即确保每个玩家不会拿到两张一样的牌*/srand(int)time(0);for(i=0;i4;i+)for(j=0;j13;j+) brigeplayerij=(int)(52*rand()/(RAND_MAX+1.0);while(tapebrigeplayerij!=0)brigeplayerij=(int)(52*rand()/(RAND_MAX+1.0);tapebrigeplayerij=1;void show()int i,j;for(i=0;i4;i+)cout第i+1一位玩家的牌为:endl;for(j=0;j13;j+)cardarraybrigeplayerij.showcard();coutendl;class Poker:public CardGameint number;/玩家数int *playercards;/指向二维数组的指针,二维数组用于存放每位玩家的牌,052依次对应一副新牌的每一张public:Poker():CardGame()/构造函数,初始化扑克类的成员变量,并生成一副新牌int i,j,n=1;while(n)cout请输入玩家数n(2=nnumber;if(number7|number2) cout输入错误,请重新输入endl;else n=0;playercards=new int*number;for(i=0;inumber;i+)/动态申请二维数组空间playercardsi=new int5;for(i=0;inumber;i+)for(j=0;j5;j+)playercardsij=0; Poker()/析构函数,删除构造函数申请的空间int i;for(i=0;inumber;i+)delete playercardsi;void deal()/将扑克分成n手,每手五张,即将牌发给每位玩家,没人五张int i,j; int tape252;for(i=0;i52
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 纺织专业试题及答案
- 电子基专业试题及答案
- 专业证书课程试题及答案
- 国贸专业试题及答案
- 江苏省泰州市兴化中学2025-2026学年高三上学期开学化学试题(含答案)
- 金融专业试题及答案
- 旅游法律法规试题
- 票务系统施工方案
- 地理信息系统技术标准与应用
- 入学典礼发言稿范例
- 3银行出纳3支票
- 第二单元(教学课件)-【大单元教学】三年级语文上册同步备课系列(统编版)
- 东航校招的在线测评题
- 中国盐业集团有限公司招聘笔试题库2024
- 人教版培智一年级(上)生活语文教案
- 乡镇宣传思想文化工作经验交流材料
- 一年级幼小衔接开学第一课系列:《会问好》教学课件
- 2024人工智能机器学习导论
- 1.2 规划初中生活(课件)-2024-2025学年七年级道德与法治上册 (统编版2024)
- 人教版(2024)七年级英语上册Starter Unit 2 Section A (2a~2e) 课件
- 乒乓球聘用教练合同模板
评论
0/150
提交评论