6.5 练习
1.编写一个程序,请求用户在终端键入两个整数。测试这两个值以确定第一个数是否可以被第二个数整除,然后在终端显示一条适当的消息。
2.即使输入非法运算符或试图除以0时,代码清单6-8A也会显示累加器中的值。修改该程序。
3.修改Fraction类的print方法,使其同样可以显示整数(因此,分数5/1可以只显示成5)。再修改这个方法使其能将分子是0的分数显示成0。
4.编写一个程序,使其作为简单的打印计算器。该程序应该允许用户键入以下形式的表达式:
number operator
程序还应该可以识别以下运算符:
+-*/S E
S运算符通知程序将累加器设置成键入数字模式,而E运算符通知程序终止运行。使用键入的数字作为第二个运算数对累加器的内容执行算术运算。以下是显示程序应该如何运算的示例操作:
Begin Calculations
10 S Set Accumulator to 10
=10.000000 Contents of Accumulator
2/Divide by 2
=5.000000 Contents of Accumulator
55-Subtract 55
=-50.000000
100.25 S Set Accumulator to 100.25
=100.250000
4*Multiply by 4
=401.000000
0 E End of program
=401.000000
End of Calculations.
确信该程序可以检测除数为0的情况,还能对未知的运算符进行检查。使用代码清单6-8中开发的Calculator类来执行运算。
5.开发代码清单5-9用于翻转从终端键入数的各个位。然而,如果键入负数,这个程序就不能很好地运行。找出这种情况下发生了什么事情,然后修改这个程序以便正确地处理负数。正确地处理,指的是如果(例如)键入数-8645,程序的输出将是5468-。
6.编写一个程序,用于接受从终端键入的整数,提取并用英语显示这个数的每一个数字。因此,如果用户键入932,程序就会显示以下内容:
nine
three
two
(记住,用户只键入一个0时将显示zero)。注意:这个练习很难!
7.代码清单6-10存在几个低效的方面。其中一个低效的方面是由检查偶数引起的。因为任何大于2的偶数显然不能是素数,因此可以简单地略过偶数作为可能的素数和可能的除数。内层的for循环也是低效的,因为始终使用2到p-1之间的所有d值除以p。如果在for循环的条件中添加用于判断isPrime值的测试,可以避免这种低效性。使用这种方式,只要没有发现除数而且d的值小于p, for循环就将继续执行。修改代码清单6-10,将这两种修改合并到一起;然后运行程序以验证它的运算。