程序设计实习作业解答_第1页
程序设计实习作业解答_第2页
程序设计实习作业解答_第3页
程序设计实习作业解答_第4页
程序设计实习作业解答_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

程序设计实习作业解答作业二:魔兽世界之一描述:魔兽世界的西面是红魔军的司令部,东面是蓝魔军的司令部。两军的司令部都会制造武士。武士一共有dragon、ninja、iceman、lion、wolf五种。每种武士都有编号、生命值、攻击力这三种属性。

双方的武士编号都是从1开始计算。红方制造出来的第n个武士,编号就是n。同样,蓝方制造出来的第n个武士,编号也是n。武士在刚降生的时候有一个生命值。在每个整点,双方的司令部中各有一个武士降生。红方司令部按照iceman、lion、wolf、ninja、dragon的顺序循环制造武士。蓝方司令部按照lion、dragon、ninja、iceman、wolf的顺序循环制造武士。制造武士需要生命元。制造一个初始生命值为m的武士,司令部中的生命元就要减少m个。如果司令部中的生命元不足以制造某个按顺序应该制造的武士,那么司令部就试图制造下一个。如果所有武士都不能制造了,则司令部停止制造武士。给定一个时间,和双方司令部的初始生命元数目,要求你将从0点0分开始到双方司令部停止制造武士为止的所有事件按顺序输出。作业二:魔兽世界之一描述:魔兽世界的西面是红魔军的司令部,东面是蓝魔军的司令部。两军的司令部都会制造武士。武士一共有dragon、ninja、iceman、lion、wolf五种。每种武士都有编号、生命值、攻击力这三种属性。

双方的武士编号都是从1开始计算。红方制造出来的第n个武士,编号就是n。同样,蓝方制造出来的第n个武士,编号也是n。武士在刚降生的时候有一个生命值。在每个整点,双方的司令部中各有一个武士降生。红方司令部按照iceman、lion、wolf、ninja、dragon的顺序循环制造武士。蓝方司令部按照lion、dragon、ninja、iceman、wolf的顺序循环制造武士。制造武士需要生命元。制造一个初始生命值为m的武士,司令部中的生命元就要减少m个。如果司令部中的生命元不足以制造某个按顺序应该制造的武士,那么司令部就试图制造下一个。如果所有武士都不能制造了,则司令部停止制造武士。给定一个时间,和双方司令部的初始生命元数目,要求你将从0点0分开始到双方司令部停止制造武士为止的所有事件按顺序输出。作业二:魔兽世界之一作业二:魔兽世界之一1写出下面程序的运行结果解析:return返回时,产生临时变量,调用拷贝构造函数,函数完全返回后,临时变量销毁,n减小41

验证:插入print语句类和对象的基本概念—作业三2写出下面程序的运行结果

解析:构造函数和复制构造函数的调用注意区分:Sampleb=a;d=a;切记:不同的编译选项可能会影响程序结果eg.Realsevs.Debug建议:赋值构造函数参数使用const.9不优化:22优化:205

类和对象的基本概念—作业三Returnvalueoptimization原始版本原始版本实现伪码优化版本实现伪码ReturnvalueoptimizationOptionsgcc-fno-elide-constructorsVisualC++/Od/O2扩展阅读:NamedReturnValueOptimizationinVisualC++2005Returnvalueoptimization(wikipedia)2写出下面程序的运行结果

解析:构造函数和复制构造函数的调用注意区分:Sampleb=a;d=a;切记:不同的编译选项可能会影响程序结果eg.Realsevs.Debug建议:赋值构造函数参数使用const.9不优化:22优化:205

类和对象的基本概念—作业三3程序输出结果如下,请填空classA{public: intval; A(____________){val=n;}; ___________GetObj(){ return________; }};main(){ Aa;cout<<a.val<<endl;0 a.GetObj()=5; cout<<a.val<<endl;//修改了val5}(intn=0)int&GetObj(){

returnval;}或者A&GetObj(){

return*this;}类和对象的基本概念—作业三自动类型转换之构造函数转换自动类型转换:如果编译器看到一个表达式或函数调用了一个不合适的类型,它经常会将当前类型转到所需要的类型。构造函数转换:如果一个构造函数函数能把另一类型对象(或引用)作为它的单个参数,那么这个构造函数允许编译器执行自动类型转换。4程序输出结果如下,请填空3+4i5+6i补足Complex类的成员函数,不能增加成员变量classComplex{private: doubler,i;public: voidPrint(){cout<<r<<"+"<<i<<"i"<<endl;}};intmain(){ Complexa; a="3+4i"; a.Print(); a="5+6i"; a.Print(); }类和对象的基本概念—作业三构造函数Complex(){};Complex(constchar*a){

…}另一种思路重载赋值操作符Complex&operator=(constchar*a){

…}演示类和对象的基本概念—作业三Print()函数限制了只做正数答案只是参考完整的Complex类还需要完善5程序输出结果如下,请填空10补足Sample类的成员函数,不能增加成员变量classSample{ public: intv; Sample(intn):v(n){};};main(){ Samplea(5); Sampleb=a; cout<<b.v;}Sample(constSample&x){v=2*x.v;}类和对象的基本概念—作业三6程序输出结果如下,请填空ThisHello补足MyString类的成员函数,不能增加成员变量classMyString{ char*p;public: MyString(char*s){ p=newchar[strlen(s)+1]; strcpy(p,s); } ~MyString(){delete[]p;} constchar*c_str(){returnp;}};main(){ MyStrings1("This"),s2=s1; s2.Copy("Hello"); cout<<s1.c_str()<<endl<<s2.c_str();}类和对象的基本概念—作业三补足成员函数voidCopy(char*s){ delete[]p; p=newchar[strlen(s)+1]; strcpy(p,s);}MyString(MyString&o){ p=newchar[strlen(o.p)+1]; strcpy(p,o.p);}类和对象的基本概念—作业三7程序输出结果如下,请填空5,55,5classBase{public: intk; Base(intn):k(n){}};classBig{public: intv; Baseb; Big_____________{} Big_____________{}};main(){ Biga1(5); Biga2=a1; cout<<a1.v<<","<<a1.b.k<<endl; cout<<a2.v<<","<<a2.b.k<<endl;}Big(intn):v(n),b(n){}Big(constBig&x):v(x.v),b(x.b.k){}类和对象的基本概念—作业三1程序输出结果如下,请填空4,1请写出被隐藏的部分,MyInt的成员函数里不允许使用静态变量classMyInt{ intnVal; public: MyInt(intn){nVal=n;} intReturnVal(){returnnVal;} ….};main(){ MyIntobjInt(10); objInt-2-1-3; cout<<objInt.ReturnVal(); cout<<","; objInt-2-1; cout<<objInt.ReturnVal();}MyInt&operator-(intx){nVal-=x; return*this;}运算符重载—作业三2程序输出结果如下,请填空(4,5)(7,8)classPoint{private: intx; inty;public: Point(intx_,inty_):x(x_),y(y_){};_____;};_____operator<<(_____,constPoint&p){_____; return______;}main(){cout<<Point(4,5)<<Point(7,8);}运算符重载—作业三classPoint{private: intx; inty;public: Point(intx_,inty_):x(x_),y(y_){};_____;};_____operator<<(_____,constPoint&p){_____; return______;}friendostream&operator

<<(ostream&o,constPoint&p);ostream&operator<<(ostream&o,constPoint&p)o<<"("<<p.x<<","<<p.y<<")"

<<endl;o运算符重载—作业三3写一个二维数组类Array2,使得下面程序的输出结果是:0,1,2,3,4,5,6,7,8,9,10,11next0,1,2,3,4,5,6,7,8,9,10,11运算符重载—作业三usingstd::cout;usingstd::endl;intmain(){Array2a(3,4);inti,j;for(i=0;i<3;i++)for(j=0;j<4;j++) a[i][j]=i*4+j;for(i=0;i<3;i++){for(j=0;j<4;j++){ cout<<a(i,j)<<","; }cout<<endl;}cout<<"next"<<endl;Array2b;b=a;for(i=0;i<3;i++){for(j=0;j<4;j++){ cout<<b[i][j]<<","; }cout<<endl;}return0;}运算符重载—作业三有哪些操作?内部如何实现?运算符重载—作业三注:重载的实际上是第二维的[],第一维的[]直接调用int型一维数组的定义运算符重载—作业三第二种解法:4程序输出结果如下,写一个HugeInt类3)100004)100005)100016)10006运算符重载—作业三有多少人没有把代码编译运行就提交了?我是编译器?voidmain(){ CHugeInta CHugeIntd(9999);+111112; CHugeInttemp2=111112+ cout<<"1)"<<temp<<endl; cout<<"2)"<<temp2<<endl; cout<<"3)"<<++d<<endl;

cout<<"4)"<<d++<<endl; cout<<"5)"<<d<<endl; d+=5; cout<<"6)"<<d<<endl; cout<<"7)"<<d+temp;}运算符重载—作业三Again:标准答案只是参考,同样存在问题1写一个Mystring类,使得程序输出结果如下:

1.abcd-efgh-abcd-

2.abcd-

3.

4.abcd-efgh-

5.efgh-

6.c

7.abcd-

8.ijAl-

9.ijAl-mnop

10.qrst-abcd-

11.abcd-qrst-abcd-uvwxyz

about

big

me

take

abcd

qrst-abcd-继承和多态—作业四#include<iostream>#include<cstring>usingnamespacestd;classMyString{public:char*p;MyString()//构造函数

{p=NULL;}MyString(char*t)//构造函数{p=newchar[strlen(t)+1];strcpy(p,t);}MyString(constMyString&s)//复制构造函数{p=newchar[strlen(s.p)+1];strcpy(p,s.p);}Mystring类(1)继承和多态—作业四~MyString()//析构函数{if(p)delete[]p;}MyStringoperator+(constMyString&s)//+号重载,这里表示//两个MyString类型相加的情况{char*q;q=newchar[strlen(p)+strlen(s.p)+1];strcpy(q,p);strcat(q,s.p);MyStringtemp(q);delete[]q;returntemp;}Mystring类(2)继承和多态—作业四

MyStringoperator+(constchar*s)//+号重载,这里表示//MyString类型+字符串的情形

{char*q;q=newchar[strlen(p)+strlen(s)+1];strcpy(q,p);strcat(q,s);MyStringtemp(q);delete[]q;returntemp;}MyString&operator=(constMyString&s)//赋值号重载

{if(p!=NULL){delete[]p;}p=newchar[strlen(s.p)+1];strcpy(p,s.p);return*this;}0Mystring类(3)继承和多态—作业四char&operator[](intn)//[]号重载

{returnp[n];}MyString&operator+=(char*s)//+=号重载

{char*q;q=newchar[strlen(p)+1];strcpy(q,p);if(p!=NULL){delete[]p;}p=newchar[strlen(p)+strlen(s)+1];strcpy(p,q);strcat(p,s);delete[]q;return*this;}

Mystring类(4)继承和多态—作业四MyStringoperator()(inti,intn){//()重载 char*q;q=newchar[n+1];strncpy(q,p+i,n);q[n]='\0';MyStringtemp(q);delete[]q;returntemp;}};ostream&operator<<(ostream&o,constMyString&s)//<<号重载{o<<s.p;returno;}MyStringoperator+(char*s,constMyString&t)//+号重载,这里是字符串+MyString的情形{charq[100];strcpy(q,s);strcat(q,t.p);returnMyString(q);}Mystring类(5)继承和多态—作业四//<,==,>号的重载intoperator<(constMyString&s1,constMyString&s2){if(strcmp(s1.p,s2.p)<0){return1;}else{return0;}}intoperator==(constMyString&s1,constMyString&s2){if(!strcmp(s1.p,s2.p)){return1;}else{return0;}}intoperator>(constMyString&s1,constMyString&s2){if(strcmp(s1.p,s2.p)>0){return1;}else{return0;}}Mystring类(6)继承和多态—作业四2从string类派生的写法classMyString:publicstring{public: MyString():string(){} MyString(constchar*s):string(s){} MyString(conststring&s):string(s){} MyStringoperator()(ints,intl) { returnthis->substr(s,l); }};Mystring类(7)继承和多态—作业四作业六:魔兽世界之二两军的司令部都会制造武士。武士一共有dragon、ninja、iceman、lion、wolf五种。每种武士都有编号、生命值这两种属性。

有的武士可以拥有武器。武器有三种,sword,bomb,和arrow,编号分别为0,1,2。不同的武士有不同的特点。dragon可以拥有一件武器。编号为n的dragon降生时即获得编号为n%3的武器。dragon还有“士气”这个属性,是个浮点数,其值为它降生后其司令部剩余生命元的数量除以造dragon所需的生命元数量。ninjia可以拥有两件武器。编号为n的ninjia降生时即获得编号为n%3和(n+1)%3的武器。iceman有一件武器。编号为n的iceman降生时即获得编号为n%3的武器。lion有“忠诚度”这个属性,其值等于它降生后其司令部剩余生命元的数目。wolf没特点。请注意,在以后的题目里,武士的士气,生命值,忠诚度在其生存期间都可能发生变化,都有作用,武士手中的武器随着使用攻击力也会发生变化。作业六:魔兽世界之二作业六:魔兽世界之二问题没使用类把类当全局变量,只用来保存数据类设计得不好,结构层次不清晰只有很少几位同学的作业达到要求希望找点时间对照参考答案多思考1写出下面程序的运行结果classB{private:intnBVal;public:voidPrint(){cout<<"nBVal="<<nBVal <<endl;}voidFun(){cout<<"B::Fun"<<endl;}B(intn){ nBVal=n;}};classD:publicB{private:intnDVal;public:voidPrint(){B::Print();cout<<"nDVal="<<nDVal <<endl;}D(intn):B(3*n){nDVal=n;}voidFun(){cout<<"D::Fun"<<endl;}};继承和多态—作业六main(){B*pb; D*pd;Dd(4); d.Fun();pb=newB(2); pd=newD(8);pb->Fun();pd->Fun();pb->Print();pd->Print();pb=&d;pb->Fun();pb->Print();}D::FunB::FunD::FunnBVal=2nBVal=24nDVal=8B::FunnBVal=12继承和多态—作业六2写出下面程序的运行结果classA{public: A(){} virtualvoidfunc() {cout<<"A::func"<<endl;} ~A(){} virtualvoidfund() {cout<<"A::fund"<<endl;}};classB:publicA{public: B(){func();} voidfun(){func();} ~B(){fund();}};classC:publicB{public: C(){} voidfunc() {cout<<"C::func"<<endl;} ~C(){fund(); } voidfund() {cout<<"C::fund"<<endl;}};main(){ Cc;}继承和多态—作业六A::funcC::fundA::fund3程序输出

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论