2015级C++第8周项目 数组和指针

时间:2022-02-14 18:50:07

【项目1 - 数组作数据成员】参考解答
  下面是设计好的一个工资类(Salary):

class Salary  
{
public:
void set_salarys( );//输入职工工资(输入-1标志着工资输入结束),工资保存到salary数组中,实际人数保存到number中;
void add_salarys(int x); //给每个人涨x元工资
void sort_salarys(); //对工资由大到小排序
void show_salarys( ); //显示工资信息
private:
double salarys[50]; //多人的工资
int number; //实际人数
};

  (1)实现Salary类中的成员函数,在main函数定义Salary类的对象,输入工资,再给每个人涨500元工资,排序后工资数据,然后输出结果。
  (2)手工输入工资?!太让人不能忍受了。现给出包含了不足500个职工工资的文件salary.txt(下载),增加一个成员函数,用于从文件中读出数据,再增加一个成员函数,将排序后结果保存到一个文件中。编写main函数,测试你扩充的功能。
  (3)用多文件的方式组织最后的程序。

【项目2-用对象数组操作长方柱类】参考解答
  编写基于对象的程序,求5个长方柱的体积和表面积。长方柱类Bulk的数据成员包括长(length)、宽(width)、高(heigth)等。
  对照已经给出的代码,要做的工作及要求有:

  • 需要你定义长方柱类,代码中已经给出由5个长方柱对象构成的对象数组b;
  • B数组中的前3个对象b[0]、b[1]、b[2]直接参数初始了,需要定义构造函数,而初始化中,各对象提供的参数数目不同,需要有默认参数的构造函数(未给出的参数默认为1.0)
  • 第4个对象b[3]用默认构造函数初始化;
  • 设计成员函数output,在main中调用输出这5个长方柱的体积和表面积;
int main()  
{
Bulk b[5]={Bulk(2.3,4.5,6.7),Bulk(1.5,3.4),Bulk(10.5)};
b[4].get_value();
//下面分别输出这5个长方柱的体积和表面积
}

【项目3-指向学生类的指针】参考解答
  设计一个学生类Student,数据成员包括学号(num)和成绩(score),成员函数根据需要自行设计(建议配备需要的set、get函数,以及必要的输入或输出,给出的代码中也可以找到需要成员函数的线索)。在main函数中,要做到
   建立一个对象数组,通过初始化,设置5个学生的数据;
   用指针指向数组首元素,输出第1、3、5个学生的信息;
   设计一个函数int max(Student *arr);,用指向对象的指针作函数参数,在max函数中找出5个学生中成绩最高者,并返回值其学号。
  下面给出部分程序,在此基础上完成项目:

class Student 
{

public:
……
private:
int num; //学号
double score; //成绩
};

//max函数返回arr指向的对象数组中的最高成绩者的学号(max并不是成员函数,而是普通函数)
int max(Student *arr);

int main()
{
Student stud[5]=
{
Student(101,78.5),Student(102,85.5),Student(103,100),
Student(104,98.5),Student(105,95.5)
};
//输出第1、3、5个学生的信息(用循环语句)
……
//输出成绩最高者的学号
cout<<"5个学生中成绩最高者的学号为: "<<max(stud);//调用函数显示最高成绩
return 0;
}

【项目4-游戏中的角色类增强版】
  (4-1)阅读博文“C++游戏系列4:杀伤距离有限制”(链接…),回答下面的问题:
   Role类的数据成员中,有哪些成员上类的对象?
   观察Role类的构造函数,说出:若某类的“数据成员为别的类的对象”,其构造函数定义时的要点有什么?
   仔细研读Role::attack成员函数,说出攻击行为的条件,以及攻击行为中要做的事情。
   直接Copy博文中的程序,建立多文件项目,运行程序,并修改main函数,观察运行结果的变化(本项目测试不充分,欢迎写评论报BUG)。


  (4-2)在上面已经建好的项目基础上,将Weapon类的数据成员改为数组,以支持一个角色可以带多件武器的需求,为此,在原类基础上,改造及增加的数据成员和成员函数至少包括:

class Role
{
public:
……
void changeWeapon(int wno); //换手中的武器
private:
……
Weapon weapons[N]; //武器,N为定义的常变量
int weaponNum; //武器数目
int holdWeapon; //现在手持哪一件武器(用武器数组的下标做标识)。
//0 ≤ holdWeapon < weaponNum
//初始时为空手,空手时holdWeapon值为-1,将-1定义为常变量为宜)
};

提示:
其他成员函数可能也需要修改(如构造函数,用于输出的成员函数等),请根据需要改动。

参考解答  


  (4-3)以上的项目,用于支持游戏的类大致已经完善,为让游戏能够多个角色参与进来,不能够依靠定义有限个Role类的对象,通过代码玩,现在想做一个游戏的演示,让任意多个对象,自动展开PK。建议的策略有(可以有你自己的策略):
   定义Role类的数组,表示参与游戏的角色;
   角色可能会持有的武器,由一个文件weapon.txt提供,包括武器名,杀伤力及杀伤半径(可以下载…,还可以自己手工建这个文件)
   定义对Role类数组中对象设置初始值,包括每个角色类对象的名称、血量、位置、武器等,都可以由产生的随机数确定
   由随机数确定每一轮游戏中,要行动的角色,以及要执行的行动(移动、换武器、攻击、吃等),通过循环,组织起多轮的游戏。轮数太多时,用文件保存每一轮发生的情节,你通过看文件,知道游戏的过程。

参考解答