《数据结构算法与应用-C++语言描述》练习题 第一章 C++程序设计

1. 试编写一个模板函数I n p u t,它要求用户输入一个非负数,并负责验证用户所输入的数是
否真的大于或等于0,如果不是,它将告诉用户该输入非法,需要重新输入一个数。在函数非
成功退出之前,应给用户三次机会。如果输入成功,函数应当把所输入的数作为引用参数返回。
输入成功时,函数应返回true, 否则返回f a l s e。上机测试该函数。

2. 试编写一个模板函数,用来测试数组a中的元素是否按升序排列(即a [ i ]≤a [ i + 1 ] ,其中0≤
i<n - 1)。如果不是,函数应返回f a l s e,否则应返回t r u e。上机测试该函数。

3. 试编写一个非递归函数来计算n!,并上机测试函数的正确性。

4. 
1) 试编写一个计算斐波那契数列Fn 的递归函数,并上机测试其正确性。
2) 试说明对于任何n> 2的整数,调用1)中的函数计算Fn 时,同一个Fi 会被处理至少一次。
3) 试编写一个非递归的函数来计算斐波那契数列Fn ,该函数应能直接计算出每个斐波那
  契数。上机测试代码的正确性。

5. 试编写一个递归函数,用来输出n 个元素的所有子集。例如,三个元素{a, b, c} 的所有
子集是:{ }(空集),{a}, {b}, {c}, {a, b}, {a, c}, {b, c} 和{a, b, c}。

6. 试编写一个递归函数来确定元素x 是否属于数组a[ 0:n- 1 ]。

7. 假定用一维数组a [ 0:s i z e - 1 ]来存储一组元素。如果有n个元素,可以把它们存储在
a [ 0 ] , . . . , a [ n - 1 ]中。当n超过s i z e时,数组将不足以存储所有元素,必须分配一个更大的数组。类
似地,如果元素的数目比s i z e小很多,我们又可能希望减少数组的大小,以便释放出多余的空
间为其他地方所用。试编写一个模板函数C h a n g e S i z e 1 D把数组a的大小从s i z e变成To S i z e。函数
首先应该分配一个新的、大小为To S i z e的数组,然后把原数组a中的n个元素复制到新数组a中,
最后释放原数组a所占用的空间。上机测试该函数。

8. 试编写一个函数ChangeSize2D 来改变一个二维数组的大小(见练习7)。上机测试该函数。


9. 
1) 采用程序1 - 1 5中的描述,所能表示的最大和最小货币值分别是多少?假定用四个字节
  表示一个l o n g型数据,用两个字节表示一个i n t型数据,则一个unsigned long数介于0~23 2- 1之间,
     一个unsigned int数介于0~6 5 5 3 5之间。
2) 采用程序1 - 1 5中的描述,把d o l l a r s和c e n t s变成i n t型,此时所能表示的最大和最小货币值
  分别是多少?
3) 如果用函数A d d(见程序1 - 1 8)来累加两个货币值,为了确保从C u r r e n c y类型转换成
  long int类型时不会发生错误,a 1和a 2最大可能的值应是多少?

10. 试扩充程序1 - 1 5中的C u r r e n c y类,为该类添加如下的p u b l i c成员函数:
1) Input()——从标准输入流中接收一个货币值,并把它返回给调用者。
2) Subtract(x)——从当前对象中减去对象x的值,并把结果返回。
3) Percent(x)——返回一个C u r r e n c y对象,其值为当前对象的x %,其中, x是一个浮点数。
4) Multiply(x)——返回一个C u r r e n c y对象,其值为当前对象乘以浮点数x。
5) Devide(x)——返回一个C u r r e n c y对象,其值为当前对象除以浮点数x。

11. 采用程序1 - 2 1中的描述来完成练习1 0。

12. 
1) 采用程序1 - 2 4中的描述来完成练习1 0。重载操作符> > , - , % , *和/。在重载操作符> >时,
  可把它定义成一个友元函数,不必专门定义一个p u b l i c输入函数。
2) 利用重载赋值操作符=来替换两个S e t函数。把一个整数赋值给一个C u r r e n c y对象可用
  operator=(int x) 来表示,它可用来替换第一个S e t函数,其中x表示一个包含符号、美元和美分
  的整数。同样, operator=(float x)可用来替换第二个S e t函数。

13. 证明能够为程序1 - 3 0提供语句覆盖的测试集也能提供分支覆盖和执行路径覆盖。

14. 为程序1 - 3 1设计一个n = 4的测试数据集,要求该测试集能提供执行路径覆盖。

15. 程序1 - 8中有多少条执行路径?

16. 程序1 - 9中有多少条执行路径?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值