已阅读5页,还剩29页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
南昌大学实验报告1. 熟悉VC的上机环境1) 实验目的1. 初步了解C+程序的翻译、连接、和运行的过程。2. 掌握和理解C+程序的结构。2) 实验要求1. 使用VC+6.02. 运行一个简单的C+程序3) 实验内容源程序:#include#includevoid main()coutC+上机实验endl;运行结果: 南昌大学实验报告2. 构造函数与析构函数1) 实验目的1. 理解类与对象的区别。2. 学习掌握定义构造函数和析构函数的方法。3. 学习把握默认构造函数的意义。4. 了解类成员初始化,掌握构造与析构类成员的方式2) 实验内容源程序:#include#includeusing namespace std;class Studentpublic:Student(int n,string nam,char s)num=n;name=nam;sex=s;Student()coutThe information of num studnet has been collected.endl;void display()coutnum: numendl;coutname: nameendl;coutsex: sexendlendl;private:int num;string name;char sex;int main()Student stud1(1001,Jake,m);stud1.display();Student stud2(1002,Nancy,f);stud2.display();return 0;运行结果: 南昌大学实验报告3. 常类型与类型转换1) 实验目的1. 学习定义常对象、常指针、常引用、常成员函数、常数据成员。2. 了解常类型的初始化以及特点。3. 掌握自动隐式转换和强制转换这两种类型转换方式。4. 了解类型转换函数的用法。2) 实验内容源程序:#includeusing namespace std;class Complexpublic:Complex()real=0;imag=0;Complex(double r,double i)real=r;imag=i;operator double()return real;private:double real;double imag;int main()Complex c1(2,5);double d;d=3.5+c1;coutdendl;return 0;运行结果: 南昌大学实验报告4. 派生类的构造函数与虚基数1) 实验目的1. 学习声明和使用类的继承关系,声明派生类。2. 熟悉不同继承方式下对基类成员的控制访问。3. 学习利用虚基类解决二义性问题。2) 实验内容原函数:#include#includeusing namespace std;class Studentpublic:Student(int n,string nam,char s)num=n;name=nam;sex=s;Student()protected:int num;string name;char sex;class Student1:public Studentpublic:Student1(int n,string nam,char s,int a,string ad):Student(n,nam,s)age=a;addr=ad;void show()coutnum: numendl;coutname: nameendl;coutsex: sexendl;coutage: ageendl;coutaddress: addrendlendl;private:int age;string addr;int main()Student1 stud1(1001,Jake,m,20,10 Main St,New York);stud1.show();Student1 stud2(1002,Nancy,f,19,10 Main St,Cheshire Academy,Cheshire);stud2.show();return 0;运行结果: 南昌大学实验报告5. 运算符重载1) 实验目的1. 学习掌握重定义与类有关的运算符。2. 把握重载运算符的时机。3. 学习掌握把一个类对象转换成另一个类对象。4. 学习掌握重载为成员与友元的区别及其带参数的情况。5. 学习掌握值返回与引用返回的区别及应用时机。2) 实验内容源程序:#includeusing namespace std;class Complexpublic:Complex()real=0;imag=0;Complex(double r,double i)real=r;imag=i;Complex operator+(Complex &c2);void display();private:double real;double imag;Complex Complex:operator+(Complex &c2)Complex c;c.real=real+c2.real;c.imag=imag+c2.imag;return c;void Complex:display()cout(real,imagi)endl;int main()Complex c1(-2,5),c2(8,-10),c3;c3=c1+c2;coutc1=;c1.display();coutc2=;c2.display();coutc1+c2=;c3.display();return 0;运行结果: 南昌大学实验报告6. 动态联缔1) 实验目的1. 理解动态联编和静态联编的区别。2. 掌握在程序编写中的动态联编的应用。2) 实验内容源程序:#includeusing namespace std;class Pointpublic:Point(double i,double j)x=i;y=j;virtual double Area() constreturn 0.0;private:double x,y;class Rectangle:public Pointpublic:Rectangle(double i,double j,double k,double l);virtual double Area() constreturn w*h;private:double w,h;Rectangle:Rectangle(double i,double j,double k,double l):Point(i,j)w=k;h=l;void fun(Point &s)couts.Area()endl;void main()Rectangle rec(3.0,5.2,15.0,25.0);fun(rec);运行结果: 南昌大学实验报告7. 扑克牌游戏的设计1)实验要求:创建一副扑克,并完成洗牌、发牌、显示、花色排序、面值排序、删除一张牌、删除一轮牌等操作。2)试验程序:#include #include #include #include #include #include class Playing_Card /*扑克牌类,表示一张扑克牌的面值、花色和与之相联系的操作*/private:int m_Value; /扑克的实际面值,用整型值表示,从1开始,113char m_Face3; /*扑克的数字大小,用字符串的形式表示,为A,2,3,10,J,Q,K*/char m_Suit ; /扑克的花色(黑、红、梅、方)public:Playing_Card();/构造函数,初始化扑克对象,实际上是将对象清零void showcard();/显示扑克牌对象的面值,花色void Card_Make(int); /为一张扑克牌对象赋予特定的面值和花色friend class PerDeck; /定义类PerDeck为类Playing_Card的友元类;class Deck /一副扑克(54张)类private:Playing_Card m_cardarray54;/一副扑克由54张扑克牌构成int m_lastdelt; /标记这副扑克牌删除的张数public:Deck(); /*构造函数,初始化一副扑克牌对象,实际上是将其内的54张扑克牌清零*/void MakeDeck(); /*生成一副扑克,即对其内的54张扑克赋予正确的面值及花色*/void ShowDeck();/依次逐张显示这副牌void DeckShuff(int);/洗牌,其参数是洗牌的次数void Remove_Card();/*将删除的那张扑克牌的内容清零,使这张牌在屏幕上显示不出来*/friend class PerDeck; /定义类PerDeck为类Deck的友元类;class PerDeckPlaying_Card m_Card20; /最多有20张牌int nNum; /实际张数public:PerDeck()void MakeperDeck(Deck &,int); /*对象初始化,参数为指定的那副牌及实际赋值个数*/void Show(); /显示void SortFace(); /按面值排序void SortSuit(); /按花色排序int Delete(int n); /删除序号为n的那一张;void PerDeck:MakeperDeck(Deck & deck_3,int n)nNum=n; /初始化当前对象的实际张数static int i=0; /标记为每个人发牌的其始位置for(int k=0;knNum;k+)m_Cardk=deck_3.m_cardarrayi+k;/用创建好的那副牌为当前对象发牌i+=nNum; /为一个人发牌后起始位置向后跳nNum个void PerDeck:Show() /显示玩家的牌面int j=0;if(nNum=0)cout已无牌!endl; /如果玩家无牌输出提示信息elsefor(int i=0;inNum;i+)if(j%11=0)cout=nNum)return 0; /判断是否删牌elsefor(int i=n;inNum;i+)m_Cardi=m_Cardi+1; /删除指定的牌 nNum-; /删除一张牌后将实际张数减1 return 1;void PerDeck:SortFace() /按面值排序Playing_Card record; /产生一个临时对象for(int j=0;jnNum-1;j+)for(int i=j+1;im_Cardi.m_Value)record=m_Cardi;m_Cardi=m_Cardj;m_Cardj=record;void PerDeck:SortSuit() /按花色排序Playing_Card record; /产生一个临时对象for(int j=0;jnNum-1;j+)for(int i=j+1;im_Cardi.m_Suit)record=m_Cardi;m_Cardi=m_Cardj;m_Cardj=record;class PlayDeckPerDeck m_deck4; /一共是四个人玩牌public:PlayDeck()void PlayCard(Deck &); /用指定的那副牌对四个人分别赋值void Show(); /显示int DeleteOne(int row,int column); /*删除一张,参数为第row个人的第column张牌*/int DeleteAll(int,int,int,int); /*删除一轮,参数分别代表四个人删除哪一张*/void SortDeckFace(); /对整副牌面值排序 void SortDeckSuit(); /对整副牌花色排序;void PlayDeck:PlayCard(Deck & deck_2) /给四个人发牌for(int i=0;i2;i+)m_decki.MakeperDeck(deck_2,14);/前两个人发14张牌for(int j=2;j4;j+)m_deckj.MakeperDeck(deck_2,13); /后两个人发13张牌void PlayDeck:Show() /显示四个玩家的牌for(int i=0;i4;i+)coutendl;cout玩家i+1的牌:;m_decki.Show();coutendlendl;int PlayDeck:DeleteOne(int row,int column) /*删除一张,参数为第row个人的第column张牌*/return m_deckrow-1.Delete(column-1);int PlayDeck:DeleteAll(int a,int b,int c,int d) /*删除一轮,参数分别代表四个人各删除哪一张*/return m_deck0.Delete(a-1)+m_deck1.Delete(b-1)+m_deck2.Delete(c-1)+m_deck3.Delete(d-1);void PlayDeck:SortDeckFace() /将四个人的牌按面值排序m_deck0.SortFace();m_deck1.SortFace();m_deck2.SortFace();m_deck3.SortFace();void PlayDeck:SortDeckSuit() /将四个人的牌按花色排序m_deck0.SortSuit();m_deck1.SortSuit();m_deck2.SortSuit();m_deck3.SortSuit();void Program_Init();/程序初始化,输出初始化信息int main();void Center_Text(char ); /*将参数(字符串)在屏幕上显示在一行的中间位置*/void Get_Key(); /接收用户键入的字符void DeckMakeDriver();/*程序的主要算法,内部调用多个函数,包括生成扑克牌,洗牌,删除,排序等主要操作*/int getRandInt(int min, int max); /取得在两参数间的整型随机值void prog_close();/暂停程序运行,供用户查看中间运行结果int main() srand( (unsigned)time( NULL ) ); /初始化随机数种子Program_Init(); /显示程序初始化提示信息DeckMakeDriver();/调用程序的主要算法,包含程序的主要操作过程prog_close();/暂停程序运行,供用户查看运行结果return 1;Playing_Card:Playing_Card() /扑克牌对象的构造函数int i;for(i=0;i3;)/初始化扑克牌的面值,清零m_Facei = ;i+;m_Suit = ;/初始化扑克牌的花色,清零m_Value = 0;void Program_Init() /程序一开始运行的提示信息Center_Text(扑克牌游戏n); Center_Text(程序设计:);cout endl endl;Get_Key();void Get_Key() /从键盘接收用户键入的字符coutendl;Center_Text(单击任意键继续.);getch(); cout endl;void Playing_Card:showcard() /在屏幕上显示一张扑克牌的面值及花色cout ;cout m_Face; /显示面值cout.width(1);cout m_Suit; /显示花色cout ;void Center_Text(char ShellText80) /*将函数参数(字符串)在屏幕上居中显示*/int length;int center;length= strlen(ShellText); /取得欲显示字符串的大小center = (80 - length)/2; /*整个屏幕的列数为80,取得字符串在该行的其始位置*/for(;center!=0;center-) /在字符串前输出空格cputs( );cputs(ShellText);void Playing_Card:Card_Make(int num) /*根据参数num生成一张扑克牌,num不同,生成的面值或花色不同*/int i = 0;char j;int face_num = num % 13; /扑克牌的面值,从0到12if(num=52)strcpy(m_Face, S); /大王花色赋为Selse if(num=53)strcpy(m_Face, B); /小王花色赋为Belseswitch(face_num)/当面值大于10时,用J,Q,K代替,面值为0,用A代替case 0: strcpy(m_Face, A);break;case 9: strcpy(m_Face,10);break;case 10: strcpy(m_Face, J);break;case 11: strcpy(m_Face, Q);break;case 12: strcpy(m_Face, K);break;default:j = char(face_num + 49);/其它的面值,用对应的ASCII码表示if(i3)m_Facei = ; i+;m_Facei = j;i+;m_Facei = NULL; break; /扑克牌的花色,分别用红桃,黑桃,梅花,方块的ASCII码替代 if(num 12 & num 25 & num 38 & num = 51)m_Suit = 4; /方块 if(num=52)m_Suit=1; /小王if(num=53)m_Suit=2; /大王if(num=52)m_Value=14; /小王面值赋为14else if(num=53)m_Value=15; /大王面值赋为15else m_Value = face_num + 1; /*A的面值实际上用1表示,其余面值依次加1*/void DeckMakeDriver() /*主要程序操作部分,调用多个函数,完成生成一副牌,洗牌,显示,删除等操作*/Deck deck_1; /*生成一副扑克牌对象,内有54张牌,此时所有的扑克牌均未赋值*/PlayDeck man; /产生一局牌deck_1.MakeDeck();/对54张扑克牌赋值deck_1.ShowDeck(); /逐一显示这54张牌 Get_Key(); /暂停运行,供用户查看显示结果system(cls); /清屏deck_1.DeckShuff(250);/对生成的这副牌洗牌250次deck_1.ShowDeck(); /逐一显示这洗好的54张牌Get_Key(); /暂停运行,供用户查看显示结果system(cls); /清屏man.PlayCard(deck_1); /发牌int Memory=0;for(;)man.Show(); /显示四个人的牌Center_Text(*菜单*n);Center_Text(* 1:删除一张牌 *n);Center_Text(* 2:删除一轮牌 *n);Center_Text(* 3:花色排序 *n);Center_Text(* 4:面值排序 *n);Center_Text(* 5:退出程序 *n);Center_Text(*n); coutn;cin.getline(str,30);if(strlen(str)=1)cout输入错误,请重新输入:endl;goto aa; if(!cin)char str30; cin.clear();cin.getline(str,30);cout输入错误,请重新输入:endl;goto aa;switch(n) /判断执行的操作case 1: /执行删除一张牌的操作int a,b;char str30;bb:cout请输入删除第几个人的第几张牌ab; cin.getline(str,30);if(strlen(str)=2)cout输入错误,请重新输入:endl; goto bb;while(!cin)char str30;cin.clear();cin.getline(str,30);cout输入错误,请重新输入:endl; goto bb;Memory+=man.DeleteOne(a,b);break;case 2: /执行删除一轮牌的操作int c,d,e,f;char str130;cc: cout请依次输入删除四个人的第几张牌cdef;cin.getline(str1,30);if(strlen(str1)=2)cout输入错误,请重新输入:endl; goto cc;while(!cin)char str30;cin.clear();cin.getline(str,30);cout输入错误,请重新输入:endl; goto cc;Memory+=man.DeleteAll(c,d,e,f);break;case 3:man.SortDeckSuit(); /执行按花色排序break;case 4:man.SortDeckFace(); /执行按面值排序break;case 5:exit(0); /执行退出程序default:cout输入错误,请重新输入:endl;goto aa;system(cls); /清屏if(Memory=54)break; /判断循环结束条件coutendlendl-1)/判断是否产生完54张牌m_cardarraym_lastdelt.Card_Make(m_lastdelt); /*调用每张扑克牌的生成函数,依次对每张扑克牌赋值,直到生成完一副扑克牌*/m_lastdelt-;/生成完一张扑克牌后改变生成的参数void Deck:ShowDeck() /显示一副扑克牌int index = m_lastdelt + 1; /*以该位置为第一张牌,从头显示这副扑克牌*/int newline = 0;Center_Text(完整的一副牌);cout endl;while(index=53)if(newline % 11 = 0) cout endl; /每显示11张输出一个回车m_cardarrayindex.showcard();/按数组的顺序依次显示newline+;index+;int getRandInt(int min, int max) /返回两个参数之间的一个整型随机值int numToReturn;numToReturn = rand(); /取得随机值numToReturn = numToReturn % (max - min + 1) + min; /*将随机值的范围调整到两个参数之间*/ return numToReturn;void Deck:DeckShuff( int times) /洗牌,参数为洗牌次数int x, split; /split是分开成两部分的位置,如上部分、下部分Center_
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年天津教师晋级考试试题及答案
- 2026年房地产经纪人招聘面试题及答案
- 2026年心理健康管理师考试试题及答案
- 2026年公务员以往的考试试题及答案
- 新型肺炎应知应会试题及答案
- 警惕电信诈骗 守护财产安全
- 搅拌技术培训相关试题及答案
- 金纳米颗粒分类、制备方法与关键表征技术
- 2026年银行业风险管理历年真题汇编及考点分析
- 2026年公务员考试《法律知识》专项训练试题及答案
- 胃溃疡合并胃出血个案护理
- 开学第一课课件2025-2026学年湘教版八年级地理下册
- 生产车间节约用电制度
- 天津天津东疆综合保税区管理委员会面向社会招聘笔试历年参考题库附带答案详解
- 街道商会档案管理制度
- 监控设备调试施工方案
- 5年高考数学真题分类汇编专题03等式与不等式、基本不等式及一元二次不等式(原卷版)
- 2026年山东能源集团西北矿业有限公司招聘(200人)笔试参考题库附带答案详解(3卷)
- 中小企业财务管理制度与流程
- 临床技术操作规范之心血管外科
- 无人机巡检操作员应急救灾方向面试题库含行为面试题
评论
0/150
提交评论