




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
南昌大学试验汇报学生姓名:学号:专业班级:试验类型:□验证□综合□设计□创新试验日期:试验成绩:试验一:C++程序的基本运行与操作一.试验目的1.初步理解程序的编译、连接和运行的过程。
2.掌握和理解程序的构造。二.试验内容1.使用VC2.运行三个简朴的程序例:4.9#include<iostream.h>intm(8);intadd_int(intx,inty=7,intz=m);voidmain(){ inta(5),b(15),c(20); ints=add_int(a,b); cout<<s<<endl;}intadd_int(intx,inty,intz){ returnx+y+z;}南昌大学试验汇报学生姓名:学号:专业班级:试验类型:□验证□综合□设计□创新试验日期:试验成绩:在阐明函数add_int()时,给函数参数设置了默认值,其中一种参数的值被设置为一种已知变量(m)的值。例:4.10#include<iostream.h>inta[8]={1,3,5,7,9,11,13};voidfun(intb[],intn){ for(inti=0;i<n-1;i++) b[7]+=b[i];}voidmain(){ intm=8; fun(a,m); cout<<a[7]<<endl;}用数组作为函数参数,在main()中,输出数组a的元素a[7]的值为b[7]的值。例:4.13#include<iostream.h>inlineintpower_int(intx){ return(x)*(x);}voidmain(){ for(inti=1;i<=10;i++) { intp=power_int(i); cout<<i<<"*"<<i<<"="<<p<<endl; 南昌大学试验汇报学生姓名:学号:专业班级:试验类型:□验证□综合□设计□创新试验日期:试验成绩:函数power-int()是一种内联函数。三.试验环境PC微机:操作系统:VC程序集成环境。四、试验心得与体会通过在MicrosoftVisualC++6.0编程环境中运行简朴的示例程序,基本上熟悉了MicrosoftVisualC++6.0的基本使用。程序的对否可通过MicrosoftVisualC++6.0来检查,调试,修改最终将程序修改对的。南昌大学试验汇报学生姓名:学号:专业班级:试验类型:□验证□综合□设计□创新试验日期:试验成绩:试验二:构造函数与析构函数一、试验目的:1.熟悉类的构造函数与析构函数2.通过上机掌握构造函数与析构函数详细调用二.试验内容1.使用VC2.编写两个程序,验证构造函数与析构函数是怎么运行的,看运行成果与自己读的成果有什么不一样例:5.2#include<iostream.h>classTpoint{public: voidSetPoint(intx,inty); intXcoord() {returnX;}intYcoord() {returnY;} voidMove(intxOffset,intyOffset);private: intX,Y;};voidTpoint::SetPoint(intx,inty){ X=x; Y=y;}voidTpoint::Move(intxOffset,intyOffset){ X+=xOffset; Y+=yOffset;}voidmain(){ Tpointp1,p2; p1.SetPoint(3,5); p2.SetPoint(8,10); p1.Move(2,1); p2.Move(1,-2); cout<<"x1="<<p1.Xcoord()<<",y1="<<p1.Ycoord()<<endl;cout<<"x2="<<p2.Xcoord()<<",y2="<<p2.Ycoord()<<endl;}南昌大学试验汇报学生姓名:学号:专业班级:试验类型:□验证□综合□设计□创新试验日期:试验成绩:该程序重要为理解类,对象,组员函数的基本概念及运行方式。点类名为TPoint,该类有四个公有组员,它们都为组员函数。SetPoint()用来给对象的数据组员赋值,Xcoord()用来返回数据组员X值,Ycoord()用来返回数据组员Y值,Move用来变化某个点的坐标值。该类有两个私有组员,为Int型变量X和Y,用来表达某一点的坐标值。例:5.3#include<iostream.h>classTDatel{public: TDatel(inty,intm,intd); ~TDatel(); voidPrint();private: intyear,month,day;};TDatel::TDatel(inty,intm,intd){ year=y; month=m; day=d; cout<<"Constructorcalled.\n";}TDatel::~TDatel(){ cout<<"Destructorcalled.\n";}voidTDatel::Print(){ cout<<year<<"."<<month<<"."<<day<<endl;}voidmain(){ TDateltoday(1998,4,9),tomorrow(1998,4,10); Cout<<"todayis"; today.Print(); cout<<"tomorrowis"; tomorrow.Print();}南昌大学试验汇报学生姓名:学号:专业班级:试验类型:□验证□综合□设计□创新试验日期:试验成绩:程序中定义了两个对象,并对他们进行初始化,初始化由构造函数实现,构造函数又是自动。调用的,共调用两次,析构函数也是被自动调用的,在输出函数结束前,调用了两次析构函数。三.试验环境PC微机;操作系统:VC程序集成环境。南昌大学试验汇报学生姓名:学号:专业班级:试验类型:□验证□综合□设计□创新试验日期:试验成绩:试验三常类型与数据转换一、试验目的:1.熟悉常类型与数据转换2.通过上机掌握常类型与数据转换二.试验内容1.使用VC2.编写两个程序,熟悉并掌握常类型与数据转换例6.11#include<iostream.h>constintN=6;voidprint(constint*p,intn);voidmain(){ intarray[N]; for(inti=0;i<N;i++) cin>>array[i]; print(array,N);}voidprint(constint*p,intn){ cout<<"{"<<*p; for(inti=1;i<n;i++) cout<<","<<*(p+i); cout<<"}"<<endl;}南昌大学试验汇报学生姓名:学号:专业班级:试验类型:□验证□综合□设计□创新试验日期:试验成绩:该程序中,出现了两处const修饰符。一是定义int型常量N,二是定义了一种指向常量数组元素的指针。该数组元素不能被更新。但程序中有一问题,print()函数中,实参array是一种int数组名,形参为constint的指针,类型不一样,但没有出现类型错误。由于形参虽指向一种非constint数组,该数组可更新,但在print()函数中不能更新。例6.20#include<iostream.h>classRational{public:Rational(intd,intn){ den=d; num=n;}operatordouble();private: intden,num;};Rational::operatordouble(){ returndouble(den)/double(num);}voidmain(){ Rationalr(5,8); doubled=4.7; d+=r; cout<<d<<endl;}南昌大学试验汇报学生姓名:学号:专业班级:试验类型:□验证□综合□设计□创新试验日期:试验成绩:d是一种double数值,r是Rational类的对象。两个不一样类型的数据进行加法之因此进行,得益于类型转换函数operatordouble().编译系统先查看类Rational的阐明,看与否存在类型转换函数将Rational类型的操作数转换为double类型的阐明。由于Rational类中阐明了类型转换函数operatordouble(),因此在运行时可进行上述类型转换。南昌大学试验汇报学生姓名:学号:专业班级:试验类型:□验证□综合□设计□创新试验日期:试验成绩:试验四派生类的构造函数与虚基类一、试验目的:1.熟悉派生类的构造函数与虚基类2.通过上机掌握派生类的构造函数与虚基类二.试验内容1.使用VC2.编写两个程序,熟悉并掌握派生类的构造函数与虚基类例7.4#include<iostream.h>classA{public: A() { a=0;cout<<"A'sdefalutconstructorcalled.\n"; } A(inti) { a=i;cout<<"A'sconstructorcalled.\n"; }~A(){cout<<"A'sdefalutconstructorcalled.\n";} voidPrint()const { cout<<a<<","; } intGeta() {returna;}private: inta;};classB:publicA{public:B(){b=0;cout<<"B'sdefalutconstructorcalled.\n";}B(inti,intj,intk);~B(){cout<<"B'sdefalutcalled.\n";}voidPrint();private: intb; Aaa;};B::B(inti,intj,intk):A(i),aa(j){ b=k; cout<<"B'sconstructorcalled.\n";}voidB::Print(){A::Print();cout<<b<<","<<aa.Geta()<<endl;}voidmain(){Bbb[2];bb[0]=B(1,2,5);bb[1]=B(3,4,7);for(inti=0;i<2;i++)bb[i].Print();}南昌大学试验汇报学生姓名:学号:专业班级:试验类型:□验证□综合□设计□创新试验日期:试验成绩:该程序中,先定义了类A,再定义了类B,它是类A的派生类。继承方式为公有继承。派生类B的构造函数格式如下:B(inti,intj,intk):A(i),aa(j){ b=k; cout<<"B'sconstructorcalled.\n";}B是派生类构造函数名,总参数表中有三个参数:i用来初始化基类的数据组员,j用来初始化B的子对象aa,k用来初始化B的数据组员b.执行次序:先创立两个对象元素的对象数组。调用两次类B的默认构造函数,每调用一次类B的默认构造函数时,先调用两次类A的默认构造函数和一次类B的默认构造函数。接着,程序中出现了两个赋值语句。系统要建立一种临时对象,调用B类的三个参数的构造函数对它初始化,并赋给左值对象,再调用B类的析构函数将临时对象删除。输出两个类B对象的数据组员值。最终,程序结束前系统调用类B的析构函数。南昌大学试验汇报学生姓名:学号:专业班级:试验类型:□验证□综合□设计□创新试验日期:试验成绩:例7.10#include<iostream.h>classA{public: A(constchar*s) {cout<<s<<endl;}~A(){}};classB:virtualpublicA{public: B(constchar*s1,constchar*s2):A(s1) { cout<<s2<<endl; }};classC:virtualpublicA{public: C(constchar*s1,constchar*s2):A(s1) { cout<<s2<<endl; }};classD:publicB,publicC{public: D(constchar*s1,constchar*s2,constchar*s3,constchar*s4) :B(s1,s2),C(s1,s3),A(s1) { cout<<s4<<endl;};voidmain(){D*ptr=newD("classA","classB","classC","classD");deleteptr;}该程序中,定义了类A,类B,类C和类D。在派生类B和C中使用了虚基类,使得建立的D类对象只创立一次虚基类子对象。在派生类B,C,D的构造函数的组员初始化列表中均包括了对虚基类A的构造函数。在建立类D的对象时,只有类D的构造函数的组员初始化列表中列出的虚基类构造函数被调用,并且仅调用一次,而类D的虚类的构造函数的组员初始化列表中列出的虚基类构造函数不被执行。南昌大学试验汇报学生姓名:学号:专业班级:试验类型:□验证□综合□设计□创新试验日期:试验成绩:试验五运算符重载一、试验目的:1.熟悉运算符重载2.通过上机掌握运算符重载二.试验内容1.使用VC2.编写两个程序,熟悉并掌握运算符重载例8.4#include<iostream.h>classA{public: A() {X=Y=0;} A(inti,intj) {X=i;Y=j;} A(A&p) {X=p.X;Y=p.Y;} A&operator=(A&p); intgetX() {returnX;} intgetY() {returnY;}private: intX,Y;};A&A::operator=(A&p) { X=p.X; Y=p.Y; cout<<"Assignmentoperatorcalled.\n"; return*this; }voidmain(){Aa(7,8);Ab;b=a;cout<<b.getX()<<","b.getY()<<endl;}南昌大学试验汇报学生姓名:学号:专业班级:试验类型:□验证□综合□设计□创新试验日期:试验成绩:该程序中,在类A内定义了一种赋值运算符函数,它被定义为组员函数。程序中,体现式:b=a被编译程序解释为:
b.operator=(a)调用下列函数:A&A::operator=(A&p)完毕赋值操作。例8.7#include<iostream.h>classF{public: doubleoperator()(doublex,doubley)const;};doubleF::operator()(doublex,doubley)const{ return(x+5)*y;}voidmain(){ Ff; cout<<f(1.5,2.2)<<endl;}南昌大学试验汇报学生姓名:学号:专业班级:试验类型:□验证□综合□设计□创新试验日期:试验成绩:该程序实现f(x,y)=(x+5)y函数的抽象。Main()函数中出现的体现式:f(1.5,2.2)被编译程序解释为:F.operator()(1.5,2.2)F是类F的对象。南昌大学试验汇报学生姓名:学号:专业班级:试验类型:□验证□综合□设计□创新试验日期:试验成绩:试验六动态联编一、试验目的:1.熟悉动态联编2.通过上机掌握动态联编二.试验内容1.使用VC2.编写两个程序,熟悉并掌握动态联编例8.9#include<iostream.h>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<<s.Area()<<endl;}voidmain(){ Rectanglerec(3.0,5.2,15.0,25.0); fun(rec);}南昌大学试验汇报学生姓名:学号:专业班级:试验类型:□验证□综合□设计□创新试验日期:试验成绩:该程序中类Point中的Area()函数和类Rectangle中的Area()函数为虚函数,在fun()函数的对象引用参数s被动态联编,该函数体内调用的Area()函数是在运行中束定的,它被确定为Rectangle类的Area(0函数,因此成果为375.例8.14#include<iostream.h>classA{public: virtualvoidf() {cout<<"A::f()called.\n";}};classB:publicA{public: virtualvoidf() {cout<<"B::f()called.\n";}};voidmain(){ Bb; A&r=b; void(A::*pf)()=A::f; (r.*pf)();}南昌大学试验汇报学生姓名:学号:专业班级:试验类型:□验证□综合□设计□创新试验日期:试验成绩:该例阐明当使用指向类的组员函数的指针来标识虚函数时在公有继承的条件下,对该虚函数的调用采用动态联编。南昌大学试验汇报学生姓名:学号:专业班级:试验类型:□验证□综合□设计□创新试验日期:试验成绩:试验七扑克牌游戏程序设计试验目的:设计扑克牌游戏二、试验规定创立一副扑克,并完毕洗牌、发牌、显示、花色排序、面值排序、删除一张牌、删除一轮牌等操作。三、试验内容1.使用VC2.编写程序,掌握并能纯熟应用C++基础知识与实践中#include<iostream.h>#include<string.h>#include<conio.h>#include<stdlib.h>#include<stdio.h>#include<time.h>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<nNum;k++)m_Card[k]=deck_3.m_cardarray[i+k];//用创立好的那副牌为目前对象发牌 i+=nNum;//为一种人发牌后起始位置向后跳nNum个}voidPerDeck::Show()//显示玩家的牌面{ intj=0; if(nNum==0)cout<<"已无牌!"<<endl;//假如玩家无牌输出提醒信息 else { for(inti=0;i<nNum;i++) { if(j%11==0)cout<<endl;//每行输出11张牌 m_Card[i].showcard(); j++; } }}intPerDeck::Delete(intn){ if(n>=nNum)return0;//判断与否删牌 else { for(inti=n;i<nNum;i++)m_Card[i]=m_Card[i+1];//删除指定的牌 nNum--;//删除一张牌后将实际张数减1return1; }}voidPerDeck::SortFace()//按面值排序{ Playing_Cardrecord;//产生一种临时对象 for(intj=0;j<nNum-1;j++) for(inti=j+1;i<nNum;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<nNum-1;j++) for(inti=j+1;i<nNum;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<<endl; cout<<"玩家"<<i+1<<"的牌:"; m_deck[i].Show(); } cout<<endl<<endl;}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("C++试验扑克牌游戏设计:"); cout<<endl<<endl; Get_Key();}voidGet_Key()//从键盘接受顾客键入的字符{ cout<<endl; Center_Text("单击任意键继续..."); getch();cout<<endl;}voidPlaying_Card::showcard()//在屏幕上显示一张扑克牌的面值及花色{ cout<<""; cout<<m_Face;//显示面值 cout.width(1); cout<<m_Suit;//显示花色 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()/*重要程序操作部分,调用多种函数,完毕生成一副牌,洗牌,显示,删除等操作*/{ Deckdeck_1;/*生成一副扑克牌对象,内有54张牌,此时所有的扑克牌均未赋值*/ PlayDeckman;//产生一局牌 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);//发牌 intMemory=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");cout<<"请选择菜单里对应功能的一种整数:\n"; intn; charstr[30];aa: cin>>n; cin.getline(str,30); if(strlen(str)>=1) { cout<<"输入错误,请重新输入:"<<endl; gotoaa; }if(!cin) { charstr[30]; cin.clear(); cin.getline(str,30); cout<<"输入错误,请重新输入:"<<endl; gotoaa; } switch(n)//判断执行的操作 { case1://执行删除一张牌的操作 inta,b; charstr[30];bb: cout<<"请输入删除第几种人的第几张牌"<<endl; cin>>a>>b; cin.getline(str,30); if(strlen(str)>=2) { cout<<"输入错误,请重新输入:"<<endl; gotobb; } while(!cin) { charstr[30]; cin.clear(); cin.getline(str,30); cout<<"输入错误,请重新输入:"<<endl; gotobb; } Memory+=man.DeleteOne(a,b); break; case2://执行删除一轮牌的操作 intc,d,e,f; charstr1[30];cc:cout<<"请依次输入删除四个人的第几张牌"<<endl; cin>>c>>d>>e>>f; cin.getline(str1,30); if(strlen(str1)>=2) { cout<<"输入错误,请重新输入:"<<endl; gotocc; } while(!cin) { charstr[30]; cin.clear(); cin.getline(str,30); cout<<"输入错误,请重新输入:"<<endl; gotocc; } Memory+=man.DeleteAll(c,d,e,f); break; case3: man.SortDeckSuit();//执行按花色排序 break; case 4:man.SortDeckFace();//执行按面值排序 break; case5: exit(0);//执行退出程序 default: cout<<"输入错误,请重新输入:"<<endl; gotoaa; } system("cls");//清屏 if(Memory==54)break;//判断循环结束条件 } cout<<endl<<endl<<endl;} voidDeck::MakeDeck() //对生成的54张牌逐一赋值{ m_lastdelt=53; //赋初值,该值作为生成每张扑克牌的参数 while(m_lastdelt>-1) //判断与否产生完54张牌 { m_cardarray[m_lastdelt].Card_Make(m_lastdelt);/*调用每张扑克牌的生成函数,依次对每张扑克牌赋值,直到生成完一副扑克牌*/ m_lastdelt--; //生成完一张扑克牌后变化生成的参数 }}voidDeck::ShowDeck()//显示一副扑克牌{ intindex=m_lastdelt+1;/*以该位置为第一张牌,从头显示这副扑克牌*/ intnewline=0; Center_Text("完整的一副牌"); cout<<endl; while(index<=53) { if(newline%11==0)cout<<endl;//每显示11张输出一种回车 m_cardarray[index].showcard(); //按数组的次序依次显示 newline++; index++; }}intgetRandInt(intmin,intmax)//返回两个参数之间的一种整型随机值{ intnumToReturn; numToReturn=rand();//获得随机值 numToReturn=numToReturn%(max-min+1)+min;/*将随机值的范围调整到两个参数之间*/ returnnumToReturn;}voidDeck::DeckShuff(inttimes)//洗牌,参数为洗牌次数{ intx,split;//split是分开成两部分的位置,如上部分、下部分 Center_Text("洗牌……"); cout<<endl; for(x=0;x<=times;x++) //开始循环,每循环一次将牌所有重排一遍 { split=getRandInt(20,35); //随机选用split的值 Decktopdeck; //生成两副扑克牌对象 Deckbottomdeck; inti; intbottomdeckindex=1; inttopdeckindex=1; for(i=0;i<=split-1;) /*将初始的那副扑克牌的上边部分的张数赋值到新生成的扑克牌对象中*/ { topdeck.m_cardarray[topdeckindex]=this->m_cardarray[i]; topdeckindex++; i++; } for(i=(split);i<54;)/*同样将初始那副扑克牌的下边部分的张数赋值到新生成的扑克牌对象中*/ { bottomdeck.m_cardarray[bottomdeckindex]=this->m_cardarray[i]; bottomdeckindex++; i++; } intdeckoutindex=0; intnumcardstomovetop; intnumcardstomovebottom; intj; inth=0; bottomdeckindex=54-split; //下部分那副扑克牌的张数 topdeckindex=split; //上部分那副扑克牌的张数 while(deckoutindex<=53) { numcardstomovetop=getRandInt(2,7);/*从上部分抽取的张数,是2-7之间的随机数*/ numcardstomovebottom=ge
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 岸电箱施工方案
- 2025年山东省成考试题及答案
- 农村泥巴墙施工方案
- 5年级下册语文背诵
- 5年级上册语文笔记第6单元第1课小练笔
- 等保测评服务人员配置方案
- 4年级上册第5单元
- 嘉兴古建基础施工方案
- 大学语文同步练习12-垓下之围 (1) - 副本 - 副本
- 2025年安徽卫生健康职业学院单招职业倾向性测试题库参考答案
- GB/T 13384-2008机电产品包装通用技术条件
- 综合门诊部全科医疗科设置基本标准
- GB 15603-1995常用化学危险品贮存通则
- FZ/T 07019-2021针织印染面料单位产品能源消耗限额
- 北师大版高中英语必修二《New-Zealand-Fact-File》reading-课件-
- 竖弯钩的书写课件
- 幼儿园小班植树节课件:《栽树》
- 初中英语《Unit5-Do-you-remember-what-you-were-doing》教学课件设计
- 幼儿园大班数学口算练习题可打印
- 小学班会课件-端午节主题班会(共19张PPT)通用版 PPT课件
- 细菌性痢疾流行病学个案调查表
评论
0/150
提交评论