《面向对象与C++》上机作业6.docx

上传人:b****5 文档编号:7889176 上传时间:2023-01-27 格式:DOCX 页数:23 大小:59.44KB
下载 相关 举报
《面向对象与C++》上机作业6.docx_第1页
第1页 / 共23页
《面向对象与C++》上机作业6.docx_第2页
第2页 / 共23页
《面向对象与C++》上机作业6.docx_第3页
第3页 / 共23页
《面向对象与C++》上机作业6.docx_第4页
第4页 / 共23页
《面向对象与C++》上机作业6.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

《面向对象与C++》上机作业6.docx

《《面向对象与C++》上机作业6.docx》由会员分享,可在线阅读,更多相关《《面向对象与C++》上机作业6.docx(23页珍藏版)》请在冰豆网上搜索。

《面向对象与C++》上机作业6.docx

《面向对象与C++》上机作业6

教材P251

7-5.声明一个基类Shape,在此基础上派生出Rectangle和Circle,二者都有GetArea()函数计算对象的面积。

使用Rectangle类创建一个派生类Square。

classShape{

public:

doubleGetArea();

};

classRectangle:

publicShape{

};

classCircle:

publicShape{

};

classSquare:

publicShape{

};

7-10.声明一个object类,有数据成员weight及相应得存取操作函数,由此派生出box类,增加数据成员height和width及相应得存取操作函数,声明一个box对象,观察构造函数和析构函数的调用顺序。

7-11.声明一个基类BaseClass,从它派生出类DerivedCalss,BaseClass有成员fn1()、fn2(),DerivedClass也有成员函数fn1()、fn2()。

在主函数中声明DerivedClass,分别用DerivedClass的对象以及BaseClass和DerivedClass的指针来调用fn1()、fn2(),观察运行结果。

#include

#include

#include

usingnamespacestd;

classBaseClass

{

public:

voidfun1(){

cout<<"BaseClass.fun1被调用"<

}

voidfun2(){

cout<<"BaseClass.fun2被调用"<

}

};

classDerivedCalss:

publicBaseClass

{

public:

voidfun1(){

cout<<"DerivedCalss.fun1被调用"<

}

voidfun2(){

cout<<"DerivedCalss.fun2被调用"<

}

};

intmain()

{

DerivedCalssdc;

dc.fun1();

dc.fun2();

DerivedCalss*f;

f->fun1();

f->fun2();

BaseClass*d;

d->fun1();

d->fun2();

}

编程题#1:

线性表类

仿照示例程序08_05,用数组实现线性表类array,从array中派生子类stack和queue,实现出栈、入栈、出队列、入队列等操作

#include

usingnamespacestd;

classArray{

public:

inta[1000];

inthead;

inttail;

Array(){

head=0;

tail=0;

}

boolempty();

voidclear();

voidprint();

};

boolArray:

:

empty(){

returnhead==tail;

}

voidArray:

:

clear(){

head=tail=0;

}

voidArray:

:

print(){

for(inti=head;i

cout<

}

cout<<"\n";

}

classStack:

publicArray{

public:

Stack(){};

intPop();//弹出栈顶元素

voidPush(intvalue);//压栈

};

intStack:

:

Pop(){

if(empty()){

cout<<"栈中无元素,弹出失败!

\n";

return0;

}

else

{

returna[--tail];

}

}

voidStack:

:

Push(intvalue){

if(tail==999){

cout<<"栈元素满了,添加失败!

\n";

}

else{

a[tail++]=value;

}

}

classQueue:

publicArray{

public:

Queue(){};

intOutQueue();//取出队头元素

voidInQueue(intvalue);//加入新元素到队尾

};

intQueue:

:

OutQueue(){

if(empty()){

cout<<"队列中无元素,出队列失败!

\n";

return0;

}

else{

returna[head++];

}

}

voidQueue:

:

InQueue(intvalue){

if(tail==999){

cout<<"队列元素满了,添加失败!

\n";

}

else{

a[tail++]=value;

}

}

intmain()

{

Stacks;

Queueq;

for(inti=1;i<=10;i++)//1到10放入栈和队列

{

s.Push(i);

q.InQueue(i);

}

s.print();

q.print();

cout<<"第一次出栈元素:

"<

cout<<"第一次出队列元素:

"<

cout<<"第二次出栈元素:

"<

cout<<"第二次出队列元素:

"<

return0;

}

编程题#2:

魔兽世界之二:

装备

描述

魔兽世界的西面是红魔军的司令部,东面是蓝魔军的司令部。

两个司令部之间是依次排列的若干城市。

红司令部,City1,City2,……,Cityn,蓝司令部

两军的司令部都会制造武士。

武士一共有dragon、ninja、iceman、lion、wolf五种。

每种武士都有编号、生命值这两种属性。

有的武士可以拥有武器。

武器有三种,sword,bomb,和arrow,编号分别为0,1,2。

双方的武士编号都是从1开始计算。

红方制造出来的第n个武士,编号就是n。

同样,蓝方制造出来的第n个武士,编号也是n。

不同的武士有不同的特点。

dragon可以拥有一件武器。

编号为n的dragon降生时即获得编号为n%3的武器。

dragon还有“士气”这个属性,是个浮点数,其值为它降生后其司令部剩余生命元的数量除以造dragon所需的生命元数量。

ninjia可以拥有两件武器。

编号为n的ninjia降生时即获得编号为n%3和(n+1)%3的武器。

iceman有一件武器。

编号为n的iceman降生时即获得编号为n%3的武器。

lion有“忠诚度”这个属性,其值等于它降生后其司令部剩余生命元的数目。

wolf没特点。

请注意,在以后的题目里,武士的士气,生命值,忠诚度在其生存期间都可能发生变化,都有作用,武士手中的武器随着使用攻击力也会发生变化。

武士在刚降生的时候有一个生命值。

在每个整点,双方的司令部中各有一个武士降生。

红方司令部按照iceman、lion、wolf、ninja、dragon的顺序循环制造武士。

蓝方司令部按照lion、dragon、ninja、iceman、wolf的顺序循环制造武士。

制造武士需要生命元。

制造一个初始生命值为m的武士,司令部中的生命元就要减少m个。

如果司令部中的生命元不足以制造某个按顺序应该制造的武士,那么司令部就试图制造下一个。

如果所有武士都不能制造了,则司令部停止制造武士。

给定一个时间,和双方司令部的初始生命元数目,要求你将从0点0分开始到双方司令部停止制造武士为止的所有事件按顺序输出。

一共有两种事件,其对应的输出样例如下:

1)武士降生

输出样例:

004bluelion5bornwithstrength5,2lioninredheadquarter

表示在4点整,编号为5的蓝魔lion武士降生,它降生时生命值为5,降生后蓝魔司令部里共有2个lion武士。

(为简单起见,不考虑单词的复数形式)注意,每制造出一个新的武士,都要输出此时司令部里共有多少个该种武士。

如果造出的是dragon,那么还要输出一行,例:

Ithasaarrow,andit'smoraleis23.34

表示该dragon降生时得到了arrow,其士气是23.34(为简单起见,本题中arrow前面的冠词用a,不用an,士气精确到小数点后面2位,四舍五入)

如果造出的是ninjia,那么还要输出一行,例:

Ithasabombandaarrow

表示该ninjia降生时得到了bomb和arrow。

如果造出的是iceman,那么还要输出一行,例:

Ithasasword

表示该iceman降生时得到了sword。

如果造出的是lion,那么还要输出一行,例:

It'sloyaltyis24

表示该lion降生时的忠诚度是24。

2)司令部停止制造武士

输出样例:

010redheadquarterstopsmakingwarriors

表示在10点整,红方司令部停止制造武士

输出事件时:

首先按时间顺序输出;

同一时间发生的事件,先输出红司令部的,再输出蓝司令部的。

输入

第一行是一个整数,代表测试数据组数。

每组测试数据共两行。

第一行,一个整数M。

其含义为:

每个司令部一开始都有M个生命元(1<=M<=10000)

第二行:

五个整数,依次是dragon、ninja、iceman、lion、wolf的初始生命值。

它们都大于0小于等于10000

输出

对每组测试数据,要求输出从0时0分开始,到双方司令部都停止制造武士为止的所有事件。

对每组测试数据,首先输出“Case:

n"n是测试数据的编号,从1开始

接下来按恰当的顺序和格式输出所有事件。

每个事件都以事件发生的时间开头,时间以小时为单位,有三位。

样例输入

1

20

34567

样例输出

Case:

1

000rediceman1bornwithstrength5,1icemaninredheadquarter

Ithasabomb

000bluelion1bornwithstrength6,1lioninblueheadquarter

It'sloyaltyis14

001redlion2bornwithstrength6,1lioninredheadquarter

It'sloyaltyis9

001bluedragon2bornwithstrength3,1dragoninblueheadquarter

Ithasaarrow,andit'smoraleis3.67

002redwolf3bornwithstrength7,1wolfinredheadquarter

002blueninja3bornwithstrength4,1ninjainblueheadquarter

Ithasaswordandabomb

003redheadquarterstopsmakingwarriors

003blueiceman4bornwithstrength5,1icemaninblueheadquarter

Ithasabomb

004blueheadquarterstopsmakingwarriors

#include

#include//int转string用的

#include

#include

usingnamespacestd;

intlifevalue[100][5];//存各组数据各个武士生命值的

intlifeofHeadquarter[100];//存放司令部的生命元

classWeapon{

public:

intnumber;

stringname;

intaggressivity;

Weapon(){}

Weapon(intag,stringnm,intnum){

aggressivity=ag;

number=num;

name=nm;

}

};

classSword:

publicWeapon

{

public:

Sword(){

name="sword";

number=0;

aggressivity=0;

}

Sword(intn):

Weapon(n,"sword",0){}

};

classBomb:

publicWeapon

{

public:

Bomb(){

name="bomb";

number=1;

aggressivity=0;

}

Bomb(intn):

Weapon(n,"bomb",1){}

};

classArrow:

publicWeapon

{

public:

Arrow(){

name="arrow";

number=2;

aggressivity=0;

}

Arrow(intn):

Weapon(n,"arrow",2){}

};

Weaponweapon_list[3];

classWarrior

{

public:

stringname;//名字

intnumber;//编号

intlife_value;//生命值

intaggressivity;//攻击力

staticintwarrior_number;

Warrior(){}

Warrior(stringn,intnum,intv,inta=0){

warrior_number++;//自增作为编号

name=n;

number=num;

life_value=v;

aggressivity=a;

}

};

intWarrior:

:

warrior_number=0;

classWarrior_dragon:

publicWarrior

{

public:

floatmorale;//士气

Weaponweapon1;

Warrior_dragon(stringn,intnum,intv,inta):

Warrior(n,num,v,a){}

Warrior_dragon(stringn,intnum,intv,inta,floatml):

Warrior(n,num,v,a){

morale=ml;

}

};

classWarrior_ninja:

publicWarrior

{

public:

Weaponweapon1;

Weaponweapon2;

Warrior_ninja(stringn,intnum,intv,inta):

Warrior(n,num,v,a){}

};

classWarrior_iceman:

publicWarrior

{

public:

Weaponweapon1;

Warrior_iceman(stringn,intnum,intv,inta):

Warrior(n,num,v,a){}

};

classWarrior_lion:

publicWarrior

{

public:

intloyalty;

Warrior_lion(stringn,intnum,intv,inta):

Warrior(n,num,v,a){

loyalty=0;

}

Warrior_lion(stringn,intnum,intv,inta,intly):

Warrior(n,num,v,a){

loyalty=ly;

}

};

classWarrior_wolf:

publicWarrior

{

public:

Warrior_wolf(stringn,intnum,intv,inta):

Warrior(n,num,v,a){}

};

classCity

{

public:

intnumber;//编号0即为红司令部,编号1000000则为蓝司令部

intlife_value;

listall_warriors;

City(){}

City(intn,intlv){

number=n;

life_value=lv;

}

};

classHeadquarters:

publicCity

{

public:

stringmake_order[5];

Headquarters(){}

Headquarters(intn,intlv):

City(n,lv){}//n为编号

intmake_warrior(inttime,intgroup);

};

stringInt_To_String(intn)

{

ostringstreamstream;

stream<

returnstream.str();

}

intHeadquarters:

:

make_warrior(inttime,intgroup)

{

intflag=0;//标记司令部是否能制造该武士

stringstart=Int_To_String(time);//要输出的字符串

start.insert(0,3-start.length(),'0');//把数值变成004样的字符串

stringheadquarter_name;//司令部名字

if(number==0)headquarter_name="red";

elseif(number==1000000)headquarter_name="blue";

start.append(headquarter_name);

intindex=time%5;

for(inti=0;i<5;i++)

{

stringwarrior_type=make_order[index];

if(warrior_type=="dragon"&&life_value>=lifevalue[group][0])

{

flag=1;

life_value-=lifevalue[group][0];

Warrior_dragondragon("dragon",time+1,lifevalue[group][0],0);//实例化一武士(名,编号,生命,攻击力)

dragon.morale=(float)life_value/lifevalue[group][0];

dragon.weapon1=weapon_list[Warrior:

:

warrior_number%3];

all_warriors.push_back(dragon);//把武士放到武士总列表

intdragon_num=0;//记录总列表中总共多少此类型武士

list:

:

iteratorit;//遍历列表

for(it=all_warriors.begin();it!

=all_warriors.end();it++)

{

if((*it).name=="dragon")dragon_num++;

}

start.append("dragon");

start.append(Int_To_String(dragon.number));

start.append("bornwithstrength");

start.append(Int_To_String(lifevalue[group][0]));

start.append(",");

start.append(Int_To_String(dragon_num));

start.append("dragonin");

start.append(headquarter_name);

start.append("headquarter\n");

start.append("Ithasa");

start.append(dragon.weapon1.name);

start.append(",andit'smoraleis");

floatfl=((float)((int)((dragon.morale+0.005)*100)))/100;

stringstreamos;

os<

stringsfl=os.str();

start.append(sfl);

start.append("\n");

cout<

}

if(warrior_type=="ninja"&&life_value>=lifevalue[gr

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1