C++综合实验四

  • 格式:doc
  • 大小:228.00 KB
  • 文档页数:36

《程序设计语言》实验报告 实验序号: 04 实验项目名称:面向对象的程序设计 学 号 姓 名 专业、班 实验地点 文波楼219 指导教师 时间 2012/12/19

一、实验目的及要求 1. 掌握类和对象的定义 2. 掌握面向对象的程序设计方法 3. 掌握类的继承与派生 4. 掌握基类和虚函数的用法 5. 掌握运算符重载的方法 6. 掌握I/O流类的操作

二、实验设备(环境)及要求 1. 软件需求:Visual C++ 2. 硬件需求: Pentium III 450以上的CPU处理器,64MB以上的内存,200MB的自由硬盘空间

三、实验内容与步骤 1. 设计员工类Employee(静态数据成员)分 a) 题目描述 b) 定义一个描述员工(Employee)基本情况的类,数据成员包括编号(num)、姓名(name)、性别(sex)、工资(wage)、人数(count)、总工资(totalWage)。其中姓名定义为长度为18的字符数组,性别定义为长度为3的字符数组,其它数据类型为整型,总工资和人数为静态数据成员,函数成员包括构造函数、显示基本函数(ShowBase)和显示静态数据函数(ShowStatic),其中构造函数由已知参数编号(nu),姓名(nm)、性别(sx)和工资(wg)构造对象,显示基本数据函数用于显示学生的编号、姓名、性别和工资,显示静态数据函数为静态成员函数,用于显示人数和总工资;要求所有数据成员为protected访问权限,所有成员函数为public访问权限,在主函数中定义若干个员工对象,分别显示员工基本信息,以及显示员工人数和总工资。 c) 输入描述 d) 第一行要求输入一个小于10的数字n,表示即将录入的员工数量,换行后从键盘录入每个员工的数据,依次是编号,姓名,性别,工资,每个员工占一行 e) 输出描述 f) 第一行显示“人数:”,第二行显示“总工资:”,后面分别显示每个员工的信息,每个员工之间空一行 g) 样例输入 h) 2 i) 1008 张三 男 2500 j) 1009 李四 女 2600 k) 样例输出 人数:2 总工资:5100元 个人基本信息: 编号:1008 姓名:张三 性别:男 工资:2500

个人基本信息: 编号:1009 姓名:李四 性别:女 工资:2600 2. 日期类Date的设计(构造函数) a) 题目描述 b) 定义一个日期类Date,能提供和设置由年、月、日组成的日期。编写程序,提供类的构造函数用于根据输入初始化日期类Date的对象;提供函数用于输出日期类对象的日期,按照如下格式输出:yyyy-mm-dd c) 输入描述 d) 初始化日期类Date对象的数据,分别是年、月、日。程序有多个测试用例。 e) 输出描述 f) 按照指定格式输出的日期。 g) 样例输入 2010 12 30 2012 18 30 2012 6 10 h) 样例输出 2010-12-30 ERROR DATE 2012-06-10 3. 复数类Imaginary(友元函数) a) 题目描述 b) 根据以下主函数的功能来设计复数类Imaginary,使其能正确运行。类Imaginary中应该具有描述复数的实部和虚部的私有数据成员a和b,还有相应的构造函数和按照“a±bi”格式显示复数的成员函数print()。设计类Imaginary的2个友元函数分别进行复数的加、减运算,并在这些函数调用类Imaginary的成员函数print()显示结果。 int main() { float x1,y1,x2,y2; c) cin>>x1>>y1>>x2>>y2; d) 样例输入 3 Rect 0 0 2 4 Circle 0 0 3 Triangle 0 0 2 2 2 0 e) 样例输出 4. 简单高精度计算 a) 题目描述 b) 整型是经常使用的数据类型, 常用的32位整数表示精度不超过10位十进制整数。在很多运算中往往需要更高的精度,这时就必须自己编程突破系统已经定义数据类型的限制。 c) 一个可行的方法是采用一个数组表示一个大的整数,每一个数组元素表示这个大整数的一位。例如定义一个数组a[30],其各个元素分别为:9,8,7,6,5,4,3,2,1,0,9,8,7,6,5,4,3,2,1,0,9,8,7,6,5,4,3,2,1,0,则可以用来表示30位十进制整数0。 d) 请你编写程序(不考虑负数): i. 定义一个非负整数类BigInteger,在类中使用动态分配存储空间来存放整数的各个数位,并实现非负大整数的 1. 初始化、复制、赋值、输入、显示; 2. 关系运算 3. 加法、减法(求两个操作数之差的绝对值,结果非负)、乘法运算; ii. 编写主程序利用非负整数类BigInteger完成各类运算,并输出结果 e) 输入描述 f) 输入有多组样例,每组样例由三行组成,第一行为操作数a,第二行为运算符op,第三行为操作数b。其中a,b均为位数少于1000位的非负整数,op为下列运算之一:+、-、*、==、!=、>、>=、<、<=(其中减法定义为求两个操作数之差的绝对值) g) 输出描述 h) 计算a op b的结果(算术运算的结果少于1000位),针对每组输入样例输出一行。输出的算术运算结果要符合一般的数学表示习惯(例如,最高有效位的左边不能有前导的’0’),输出的关系运算结果以1表示真,0表示假。 i) 样例输入 8450 + 78671

- 9578 700031 * 005 47824 == 2326 0167682 != 221 09 > 061173 28739 >= 4038774 03762 < 92 8570 <= 0 j) 样例输出 1 27 6966444 0 1 0 1 1 0 四、实验结果与数据处理 第一题 2012-12-13howBase(); return 0; delete []m; }

第二题 //文件名:cc //功能:日期类Date的设计(构造函数) //完成时间:2012-12-13 #include #include using namespace std; class date { protected: int y,m,d; static int x; public: date(int y,int m,int d); date(){}; ~date(){}; void display(int y,int m,int d); static int getx(); }; int date::x=1; int date::getx() { return x; } void date::display(int y,int m,int d) { cout<} date::date(int y,int m,int d) { if(m>12) { cout<<"ERROR DATE"31) { cout<<"ERROR DATE"<} if(m==2) { if(y%4==0&&y%100!=0||y%400==0) { if(d>29) { cout<<"ERROR DATE"<} else { if(d>28) { cout<<"ERROR DATE"<} } if(m==4||m==6||m==9||m==11) { if(d>30) { cout<<"ERROR DATE"<} }

int main() { int y,m,d; int k; cin>>y>>m>>d; date A; date(y,m,d); k=(); if(k) (y,m,d); return 0; }

第三题 //文件名:g4 //功能:复数类Imaginary(友元函数) //完成时间:2012-12-14 #include using namespace std; class Imaginary { private: float a,b;