(加红部分为王兴补充的思考题)
思考题一:
1、用下面公式计算∏的值:∏=4-4/3+4/5-4/7+4/9-4/11+…
思考题二:
1、如果一个整数其所有因子(包括1,但不包括自己)之和等于它自身,那么这个整数就是一个完数。例如:6是完数,因为6=1+2+3。编写一个函数perfect,用于确定参数number是否是一个完数。
2、编写一个函数,把时间作为三个整型参数,并返回距离上一次时钟“敲响12点整”的秒数。利用这个函数计算两个12小时制的时间之间的秒数。
思考题三:
1、创建一个名为Rational类,进行分数运算。编写一个程序测试这个类。要求:用整型变量表示类的private数据:numerator(分子)和denominator(分母),提供一个构造函数,使这个
类的对象在声明时得以初始化。这个构造函数应包含默认值,并以简化形式保存分数。例如分数2/4应在对象中保存成numerator为1,denominator为2的形式。对下列任务,提供完成它们的public成员函数:
a)两个Rational值相加,结果应以简化形式保存
b)两个Rational值相减,结果应以简化形式保存
c)两个Rational值相乘,结果应以简化形式保存
d)两个Rational值相除,结果应以简化形式保存
e)以a/b的形式打印Rational值,其中a是分子,b是分母
f)以浮点数的形式打印Rational值
2、创建HugeInteger(大整数)类,用一个具有40个元素的数组存放最多40位的整数。提供成员函数input、output、add和substract。为了比较HufwInteger对象,提供函数isEqualTo、isNotEqualTo、isGreaterThan、isLessThan、isGreaterThan、isGreaterThanOrEqualTo和i
sLessThanOrEqualTo。这几个函数都是“判定”函数,如果两个HugeInteger对象间关系成立,则返回True;如果关系不成立,则返回false。另外,该类还提供判定函数isZero(是零)。如果有兴趣,可以继续提供成员函数multiply、divide和modulus。
3、创建TicTacToe类,使你可以编写一个完整的三连棋(tic-tac-toe)游戏程序。这个饮食一个作为private数据 的3X3的二维整数数组。构造函数应将空棋盘初始化为0,允许两个人玩游戏。无论第一个人移动到哪里,都在指定的棋格中放置1,无论第二个人移到哪里,都在指定的棋格中放置2。每次移动都必须到达一个空格。在每次移动后,确定是否已分胜负,还是出现了平局。此外,可以让玩家决定谁先走谁后走。如果还想继续挑战,那么可以开发一个程序,在4X4X4的棋盘上玩三维的三连棋游戏。注意:这是一个极其挑战的项目,可能需要长达几个星期的努力工作。
指向类成员函数的指针思考题四:
1、创建一个SavingAccount类。使用一个static数据成员annualInterestRate保存每个存款者的年利率。类的每个对象都包含一个private数据成员savingsBalance,用以指示存款者目前的存款金额。该类提供成员函数calculateMonthlyInterest,它将余额乘以annualInterestRate
再除以12来计算月利息,这个利息应该加到savingsBalance中。该类还提供一个static成员函数modifyInterestRate,它将static的annualInterestRate设置为一个新值。编写一个驱动程序测试SavingAccount类。实例化SavingAccount类的两个对象saver1和saver2,余额分别为$2000.00和$3000.00。将annualInterestRate设置为3%,计算月利率并打印每个存款者的新余额。接着将annualInterestRate设置为4%,计算下个月的利息并打印每个存款者的新余额。
2、创建类IntegerSet,它的每个对象可以存储0~100内的整数。集合在内部表示为0和1的数组。如果整数i在这个集合内,则数组元素a[i]是1。如果整数j不在这个集合内,则元素a[j]为0。默认构造函数将集合初始化成所谓的“空集合”,即其数组表示中所有元素都是0的集合。
提供常用集合操作的成员函数。例如,提供unionOfSets成员函数,它生成第三个集合,这个集合是两个现有集合理论上的并集(即如果两个现有集合中只要有一个集合的元素为1,则第三个集合中的数组元素设置为1,如果在两个集合中的元素都为0,则第三个集合中的数组元素设置为0)。
提供intersectionOSets的成员函数,该成第三个集合,是两个现有集合论上的交集(即如果
两个集合中只要有一个集合的元素为0,则第三个集合中的数组元素设置为0,如果在两个集合中的两个元素都为1,则第三个集合的数组元素设置为1)。
提供insertElement成员函数,它把一个新整数k插入到集合中(通过将a[k]设置为1)
提供deleteElement成员函数,它删除整数m(将a[m]设为0)。
提供printSet成员函数,它把集合打印为用空格隔开的数字列表。只打印集合中出现的元素(即在数组对应位置上值为1的元素)。
提供isEqualTo函数,判定两个集合是否相等。
提供另一个构造函数,它接受一个整数的数组以及该数组的大小,并使用该数组初始化集合对象。现在编写一个驱动程序测试你的IntegerSet类。实例化几个IntegerSet对象,并且测试你的所有成员函数是否工作正常。
思考题五:
1、 利用一个一维数组解决以下问题。一家公司以底薪加提成的方式传给销售人员工资。销
售人员每周获得200美元的底薪。外加本周达到一定销售额的9%的提成。例如,一个销售人员一周的销售额是5000美元,就会得到200美元加上5000美元的9%,即总共650美元。编写一个程序(利用一个计数器数组)。判断有多少销售人员可以获得以下范围内的报酬(假设每个销售人员的报酬都将取整):
a)$200~$299
b)$300~$399
c)$400~$499
d)$500~$599
e)$600~$699
f)$700~$799
g)$800~$899
h)$900~$999
i)$1000及以上
3、回文是一种字符串,正读和反读该字符串都会得到同样的拼写。例如,”radar”、”able was I ere I saw elba”和“a man a plan a canal panama”都是回文(如果忽略空格)。编写一个递归函数testPalindrome,如果数组中存储的字符串是回文,则返回true;否则,返回false。这个函数应当忽略字符串的空格和标点符号。
4、编写一个程序,按(555) 555-5555的形式输入电话号码字符串。该程序应该利用函数strtock把区号、电话号码前3位和后4位号码分别作为记号取出来。电话号码的7位数字应该连接成一个字符串。最后打印区号和电话号码。
5、针对下列各题,各编写一条C++语句完成指定的任务。假设已经声明了长整型变量value1和value2,并且value1已初始化200000。
a)声明变量longPtr为指向long类型对象的指针。
b)把变量value1的地址赋给指针变量longPtr。
c)打印longPtr所指对象的值。
d)把longPtr所值对象的值赋给变量value2
e)打印value2的值。
f)打印value1的值。
g)打印存储在longPtr中的地址。打印出的值是否和value1的地址一样?
思考题六~七:
1、一些快递商,如FedEx、DHL和UPS,都提供多样化的服务,同时也收取不同的费用。创建管委会表示各种上不同包裹的继承层次。以包裹类Package作为基类,两日包裹类TwoDayPackage和连夜包裹类OvernightPackage作为派生类。基类Package应该包含代表寄件人和收件人姓名、地址、所在城市、所在州和等的数据成员。此外,还应饮食存储包裹重量(以盎司计)和第盎司费用的数据成员。类的构造函数应初始化这些数据成员,并确保重量和每盎司费用为正值。Package应该提供Public成员函数calculateCost,该函数计算重量和每盎司费用的乘积,得到的是与运输该包裹有关的费用并返回(返回值类型为double)。派生类TwoDayPackage构造函数应继承基类Package的功能,但还应包含一个
数据成员,表示付给两日快递服务的平寄费。TwoDayPackage构造函数应接受一个值来初始化这个数据成员。类TwoDayPackage还应该重新定义基类的成员函数calculateCost来计算运输费用,具体方法是将平寄费加到由基类Package的calculateCost函数计算得到的基于重量的费用中。派生类OvernightPackage应直接继承基类,并且应包含一个附加的数据成员,表示传给连夜快递服务的每盎司的额外费用。类OvernightPackage应当重新定义基类的成员函数calculateC灯笼,从而使它在计算运输费用之前,先将额外的每盎司费用加到标准的每盎司费用上。编写测试程序,创建每咱Package的对象并测试成员函数calculateCost。
2、创建一个银行账户的继承层次,表示银行所有的客户账户。所有的客户都能在他们的银行账户存钱、,但是账户也可以分成更具体的类型。例如,一方面存款账户SavingsAccount依靠存款生利;另一方面,支票账户CheckingAccount对每笔交易(即存款或取款)收取费用。
创建一个,以Account作为基类,SavingsAccount和CheckingAccount作为派生类。基类Account应该包括一个double类型的数据成员balace,表示账户的余额。该类应提供一个构造函数,接受一个初始余额值并用它初始化数据成员balance。而且构造函数确认初始余额的
有效性,保证它大于等于0。如果小于0,则需将其置为0,并显示出错信息,表明该初始化余额是一个无效的值。该类应当提供三个成员函数。成员函数credit可以向当前余额加钱;成员函数debit负责从账户中取钱,并且保证账户不会透支。如果提取金额大于账户余额,函数将保持balance不变,并打印信息”Debit amount exceeded account balance”;成员函数getBalance则返回当前balance的值。
派生类SavingsAccount不仅继承了基类Account的功能,而且还应提供一个附加的double类型数据成员interestrate表示这个账户的利率(百分比)。SavingsAccount的构造函数应接收初始余额值和初始利率值,应应提供一个public成员函数calculateInterest,返回代表账户的利息的一个double值,这个值是balance和interestrate的乘积。注意:类SavingAccount应继承成员函数credit 和debit,不需要重新定义。
派生类CheckingAccount不仅继承了基类Account的功能,还应提供一个附加的double类型数据成员表示每笔交易的费用。CheckingAccount的构造函数应接收初始余额值和交易费用值。类CheckingAccount需要重新定义函数credit和debit,当每笔交易完成时,从balance中减去每交易的费用。重新定义这些函数应用(即调用)基类Account的这两个函数来执行账
户余额的更新。CheckingAccount的debit函数只有当钱被成功提取时(即提取金额不超过账户余额时)才应收取交易费。提示:定义Account的debit函数使它返回一个bool类型值,是表示钱是否被成功提取,然后利用该值决定是否需要扣除交易费。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论