w,调用相关成员函数,输出判断结果。 程序运行结果如下:
请输入要查询的日期(年月日):2009 9 15 2009/9/15,是星期二。
12.设计一个程序通过虚函数实现不同进制整数之间的转换。
? 十进制整数转换成R进制整数的方法是除R取余。如:
(12345)10=(30071)8 12345÷8=1543...1 1543÷8=192... ...7 192÷8=24... ... ...0 24÷8=3... ... ... ...0 3÷8=0. ... ... ... ...3
? R进制整数转换成十进制整数的方法是按位权求和。如: (12345)8=(1×84+2×83+3×82+4×81+5×80)10
? R进制整数之间的相互转换可通过二进制数为媒介。
八进制整数转换为二进制数的方法是1位变3位,十六进制整数转换为二进制数的方法是1位变4位。如:
(12345)8=(001010011100101)2 (1)8=(001)2 (2)8=(010)2 (3)8=(011)2 (4)8=(100)2 (5)8=(101)2
二进制数转换为八进制整数的方法是3位变1位(不足以0补齐),转换为十六进制整数的方法是4位变1位(不足以0补齐)。如:
(001010011100101)2=(0001010011100101)2=(14E5)16 (0001)2=(1)16 (0100)2=(4)16 (1110)2=(E)16 (0101)2=(5)16
程序的具体要求如下:
(1)定义十进制整数转换成的R进制数的类DEC_R
? 保护的数据成员:
int num; //表示十进制整数
int m; //表示要转换的数的进制
char r[20]; //保存转换结果(m进制数) ? 公有的成员函数:
DEC_R(int m1,int n=0):用m1初始化进制m,用n初始化十进制整数num;
32
virtual void fun():把十进制整数转换成m进制数(求数组r); virtual void show():输出十进制整数和转换成的m进制数。
(2)定义类DEC_R的公有派生类R_DEC,把R进制整数转换成十进制数,
派生数据成员的含义不变 ? 公有的成员函数:
R_DEC(char *p,int m1):用p初始化m进制数,用m1初始化进制m,十进制数num初始化为0;
int f(int n,int k):求位权(n的k次方);
void fun():把m进制数(数组r)转换成十进制数(求num); void show():输出m进制数和转换成的十进制整数。
(3)定义类DEC_R的公有派生类R_R,实现R1进制整数和R2进制数之间
的互换,派生成员num表示已知数的进制R1,m表示未知数的进制R2,r表示媒介二进制数
? 新增私有的数据成员:
char r1[10]; //存放已知的R1进制整数
char r2[10]; //存放未知的R2进制整数(要求的数) ? 公有函数:
R_R(int m2,int m1,char *p):用m2初始化进制m,用m1初始化进制num,用p初始化r1;
int f1(int k):求基数2的位权(2的k次方);
char *f2(char s,int j):把1位R进制数(字符s)转换为j位二进制数(动态字符数组),并返回该二进制数;
void f3(char *bin,char *R2,int k):把二进制数(字符数组bin)转换为R2进制数(字符数组R2),k位转1位;
void fun():把num进制数(数组r1)转换成m进制数(求数组r2); void show():输出num进制整数和转换成的m进制数。
(4)在主函数中对定义的类进行测试。定义类DEC_R的对象d1、d2和d3,
分别把十进制数23456转换成二进制、八进制和十六进制数;定义类R_DEC的对象r1、r2和r3,分别把二进制数101101110100000、八进制数55640和十六进制数5BA0转换成十进制数;定义类R_R的对象rr1,把八进制数12345转换为十六进制数,类R_R的对象rr2,把十六进制数14E5转换为八进制数。用类DEC_R的指针p实现上述操作,体现运行的多态性。 程序运行结果如下所示:
十进制数为23456,其对应的2进制数为101101110100000 十进制数为23456,其对应的8进制数为55640 十进制数为23456,其对应的16进制数为5BA0
2进制数为101101110100000,其对应的十进制数为23456 8进制数为55640,其对应的十进制数为23456 16进制数为5BA0,其对应的十进制数为23456 8进制数为12345,其对应的16进制数为14E5
33
16进制数为14E5,其对应的8进制数为12345
13.定义如下类:
(1)类Fruit,含有一个公有虚函数 char *identify(),返回字符串“水果”; (2)类Tree,含有一个公有虚函数 char *identify(),返回字符串“树”;
(3)类Apple,由类Fruit及类Tree公有继承,含有一个公有成员函数char
*identify(),返回字符串“苹果树是水果树”;一个公有虚函数void show(),调用成员函数char *identify();
(4)定义类Pear,由类Fruit及类Tree公有继承,含有一个公有成员函数char
*identify(),返回字符串“梨树是水果树”;一个公有虚函数void show(),调用成员函数char *identify();
(5)定义类Apple_Pear,由类Apple及类Pear公有继承,含有一个公有成员
函数void show(),分别调用类Apple和类Pear的成员函数char *identify(); 定义一个函数void display(Apple *p),用指针p调用函数show(); 在主函数中,定义类Apple_Pear的对象applePear,用对象调用成员函数show(),并作为函数display的参数调用该函数。 程序执行结果如下所示:
Apple_Pear:苹果树是水果树,梨树是水果树 Apple_Pear:苹果树是水果树,梨树是水果树
14.编写电话薄管理程序。该程序是一个电话薄管理小程序,具有加入、删除、显
示和查询联系人电话号码等功能。具体要求如下:
(1) 电话薄记录按姓名排序存放,显示时每屏不超过20个记录,超过时分
屏显示;
(2) 增加记录修改功能,能选择个性用户的姓名、电话,在个性或删除之前
需要用户进一步确认,确认无误后再进行操作;
(3) 增加录入时间的显示及存储;
(4) 增加默认的查询方式,即查询时只输入姓名的首字母,所有符合这一条
件的电话资料均在屏幕上显示。
程序执行结果如下所示: 欢迎进入电话薄数据系统 1.添加电话薄记录 2.显示电话薄内容
3.根据姓名查找电话薄数据 4.根据姓名删除电话薄数据 0.退出系统
请输入你的选择:
15.设计一个程序可查询出版物销售的情况。具体要求如下:
(1)定义类publication,表示出版物
34
? 私有数据成员
char title[50]; //表示出版物名称 float price; //表示出版物价格
? 公有成员函数
void getData();:用来输入出版物名称及价格 void putData():用来显示数据
(2)定义类sales,表示销售情况 ? 私有数据成员
float salesArray[20]; //表示若干个月的销售 ? 公有成员函数
void getData(int n);:用来输入过去n个月的销售情况
void putData(int n):用来显示数据,包括销售总数
(3)定义类book,由类publication公有派生,表示图书 ? 私有数据成员
int pages; //表示页数 ? 公有成员函数
void getData();:用来输入页数 void putData():用来显示数据
(4)定义类cd,由类publication公有派生,表示音像制品 ? 私有数据成员
float time; //表示播放时间 ? 公有成员函数
void getData();:用来输入播放时间 void putData():用来显示数据 (5)在主函数中对定义的类进行测试。 程序执行结果如下所示:
请输入出版物的标题:计算机基础 请输入出版物的价格:20 请输入页数:150 请输入过去6个月的销售 第1个月:100 第2个月:200 第3个月:120 第4个月:320 第5个月:431 第6个月:224 标题:计算机基础 价格:20 页数为:150 第1个月销售:100
35