2022年第二阶段面向对象 .pdf

上传人:Q****o 文档编号:30524852 上传时间:2022-08-06 格式:PDF 页数:5 大小:51.85KB
返回 下载 相关 举报
2022年第二阶段面向对象 .pdf_第1页
第1页 / 共5页
2022年第二阶段面向对象 .pdf_第2页
第2页 / 共5页
点击查看更多>>
资源描述

《2022年第二阶段面向对象 .pdf》由会员分享,可在线阅读,更多相关《2022年第二阶段面向对象 .pdf(5页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第二阶段面向对象程序设计1.自定义一个示意性的复数类型complex,其中含有若干个成员函数,使用该类可以完成复数的加法以及对复数的输出。请完成类定义,并编制主函数,说明complex 类对象,对定义的各成员函数进行调用。class complex double real; /复数实部double imag; /复数虚部public: complex(); /无参构造函数complex(double r, double i); /2 参构造函数complex addCom(complex c2); /调用者对象与对象c2 相加,返回 complex 类对象void outCom (); /输出

2、调用者对象的有关数据(各分量); 进一步,在类中添加对复数进行其他基本运算(如,复数减、乘、除、取模等)的相应成员函数,并通过主函数处的调用来验证各函数的使用正确性。2.自定义一个简单的日期类DateType,它具有数据成员y、 m、 d,用来表示当前日期的年、月、日。而后设计该类欲实现(完成)的功能,进而设计出相应的类成员函数。例如,下面给出的“雏形”可用来实现对天的增加,比较两个日期是否相等,以及对日期的输出等操作。请完成各类成员函数,并编制主函数,说明DateType 类对象,对定义的各成员函数进行调用,以验证它们的正确性。class DateType /自定义的日期类DateType

3、int y,m,d; /数据成员,表示当前日期的年、月、日public: DateType(int y0=1, int m0=1, int d0=1); /构造函数,设定年、月、日;并设置参数默认值void incrementDay(); /增加 1 天bool equal(DateType dt2); /判断二日期是否相等void printDate(); /屏幕输出日期对象的有关数据(年、月、日); 注意,当对日期增加1 天后,也会涉及所谓的“进位”问题:首先算出本“日”所在的月份具有的天数N,若加 1 之后的“日”数值超过所在的月份具有的天数N 时, “进位”到月,而月份若超过12 时还

4、要“进位”到年。思考: 可对该类增加你所考虑到的其他功能,如,对日期进行输入,计算二日期的间隔天数,计算某日期为星期几,打印对象当前数据的y 年 m 月的月历,一次增加若干天,对两个日期进行其他比较运算等。3.利用虚函数手段,按照3 种不同的计算方法来求出Fibonacci 数列的第n 项(的具体项值)并输出。具体地说,可通过在基类baseCla 及其派生类fib1Cla 、fib2Cla 和 fib3Cla中说明如下的同一个虚函数“virtual double fib(int n);” ,来实现求Fibonacci 数列第 n 项值并返回的3 种不同求解方法。 例如, 可设计并使用已经在第4

5、 和第 5 章的练习中所实现的求解方法:简单变量 “数据平移”法、 使用数组的实现法以及使用递归函数的实现法。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 5 页 - - - - - - - - - 下面给出具体的“实现程序骨架”。class baseCla /自定义的基类baseCla public: virtual double fib(int n)=0; /基类 baseCla中说明了一个虚函数fib ,且为纯虚函数; class fib1Cla:public b

6、aseCla /由基类 baseCla派生出的fib1Cla 类public: virtual double fib(int n); /派生类中说明同一个虚函数fib(简单变量 “数据平移” 法); class fib2Cla:public baseCla /派生类 fib2Cla public: virtual double fib(int n); /派生类中说明同一个虚函数fib(使用数组的求解法); ,void fun(baseCla *p, int n) /自定义函数fun,形参 p 为指向基类的指针,其对应实参/可为不同派生类对象的地址;n 指明要求出数列的第n 项double d

7、= p-fib(n); /根据 p 指针值的不同, 将调用不同派生类的虚函数fib cout.flags(ios:scientific); cout.precision(15); coutfib(n)=dendl; void main() fib1Cla obj1; /fib1Cla 类对象 obj1 fib2Cla obj2; /fib2Cla 类对象 obj2 fib3Cla obj3; /fib3Cla 类对象 obj3 cout- fib1Cla -endl; fun(&obj1, 1476); /简单变量“数据平移”求解方法,求fib(1476) cout- fib2Cla -end

8、l; fun(&obj2, 888); /数组求解方法,求fib(888) cout- fib3Cla -endl; fun(&obj3, 35); /递归求解方法,求fib(35) 程序执行后,屏幕显示结果为:- fib1Cla - fib(1476)=1.306989223763399e+308 - fib2Cla - fib(888)=1.704274475850073e+185 - fib3Cla - fib(35)=9.227465000000000e+006 自定义如下形式的一个称为point 的类,其对象表示平面上的一个点(x,y) ,并通过类成员方式对该类重载二目运算符“+”和

9、“ ” ,用来求出两个对象的和以及两个对象(平面点)的距离。各运算符的使用含义(运算结果)如下所示:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 5 页 - - - - - - - - - (1.2, -3.5) + (-1.5, 6) = (-0.3, 2.5) ;(1.2, -3.5) (-1.5, 6) = 9.87623 。并编制主函数, 说明类对象, 而后通过类对象实现所定义的相关运算(以验证其正确性) 。class point double x,y; pub

10、lic: point (double x0=0, double y0=0)x=x0; y=y0; point operator + (point pt2); double operator (point pt2); void display(); ; 4.设计一个简单的计算器类(类型),要求:(1) 从键盘读入算式。(2) 可以进行加、减、乘、除运算。(3) 运算要有优先级。(4) 用户可以按任何的运算符出现顺序进行输入。(5) 不限定用户输入的计算式的长度。(6) 可以带有括号 ()。(7) 有排错功能,当用户输入错误的算式时提示用户。例如,如果用户输入:(3 + 4 )* 5 7,计算结果

11、应为28。5.设计一个类CStudent,类中包含一个学生的基本数据如下:编号,姓名,性别,年龄,数学成绩,计算机成绩,外语成绩。并假设编号为整数,且从1 号往后连续编码;姓名为字符串,性别为字符。如:1 LiPing m 18 89 98 94 请采用 binary文件形式, 并使用随机读写处理方式,对自定义CStudent 类的对象数据进行存储与读写处理(即是说, 总按具有连续编码的编号num为“序”来对文件中的各对象数据进行随机读写处理)。并设计该类的成员函数,而且对输出运算符“”进行重载,使该运算符能够完成将一个学生的信息输出到屏幕上。要求成员函数完成以下功能:(1) 从键盘输入一个学

12、生的有关信息,并将它们存入到数据文件中(按编号来确定写出位置)。(2) 按编号对学生信息进行检索并将检索结果显示在屏幕上。(3) 按姓名对学生信息进行检索并将检索结果显示在屏幕上。(4) 计算某编号学生的总成绩与平均成绩。(5) 列出所有总成绩超过n 分的性别为s 同学的有关信息(n,s由用户从键盘输入) 。思考:可进一步对上述程序进行扩充,如,添加学生基本数据(籍贯,专业,班级,其他各门成绩,奖惩记录等),并添加所需要的其他相关处理函数(如可通过咨询教学办公室管理人员后确立),进而将其编制成为一个简单而实用的小型学籍与成绩管理软件。6.编写一个具有如下样式的类模板tmplt ,用于实现所谓的

13、反序输出问题,其中使用了类型参数 T(使所处理的元素类型可变化)以及普通参数n(元素个数也可变化) :template class tmplt T arrn; / n 个 T 类型的数据存放于数组arr 之中名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 5 页 - - - - - - - - - public: void dataIn(); /从键盘输入n 个 T 类型数据放入arr 数组中void reverseOut(); /将 arr 数组中的数据按输入的相反顺序

14、输出; 而后编制主函数,将类模板实例化为某个具体的类并说明类对象,之后通过对象调用其负责输入数据的成员函数,再通过对象调用另一成员函数按反序输出那些输入数据。7.编程序 CompFile ,首先让用户输入两个文件名及其路径(二文件均为text文件) ,而后通过使用类成员函数getline逐行读入这两个指定文件的内容并进行比较。若发现有不同,则在屏幕上显示出相异二行的行号及其内容,并暂停下来询问用户是否需要继续比较后继行, 直到用户回答不需要继续进行比较,或者已经比到了二文件的结束时停止处理。思考:也可改写程序, 将“让用户输入两个文件名及其路径”改为从命令行参数处获取这两个文件名及其路径。8.

15、编写程序实现一个简单的电话记录簿,要求记录的个人信息包括:姓名,单位,家庭电话,移动电话。具体功能如下: 1.创建信息链表并以磁盘文件保存。2.读取磁盘文件并显示输出所有人的移动电话。3.按姓名或单位查询家庭电话。4.通过姓名和单位确定个人,修改其电话信息并存盘. 9.银行账户管理问题描述设计一个银行账户管理程序,账户的信息有账号(唯一)、姓名、余额、身份证号码、单位、电话号码、地址等,允许用户进行如下操作:开户、销户、存款、取款、转账、查询,一个用户可以有多个户头,账户的数值没有上限。基本要求程序运行时,可以由用户选择进行何种操作,开户操作要求输入用户信息后自动获取账号,用户销户后账号被回收

16、,并且该账号可以继续分配给其它账户,不允许用户透支,根据姓名或账号可以进行用户的信息查询,所有的账户信息应存放到一个文件中,可以随时的访问和更新。测试数据程序应输入不少于10 人的账户信息,应考虑到人员同名的情况。实现提示可定义一个账户类存放账户信息以及执行相应的操作,可以用一个链表类来管理账户。选作内容在上述程序的基础上,添加联名账户(一个联名账户有两个拥有者)的管理10.足球联赛积分问题描述足球联赛采用主客场双循环赛制,胜一场得3 分,平局各得1 分,负一场得0 分,联赛排名以积分多者在前,当两队(或多队)积分相同时,则净胜球(即进球数与失球数之差)多者在前,若净胜球相同,则进球数多者在前

17、,若仍相同,则抽签或踢附加赛决定名次(这名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 5 页 - - - - - - - - - 在联赛结束后进行,联赛未结束则两队名次并列,本程序不做这方面要求)。试编一程序统计最近一轮比赛后,各队积分及排名。基本要求设积分表结构如下:队名(不超过15 个字符),已比赛的场数,赢的场数,平的场数,负的场数,进球数,失球数,积分。积分表放在正文文件中。最近一轮的结果从键盘输入,其形式为:主队名 (可用代码) ,客队名(可用代码) ,主队得

18、分 (即进球数),客队得分 (即进球数)。程序应根据此轮结果修改各队的积分和名次,所得的最新记分表仍在原积分文件中并同时在屏幕上显示。测试数据可选择我国当年的甲A 或甲 B 联赛的数据输入,并检查与报章公布的数据是否一致。实现提示定义一个球队类,每个球队是均是此类的对象。由于联赛中参赛的队伍数是固定的,因此可用对象数组来实现(当然也可以用链表结构)。每输入两个队的比赛成绩,则相应的队的有关数据(比赛场数,赢的场数,平的场数,负的场数,进球数,失球数,积分等)即可进行修改, 比赛成绩录入完成,调用联赛排序方法 (对象数组作为参数)排出名次并输出。选做内容篮球联赛(如NBA )往往采用胜率来决定名次,胜率就是取胜的场数比赛场数之比。若胜率相同,再由净胜球及进球数来决定名次,通过继承性完成上述要求。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 5 页 - - - - - - - - -

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 技术总结

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁