您的位置 首页 java

计算机等级二级考试辅导:综合应用上机模拟题及解答(第5部分)

1、给定某个自然数,编程实现识别该自然数是否为质数(素数)

(1)什么是质数(素数)

质数(Prime Number)又称素数,一个大于1的自然数(读者注意是 自然数 ,不是普通的数字),除了1和它自身外,不能被其他自然数整除的数叫做质数;否则称为 合数 (规定1既不是质数也不是合数)。质数(素数)具有如下的主要特性:

1)质数(素数)有无限个,例如2,3,5,7,11,13,17 …等都是质数(素数);

2)0和1不是质数(素数),1既不是质数也不是合数。因为它的约数有且只有1这一个约数;

3)2是唯一的偶数质数(素数),因为所有其它的偶数都可以除以2。

质数(素数)在公钥加密算法(如RSA)中有重要的应用。

(2)问题分析和解题思路

本问题的关键是在于如何判断一个自然数是否为质数,而要判断一个数是否为质数(素数)还是合数,可以根据它的约数的个数来确定:只有两个约数的数,是质数;有三个或三个以上的约数的数是合数;有且只有一个约数的数既不是质数也不是合数(比如自然数“1”既不是质数也不是合数)。

从程序设计和实现的角度来看此问题,并不存在什么复杂的实现技术,在 Java 程序设计相关的应用技术中都能够加以实现。

(3)在MyEclipse开发工具中创建出一个类名称为TestPrimeNumber,程序包名称为com.bluedream.javaoop,并且包含有main()方法的Java程序类,TestPrimeNumber程序类的创建过程参看如下示例图所示。

(4)点击对话框中的“Finish”按钮,MyEclipse开发工具将帮助开发人员创建出TestPrimeNumber类的初始程序,在TestPrimeNumber类的初始程序中只包含有默认构造方法和main()方法。最终的程序结果示例参看如下示图所示。

(5)编程示例中的功能实现的程序代码

在该Java程序的main()方法中,首先应用new Scanner(System.in).nextInt()方法获得用户键盘输入的某个数字,然后判断所输入的这个数字是否为素数,并打印输出判断的结果。最终的程序代码示例参看如下示图所示。

示例程序中的循环只需要从自然数2开始(for循环中的 int loopCounterInt=2 定义),一直循环到小于所识别的数字其自身就可以结束循环。因为小于等于3的自然数只有2和3是质数。

(6)执行TestPrimeNumber程序类示例代码

在MyEclipse开发工具中右击源程序,在弹出的快捷菜单中选择“Run as”下拉菜单中的“Java Application”子菜单项目以在Java虚拟机环境中执行示例,将执行本示例TestPrimeNumber类程序。

(7)作者在显示的控制台中输入数字13,程序将显示出判断的结果(程序判断正确),参看如下示例图所示

(8)为了进一步验证程序的正确性,作者再在显示的控制台中输入数字12,将显示出判断的结果(程序判断正确),参看如下示例图所示

2、精益求精优化程序代码示例以提高程序执行的效率

(1)示例程序目前所存在的不足——程序执行的效率是最低的

前面的示例程序主要是根据质数的定义编程对应的功能实现程序代码,只需要从2开始循环,一直到小于其自身,依次判断能否被n整除即可,能够整除则不是质数,否则是质数。因此,前面的示例程序之所以说效率是最低的,因为循环次数是随着所要识别的数字值的增大而增加的。当所识别的数字很大时,程序的循环的次数也将很大。

(2)问题分析和解题思路

对于一个 正整数 n而言,它对(n/2, n)范围内的正整数是必然不能够整除的,因此,在判断n的时候,没有必要让它除以该范围内的数。据此,可以对前面的示例程序的代码进行优化,读者可以注意下面的示例程序代码中的循环控制条件 loopCounterInt<=someOneInteger/2, 优化后的程序示例代码请参看如下示例图所示。

(3)执行优化后的程序示例

作者在显示的控制台中仍然输入数字13,将显示出判断的结果(程序判断正确),参看如下示例图所示。

作者再在显示的控制台中输入数字12,将显示出判断的结果(程序判断正确),参看如下示例图所示。

3、对程序进一步优化以符合面向对象编程所倡导的封装和代码重用的设计原则

(1)问题分析和解题思路

面向对象所倡导的封装性能够增强对程序代码使用的安全性,使用者不必了解具体的实现细节,而只需要通过设计者提供的外部接口来操作。同时也能够实现高度模块化,从而产生出软件构件(控件),利用控件快速地组装程序。

为此,可以将本示例程序代码中判断某个数字是否为质数(素数)的功能程序代码设计为一个方法(函数),该方法的名称为testPrimeNumber,并将该方法封装在示例程序类中。在使用处对该方法进行调用,并输入待识别的数字,同时获得识别的结果。

(2)在TestPrimeNumber程序类中新增一个名称为testPrimeNumber的方法

在testPrimeNumber方法中对所接受的参数进行识别是否为质数(素数),并返回识别的结果。testPrimeNumber方法最终的程序代码参看如下示例图所示。

(3)修改TestPrimeNumber程序类中的main()方法相关的程序代码

由于将原来直接放在main()方法内的判断某个数是否为质数(素数)的功能程序代码移到了testPrimeNumber方法中,因此需要修改main()方法相关的程序代码。在main()方法中主要是创建TestPrimeNumber类的对象实例,然后通过该对象实例对testPrimeNumber方法进行调用,并传入待识别的数字;最终返回识别的结果。main()方法最终的程序代码参看如下示例图所示。

(4)再次执行优化后的程序示例

在MyEclipse开发工具中右击源程序,在弹出的快捷菜单中选择“Run as”下拉菜单中的“Java Application”子菜单项目,以在Java虚拟机环境中执行本示例TestPrimeNumber类程序。参看如下示例图所示。

作者在显示的控制台中仍然输入数字13,将显示出判断的结果(程序判断正确),参看如下示例图所示。

为了验证程序功能的正确性,作者再在显示的控制台中输入数字12,将显示出判断的结果(程序判断正确),参看如下示例图所示。

4、再次优化示例程序代码以提高程序的健壮性和可靠性

(1)示例程序目前所存在的不足——无法识别输入的数字是否是合法的数字

根据前面的质数(素数)的定义,所要识别的数字应该是自然数而不是任意的数字。但Scanner(System.in).nextInt()方法只能保证获得整数,而不能保证只能获得正整数。因此,当用户输入如下的负数时,程序可能会出现判断错误。

为此,再次优化示例程序代码以提高程序的健壮性和可靠性。

(2)优化后的testPrimeNumber方法的程序代码示例

读者注意在testPrimeNumber方法中添加了识别所判断的数字是否为合理的范围的条件判断代码,参看如下示例图所示。

(3)执行优化后的示例程序代码

作者输入合法的数字13,将显示出判断的结果(程序判断正确),参看如下示例图所示。

(4)执行优化后的示例程序代码

输入不合法的数字 -12,将显示出判断的结果(程序判断正确),参看如下示例图所示。

(5)执行优化后的示例程序代码

输入另一个合法的数字12,将显示出判断的结果(程序判断正确),参看如下示例图所示。

文章来源:智云一二三科技

文章标题:计算机等级二级考试辅导:综合应用上机模拟题及解答(第5部分)

文章地址:https://www.zhihuclub.com/187815.shtml

关于作者: 智云科技

热门文章

网站地图