数据结构实验二
- 格式:doc
- 大小:44.50 KB
- 文档页数:4
1 实验二
(2015-9-17)
一、 实验名称:
复杂形式的对象。
二、 实验目的:
(1)掌握对象数组、对象指针的使用方法;
(2)掌握对象数组、对象指针和对象引用作为函数参数的使用方法;
(3)掌握类对象作为成员的使用方法;
(4)掌握友元的概率和使用方法;
(5)掌握静态数据成员和静态成员函数的使用方法;
(6)进一步了解C++面向对象程序设计的基本思想、基本方法和基本步骤;
三、 练习项目
1. Time类的框架定义如下:
class Time //声明Time类
{
public:
Time( int = 0, int = 0, int = 0 ); // 带默认参数的构造函数
// set functions
void setTime( int, int, int ); // 设置hour, minute, second
void setHour( int ); // 设置hour (确保数据在合理范围)
void setMinute( int ); // 设置minute (确保数据在合理范围)
void setSecond( int ); // 设置second (确保数据在合理范围)
// get functions
int getHour(); // 返回 hour
int getMinute(); // 返回 minute
int getSecond(); // 返回 second
void printUniversal(); // 按24小时格式输出时间:23:56:12
void printStandard(); // 按12小时格式输出时间:11:56:12 (PM) 或 9:23:55(AM)
private:
int hour; // 0 - 23 (24小时格式)
int minute; // 0 - 59 2 int second; // 0 - 59
}; // Timel类定义结束
(1) 按照注释的要求完成所有成员函数的定义;
(2) 在主程序中定义Time类对象,通过对象指针或引用调用上述成员函数以测试其正确性。
2.
设计一个用来表示直角坐标系的Location类,在主程序中创建类Location的两个对象A和B,要求A的坐标在第3象限,B的坐标点在第2象限,分别采用成员函数和友元函数计算给定两个坐标点之间的距离,要求按如下格式输出结果:
A(x1, y1), B(x2, y2)
Distance1=d1
Distance2=d2
其中:x1, x2, y1, y2为指定的坐标值,d1和d2为两个坐标点之间的距离。Location类框架可参考如下:
class Location //声明类Location
{
public:
Location(double,double); //构造函数
double Getx(); //成员函数,取x坐标的值
double Gety(); //成员函数,取y坐标的值
double distance1(Location&);//成员函数,求两坐标点之间的距离
friend double distance2(Location&, Location&);//友元函数,求两坐标点之间的距离
private:
double x,y;
};
3.
使用C++的string类,将5个字符串按逆转后的顺序显示出来。例如,逆转前的5个字符串是:
Germany Japan America Britain France
逆转后的顺序输出字符串是:
France Britain America Japan Germany
4.
设计一个模仿类magic来实现4*4的魔方阵。类的框架如下:
class magic //声明魔方阵类magic
{
public:
void getdata(); //输入初值成员函数
void setfirstmagic(); //设置初始魔方成员函数
int generate(); //生成最终魔方成员函数
int printmagic(); //显示魔方成员函数
private:
int m[4][4];
int step;
int first;
int sumj;
}; 3 所谓4*4的魔方阵,是指该矩阵的各行值的和等于各列值的和,并等于两对角线值的和,如:
3135259211915 17131123727291,其各行、各列以及对角线值的和都是64。
求4*4的魔方阵的一般步骤提示如下:
(1) 设置初始魔方的起始值和相邻元素之间的差值。例如上述魔方阵的初始魔方的起始值和相邻元素之间的差值分别为:first=1, step=2
(2) 设置初始魔方元素的值。例如上述魔方的初始魔方阵为:
13579111315 1719212325272931
(3) 生成最终魔方阵。方法如下:
○1求最大元素和最小元素的和sum,本例为1+31=32。
○2用32减去初始魔方阵所有对角线上元素的值,然后将结果放在原来的位置,即可求得最终的魔方阵。本例最终魔方阵为:
3135259211915 17131123727291
(4) 编写主程序,通过对象指针或引用调用上述成员函数以测试所设计的魔方类的正确性.
5.
声明一个Employee类,数据成员包括:一个long型的id,两个字符指针成员,代表职员的姓名和家庭住址,一个double数据,代表月薪。成员函数有:构造函数、析构函数、set_salary()和get_salary()代表修改和获取薪资、set_name()和get_name()代表修改和获取姓名、set_address()和get_address()代表修改和获取家庭住址,set_id()和get_id()用来修改获取当前职员的id号。在主程序中,创建对象数组调用上述函数以测试Employee类设计的正确性。Employee类的框架可参考:
class Employee //声明Employee类
{
public:
Employee(long, char*, char*, double ); // 构造函数
~Employee(); // 析构函数
// set functions
void set_id(long); // 设置id
void set_salary(double); // 设置salary
void set_name(char * ); // 设置name
void set_address(char* ); // 设置adress
// get functions
long get_id(); // 返回id
double get_salary(); // 返回 salary
char* get_name(); // 返回 name
char* get_addressSecond(); // 返回 address 4
void print(); // 打印输出Employee的相关信息
private:
long id; // 工号
char *name; // 姓名
char *address; // 家庭住址
double salary; // 月薪
}; // Employee类声明结束
6.
声明一个Student类,在该类中包括一个数据成员:score(代表课程成绩)、两个静态数据成员:total_score(代表总分),count(代表学生总人数)。成员函数有:构造函数、析构函数、account(int)用于设置分数、静态成员函数sum()返回所有学生的总成绩、静态成员函数average()返回所有学生的平均成绩、print()用于打印当前学生对象的成绩等。在主程序中,输入某班同学的成绩,并调用上述函数打印全班同学的成绩、求出全班学生的成绩之和与平均分等。Student类的框架可参考:
class Student //声明Student类
{
public:
Student(int ); // 构造函数
~Student(); // 析构函数
void account(int); // 设置分数
static int sum(); // 返回总成绩
static double average(); // 返回平均成绩
void print(); // 打印输出Student的相关信息
private:
int score; // 分数
static int total_score; // 总分
static int count; // 总人数
}; // Student类声明结束
注意:静态成员和非静态成员的初始化方式的区别。
实验要求:
(1)实验前做好预习,并写出预习报告。
(2)实验期间禁止做与实验无关的项目、以及浏览网页、打游戏等。
(3)认真完成并按时提交实验报告。