南昌大学C++实验报告.docx
- 文档编号:30241538
- 上传时间:2023-08-13
- 格式:DOCX
- 页数:38
- 大小:307.82KB
南昌大学C++实验报告.docx
《南昌大学C++实验报告.docx》由会员分享,可在线阅读,更多相关《南昌大学C++实验报告.docx(38页珍藏版)》请在冰豆网上搜索。
南昌大学C++实验报告
南昌大学实验报告
1.熟悉VC的上机环境
1)实验目的
1.初步了解C++程序的翻译、连接、和运行的过程。
2.掌握和理解C++程序的结构。
2)实验要求
1.使用VC++6.0
2.运行一个简单的C++程序
3)实验内容
源程序:
#include
#include
voidmain()
{
cout<<"C++上机实验"< } 运行结果: 南昌大学实验报告 2.构造函数与析构函数 1)实验目的 1.理解类与对象的区别。 2.学习掌握定义构造函数和析构函数的方法。 3.学习把握默认构造函数的意义。 4.了解类成员初始化,掌握构造与析构类成员的方式 2)实验内容 源程序: #include #include usingnamespacestd; classStudent { public: Student(intn,stringnam,chars) { num=n; name=nam; sex=s; } ~Student() { cout<<"Theinformationof"< } voiddisplay() { cout<<"num: "< cout<<"name: "< cout<<"sex: "< } private: intnum; stringname; charsex; }; intmain() { Studentstud1(1001,"Jake",'m'); stud1.display(); Studentstud2(1002,"Nancy",'f'); stud2.display(); return0; } 运行结果: 南昌大学实验报告 3.常类型与类型转换 1)实验目的 1.学习定义常对象、常指针、常引用、常成员函数、常数据成员。 2.了解常类型的初始化以及特点。 3.掌握自动隐式转换和强制转换这两种类型转换方式。 4.了解类型转换函数的用法。 2)实验内容 源程序: #include usingnamespacestd; classComplex { public: Complex() { real=0; imag=0; } Complex(doubler,doublei) { real=r; imag=i; } operatordouble() { returnreal; } private: doublereal; doubleimag; }; intmain() { Complexc1(2,5); doubled; d=3.5+c1; cout< return0; } 运行结果: 南昌大学实验报告 4.派生类的构造函数与虚基数 1)实验目的 1.学习声明和使用类的继承关系,声明派生类。 2.熟悉不同继承方式下对基类成员的控制访问。 3.学习利用虚基类解决二义性问题。 2)实验内容 原函数: #include #include usingnamespacestd; classStudent { public: Student(intn,stringnam,chars) { num=n; name=nam; sex=s; } ~Student(){} protected: intnum; stringname; charsex; }; classStudent1: publicStudent { public: Student1(intn,stringnam,chars,inta,stringad): Student(n,nam,s) { age=a; addr=ad; } voidshow() { cout<<"num: "< cout<<"name: "< cout<<"sex: "< cout<<"age: "< cout<<"address: "< } private: intage; stringaddr; }; intmain() { Student1stud1(1001,"Jake",'m',20,"10MainSt,NewYork"); stud1.show(); Student1stud2(1002,"Nancy",'f',19,"10MainSt,CheshireAcademy,Cheshire"); stud2.show(); return0; } 运行结果: 南昌大学实验报告 5.运算符重载 1)实验目的 1.学习掌握重定义与类有关的运算符。 2.把握重载运算符的时机。 3.学习掌握把一个类对象转换成另一个类对象。 4.学习掌握重载为成员与友元的区别及其带参数的情况。 5.学习掌握值返回与引用返回的区别及应用时机。 2)实验内容 源程序: #include usingnamespacestd; classComplex { public: Complex() { real=0; imag=0; } Complex(doubler,doublei) { real=r; imag=i; } Complexoperator+(Complex&c2); voiddisplay(); private: doublereal; doubleimag; }; ComplexComplex: : operator+(Complex&c2) { Complexc; c.real=real+c2.real; c.imag=imag+c2.imag; returnc; } voidComplex: : display() { cout<<"("< } intmain() { Complexc1(-2,5),c2(8,-10),c3; c3=c1+c2; cout<<"c1="; c1.display(); cout<<"c2="; c2.display(); cout<<"c1+c2="; c3.display(); return0; } 运行结果: 南昌大学实验报告 6.动态联缔 1)实验目的 1.理解动态联编和静态联编的区别。 2.掌握在程序编写中的动态联编的应用。 2)实验内容 源程序: #include usingnamespacestd; classPoint { public: Point(doublei,doublej) { x=i; y=j; } virtualdoubleArea()const { return0.0; } private: doublex,y; }; classRectangle: publicPoint { public: Rectangle(doublei,doublej,doublek,doublel); virtualdoubleArea()const { returnw*h; } private: doublew,h; }; Rectangle: : Rectangle(doublei,doublej,doublek,doublel): Point(i,j) { w=k; h=l; } voidfun(Point&s) { cout< } voidmain() { Rectanglerec(3.0,5.2,15.0,25.0); fun(rec); } 运行结果: 南昌大学实验报告 7.扑克牌游戏的设计 1)实验要求: 创建一副扑克,并完成洗牌、发牌、显示、花色排序、面值排序、删除一张牌、删除一轮牌等操作。 2)试验程序: #include #include #include #include #include #include classPlaying_Card/*扑克牌类,表示一张扑克牌的面值、花色和与之相联系的操作*/ { private: intm_Value;//扑克的实际面值,用整型值表示,从1开始,1~13 charm_Face[3];/*扑克的数字大小,用字符串的形式表示,为 A,2,3,…,10,J,Q,K*/ charm_Suit;//扑克的花色(黑、红、梅、方) public: Playing_Card();//构造函数,初始化扑克对象,实际上是将对象清零 voidshowcard();//显示扑克牌对象的面值,花色 voidCard_Make(int);//为一张扑克牌对象赋予特定的面值和花色 friendclassPerDeck;//定义类PerDeck为类Playing_Card的友元类 }; classDeck//一副扑克(54张)类 { private: Playing_Cardm_cardarray[54];//一副扑克由54张扑克牌构成 intm_lastdelt;//标记这副扑克牌删除的张数 public: Deck();/*构造函数,初始化一副扑克牌对象,实际上是将其内的 54张扑克牌清零*/ voidMakeDeck();/*生成一副扑克,即对其内的54张扑克赋予正确 的面值及花色*/ voidShowDeck();//依次逐张显示这副牌 voidDeckShuff(int);//洗牌,其参数是洗牌的次数 voidRemove_Card();/*将删除的那张扑克牌的内容清零,使这张牌在 屏幕上显示不出来*/ friendclassPerDeck;//定义类PerDeck为类Deck的友元类 }; classPerDeck { Playing_Cardm_Card[20];//最多有20张牌 intnNum;//实际张数 public: PerDeck(){} voidMakeperDeck(Deck&,int);/*对象初始化,参数为指定的那副牌 及实际赋值个数*/ voidShow();//显示 voidSortFace();//按面值排序 voidSortSuit();//按花色排序 intDelete(intn);//删除序号为n的那一张 }; voidPerDeck: : MakeperDeck(Deck&deck_3,intn) { nNum=n;//初始化当前对象的实际张数 staticinti=0;//标记为每个人发牌的其始位置 for(intk=0;k //用创建好的那副牌为当前对象发牌 i+=nNum;//为一个人发牌后起始位置向后跳nNum个 } voidPerDeck: : Show()//显示玩家的牌面 { intj=0; if(nNum==0)cout<<"已无牌! "< else { for(inti=0;i { if(j%11==0)cout< m_Card[i].showcard(); j++; } } } intPerDeck: : Delete(intn) { if(n>=nNum)return0;//判断是否删牌 else { for(inti=n;i nNum--;//删除一张牌后将实际张数减1 return1; } } voidPerDeck: : SortFace()//按面值排序 { Playing_Cardrecord;//产生一个临时对象 for(intj=0;j for(inti=j+1;i if(m_Card[j].m_Value>m_Card[i].m_Value) {record=m_Card[i];m_Card[i]=m_Card[j];m_Card[j]=record;} } voidPerDeck: : SortSuit()//按花色排序 { Playing_Cardrecord;//产生一个临时对象 for(intj=0;j for(inti=j+1;i if(m_Card[j].m_Suit>m_Card[i].m_Suit) {record=m_Card[i];m_Card[i]=m_Card[j];m_Card[j]=record;} } classPlayDeck { PerDeckm_deck[4];//一共是四个人玩牌 public: PlayDeck(){} voidPlayCard(Deck&);//用指定的那副牌对四个人分别赋值 voidShow();//显示 intDeleteOne(introw,intcolumn);/*删除一张,参数为第row个人的第 column张牌*/ intDeleteAll(int,int,int,int);/*删除一轮,参数分别代表四个人删 除哪一张*/ voidSortDeckFace();//对整副牌面值排序 voidSortDeckSuit();//对整副牌花色排序 }; voidPlayDeck: : PlayCard(Deck&deck_2)//给四个人发牌 { for(inti=0;i<2;i++)m_deck[i].MakeperDeck(deck_2,14); //前两个人发14张牌 for(intj=2;j<4;j++)m_deck[j].MakeperDeck(deck_2,13); //后两个人发13张牌 } voidPlayDeck: : Show()//显示四个玩家的牌 { for(inti=0;i<4;i++) { cout< cout<<"玩家"< "; m_deck[i].Show(); } cout< } intPlayDeck: : DeleteOne(introw,intcolumn)/*删除一张,参数为第row 个人的第column张牌*/ {returnm_deck[row-1].Delete(column-1);} intPlayDeck: : DeleteAll(inta,intb,intc,intd)/*删除一轮,参数分 别代表四个人各删除哪一张*/ { returnm_deck[0].Delete(a-1)+m_deck[1].Delete(b-1) +m_deck[2].Delete(c-1)+m_deck[3].Delete(d-1); } voidPlayDeck: : SortDeckFace()//将四个人的牌按面值排序 { m_deck[0].SortFace(); m_deck[1].SortFace(); m_deck[2].SortFace(); m_deck[3].SortFace(); } voidPlayDeck: : SortDeckSuit()//将四个人的牌按花色排序 { m_deck[0].SortSuit(); m_deck[1].SortSuit(); m_deck[2].SortSuit(); m_deck[3].SortSuit(); } voidProgram_Init();//程序初始化,输出初始化信息 intmain(); voidCenter_Text(char[]);/*将参数(字符串)在屏幕上显示在一行的中 间位置*/ voidGet_Key();//接收用户键入的字符 voidDeckMakeDriver();/*程序的主要算法,内部调用多个函数,包括生成 扑克牌,洗牌,删除,排序等主要操作*/ intgetRandInt(intmin,intmax);//取得在两参数间的整型随机值 voidprog_close();//暂停程序运行,供用户查看中间运行结果 intmain() { srand((unsigned)time(NULL));//初始化随机数种子 Program_Init();//显示程序初始化提示信息 DeckMakeDriver();//调用程序的主要算法,包含程序的主要操作过程 prog_close();//暂停程序运行,供用户查看运行结果 return1; } Playing_Card: : Playing_Card()//扑克牌对象的构造函数 { inti; for(i=0;i<3;)//初始化扑克牌的面值,清零 { m_Face[i]=''; i++; } m_Suit='';//初始化扑克牌的花色,清零 m_Value=0; } voidProgram_Init()//程序一开始运行的提示信息 { Center_Text("扑克牌游戏\n"); Center_Text("程序设计: "); cout< Get_Key(); } voidGet_Key()//从键盘接收用户键入的字符 { cout< Center_Text("单击任意键继续..."); getch(); cout< } voidPlaying_Card: : showcard()//在屏幕上显示一张扑克牌的面值及花色 { cout<<""; cout< cout.width (1); cout< cout<<""; } voidCenter_Text(charShellText[80])/*将函数参数(字符串)在屏幕上 居中显示*/ { intlength; intcenter; length=strlen(ShellText);//取得欲显示字符串的大小 center=(80-length)/2;/*整个屏幕的列数为80,取得字符串在该 行的其始位置*/ for(;center! =0;center--)//在字符串前输出空格 { cputs(""); } cputs(ShellText); } voidPlaying_Card: : Card_Make(intnum)/*根据参数num生成一张扑克 牌,num不同,生成的面值或花色不同*/ { inti=0; charj; intface_num=num%13;//扑克牌的面值,从0到12 if(num==52)strcpy(m_Face,"S");//大王花色赋为S elseif(num==53)strcpy(m_Face,"B");//小王花色赋为B else { switch(face_num)//当面值大于10时,用J,Q,K代替,面值为0,用A代替 { case0: strcpy(m_Face,"A");break; case9: strcpy(m_Face,"10");break; case10: strcpy(m_Face,"J");break; case11: strcpy(m_Face,"Q");break; case12: strcpy(m_Face,"K");break; default: j=char(face_num+49);//其它的面值,用对应的ASCII码表示 if(i<3) { m_Face[i]='';i++; m_Face[i]=j;i++; m_Face[i]=NULL; break; } } } //扑克牌的花色,分别用红桃,黑桃,梅花,方块的ASCII码替代 if(num<=12)m_Suit=6;//红桃 if(num>12&&num<=25)m_Suit=3;//黑桃 if(num>25&&num<=38)m_Suit=5;//梅花 if(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;//小王面值赋为14 elseif(num==53)m_Value=15;//大王面值赋为15 elsem_Value=face_num+1;/*A的面值实际上用1表示,其余面值 依次加1*/ } voidDeckMakeDriver()/*主要程序操作部分,调用多个函数,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 南昌大学 C+ 实验 报告