1、计算机二级(JAVA)上机考试 20 及答案解析(总分:-3.00,做题时间:90 分钟)1.基本操作题 下面的程序是求菲波那契(Fibonacci)数列的前 10 项。已知该数列的前两项都为 1,即 F(1)=1,F(2)=1;而后面各项满足:F(n)=F(n-1)+F(n-2).请在程序的每条横线处填写一条语句,使程序的功能完整。 注意:请勿改动 main()主方法和其他已有的语句内容,仅在横线处填入适当的语句。 public class Fibonacci public static void main() System.out.println(“Fibonacci is“+“ “+ )
2、; static long fib(int n) if( ) return 1; else return (分数:-1.00)_2.简单应用题 请完成下列 Java 程序:对大写的 26 个英文字母加密,从键盘输入一个大写字母串,输出这个串加密后的结果。加密操作是将字母变换成倒序的大写字母,如 A-Z, B-Y。 注意:请勿改动main()主方法和其他已有语句内容,仅在下划线处填入适当的语句。 程序运行结果如下: 输入一个大写字母串:ADFSDFFE 加密后的大写字母串:ZWUHWUUV import java.io.*; public class ex12_2 public static v
3、oid main (String args) char ch = A; String str; System.out.print(“输入一个大写字母串:“); try BufferedReader in = new BufferedReader(new InputStreamReader(System.in); str = in.readLine(); System.out.print(“加密后的大写字母串:“); for(int i=0;i_3.综合应用题 下面是一个 Applet 程序,其功能是实现一个计数器,每隔 0.15 秒计数器数值加 1,数值动态变化,并且能够控制计数器的暂停和继续
4、。要求通过使用 swing 的构件建立图形用户界面,主要包括一个文本区域,用于显示计数器结果;两个按钮,一个使计数器暂停,一个使计数器继续工作。请改正程序中的错误(有下划线的语句),使程序能输出正确的结果。 注意:不改动程序的结构,不得增行或删行。 程序运行结果如下: (分数:-1.00)_计算机二级(JAVA)上机考试 20 答案解析(总分:-3.00,做题时间:90 分钟)1.基本操作题 下面的程序是求菲波那契(Fibonacci)数列的前 10 项。已知该数列的前两项都为 1,即 F(1)=1,F(2)=1;而后面各项满足:F(n)=F(n-1)+F(n-2).请在程序的每条横线处填写一
5、条语句,使程序的功能完整。 注意:请勿改动 main()主方法和其他已有的语句内容,仅在横线处填入适当的语句。 public class Fibonacci public static void main() System.out.println(“Fibonacci is“+“ “+ ); static long fib(int n) if( ) return 1; else return (分数:-1.00)_正确答案:(fib(10) n=0|n=1 fib(n-1)+fib(n-2); )解析:本题主要考查递归算法。解答本题的关键是理解递归算法的思想。在本题中,fib(10)方法是计算
6、含由 10 项的菲波那契(Fibonacci)数列,而 fib(n-1)+fib(n-2);是用来计算第 0 项和第 1 项以外的菲波那契(Fibonacci)数列。2.简单应用题 请完成下列 Java 程序:对大写的 26 个英文字母加密,从键盘输入一个大写字母串,输出这个串加密后的结果。加密操作是将字母变换成倒序的大写字母,如 A-Z, B-Y。 注意:请勿改动main()主方法和其他已有语句内容,仅在下划线处填入适当的语句。 程序运行结果如下: 输入一个大写字母串:ADFSDFFE 加密后的大写字母串:ZWUHWUUV import java.io.*; public class ex1
7、2_2 public static void main (String args) char ch = A; String str; System.out.print(“输入一个大写字母串:“); try BufferedReader in = new BufferedReader(new InputStreamReader(System.in); str = in.readLine(); System.out.print(“加密后的大写字母串:“); for(int i=0;i_正确答案:(ch = str.charAt(i) ch = (char )(Z - ch + A) )解析:本题主
8、要考查字符串的操作和 I/O 操作的简单应用。解题关键是,熟悉字符串的基本操作,会将字符作相应的转换,熟悉字符串的定位方法 charAt()以及基本的 I/O 操作。本题中,第 1 个空,定位 str对象中的字符,调用 str 对象的 charAt()方法定位第 i 个字符并将该字符写给 ch 变量;第 2 个空,加密算法的实现,Z-ch 表示字符 ch 在字符表中和字符Z之间相隔多少字符,再加上字符A就得到了倒序的字符在字符表中的位置,然后进行类型转换,就得到了倒序的字符。3.综合应用题 下面是一个 Applet 程序,其功能是实现一个计数器,每隔 0.15 秒计数器数值加 1,数值动态变化
9、,并且能够控制计数器的暂停和继续。要求通过使用 swing 的构件建立图形用户界面,主要包括一个文本区域,用于显示计数器结果;两个按钮,一个使计数器暂停,一个使计数器继续工作。请改正程序中的错误(有下划线的语句),使程序能输出正确的结果。 注意:不改动程序的结构,不得增行或删行。 程序运行结果如下: (分数:-1.00)_正确答案:(notify() wait() jtf.setText.(Integer.toString(cnt+) )解析:本题主要考查图形用户界面,swing 以及线程同步、共享、死锁相结合的综合应用。解题关键是熟悉 wait()方法和 notify()方法的含义,wait
10、()必须被声明为 synchronized,这样它才能拥有对象锁。fauxResume()把 bIsHold 标志设为 false,并调用 notify(),为了唤醒 synchronized 子句中的 wait(),所以 notify()也必须被声明为 synchronized,这样才能在调用 notify()之前获得对象锁(然后该对象锁才能在 wait()执行时被运用)。本题中,第一和第二处,应该在 bIsHold 为 true 时调用 wait(),而在fauxResume()中调用 notify();第三处,需要对 int 类型作转换才能够作为 String 类型输出,并且要对计数器变量 cnt 做累加。