VC++程序设计课程实践基础题(7)

2019-04-22 21:34

为球体,以及此球体的半径、体积、表面积。

(4)图形类(Sharp)有两个函数,一个为输出的fun(),另一个为图形变化函

数Change()。一旦图形变化函数Change()的返回值为0,则变成球体;一旦为1,则变成圆柱体;一旦为2,则变成长方体。 (5)每个类中数据成员按需求定义为私有(Private)或者的受保护(protected)。 (6)编写一个函数Shape_Change(),生成若干个球体、圆柱体或者长方体,随

机生成该图形所需要的参数(都为1-10之间的整数),并输出其对应类中函数fun()应当输出的内容。直到连续生成3个同种图形为止。

(7)编写main函数,调用函数Shape_Change(),以实现整个程序。 说明:

(1)本程序中的圆周率π需要被宏定义,且至少精确到小数点后5位。 (2)本程序中可能需要的几个公式: V(球体)=4*π/3*r*r*r S(球体)=4*π*r*r

V(圆柱体)=π*r*r*h S(圆柱体)=2*π*r*(r+h)

V(长方体)=a*b*c S(长方体)=2*(a*b+b*c+c*a)

执行结果如下:

该图形为长方体。它的长为:7 它的宽度为:1 它的高为:8 它的体积为:56 它的表面积为:142

该图形为长方体。它的长为:1 它的宽度为:6 它的高为:7 该图形为圆柱体。它的半径为:10 它的高为:4 它的体积为:1256.64 它的表面积为:879.645 该图形为球体,它的半径为:4

它的体积为:268.082 它的表面积为:201.062

10.设计一个程序通过虚函数求长方形的面积和长方体的表面积,具体要求如下:

(1)定义长方形类Rectangle ? 保护的数据成员

int l,w; //表示长方形的长和宽 int s; //表示长方形的面积 ? 公有的构造函数

Rectangle(int x,int y):初始化长方形的长和宽; ? 公有的虚函数

virtual void fun():求长方形的面积;

virtual void show():输出长方形的长、宽和面积。

(2)定义长方形类A的公有派生类Cuboid,表示长方体类 ? 私有的数据成员

int h; //表示长方体的高 ? 公有的构造函数:

Cuboid(int x,int y,int z):初始化长方体的长、宽和高。 ? 公有函数

30

void fun():求长方体的表面积;

void show():输出长方体的长、宽、高和表面积。

(3)在主函数中对定义的类进行测试,要求定义长方形对象a1(长为2,宽为

3),长方体对象b1(长、宽、高分别为2,3,4),通过基类的指针p分别求长方形的面积和长方体的表面积,输出数据成员,并体现运行的多态性。 程序运行结果如下:

长方形的长为2,宽为3,面积为6

长方体的长为2,宽为3,高为4,表面积为52

11.设计一个程序,查询2000年1月1日(星期六)后的某天是星期几,具体要求

如下:

(1)定义函数int leap(int year):判断某年year是否为润年。能够被400整除,

或者能够被4整除但不能衩100整除的年份是润年。

(2)定义函数int f(int y,int m,int d,int *m1,int *m2):判断输入的日期是否合

法,其中y、m、d分别表示年、月、日,m1表示非润年每月的天数,m2表示润年每月的天数。 (3)定义类date,表示日期 ? 私有数据成员

int year,month,day; //分别表示某年某月某日 ? 公有成员函数:

date(int y,int m,int d):构造函数,用形参分别初始化数据成员; int get_year():访问私有成员year; int get_month():访问私有成员month; int get_day():访问私有成员day;

void show():以指定格式输出数据成员。

(4)定义类week,判断某天是星期几 ? 私有数据成员

date d1; //日期类的对象,表示某日

int m1[12];//存储非润年每月的天数31,28,31,30,31,30,31,31,30,31,30,31 int m2[12];//存储润年每月的天数31,29,31,30,31,30,31,31,30,31,30,31 int w;//表示用0表示星期天,1表示星期一,以此类推6表示星期六 ? 公有成员函数

week(int y,int m,int d,int *p1,int *p2):构造函数,用y,m,d初始化日期,用p1,p2分别初始化m1,m2;

int days():计算d1距2000年1月1日的时间间隔(天数);

void fun():根据days()的计算结果判断d1是星期几(求以0~6表示w的值);

void print():输出判断结果。

(5)在主函数中对定义的类进行测试。从键盘输入一个日期,并检查输入数据

的合法性,然后用输入的数据和表示每月天数的数组初始化week类的对象

31

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


VC++程序设计课程实践基础题(7).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:空气净化器十大排名,还您健康纯净好水源 - 图文

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: