1、计算机二级(JAVA)上机考试 3及答案解析(总分:-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“+“ “+ ); s
2、tatic long fib(int n) if( ) return 1; else return (分数:-1.00)_2.简单应用题 请完成下列 Java程序:运行 3个线程,每一个线程有自己的标志,用 a,b,c表示,每个线程显示一个“Start“信息和一个“End“信息并且间隔地显示 2个“Loop“信息(间隔变化为(0.52)秒之间的随机延迟)。 程序运行结果如下:(注:由于时间间隔为随机数,所以,运行结果的顺序不惟一) a Start b Start c Start b Loop a Loop b Loop b End c Loop a Loop a End c Loop c En
3、d 注意:请勿改动 main()主方法和其他已有语句内容,仅在下划线处填入适当的语句。 public class ex2_2 implements Runnable static char flag2_2 = a; public static void main(String arg) ex2_2 obj2_2 = new ex2_2(); Thread thread2_2 = new Thread(obj2_2); thread2_2.start(); thread2_2 = new Thread(obj2_2); thread2_2.start(); thread2_2 = new Thr
4、ead(obj2_2); thread2_2.start(); public void run() char myflag2_2; synchronized(this) ; System.out.println(myflag2_2 + “ Start“);for(int i=0; i_3.综合应用题 下面是一个 Applet程序,其功能是根据给出的小时,分钟和秒数计算相等的秒数,即 将1分钟化为 60秒,依此类推。要求建立一个时间类,时间参数均作为类的成员变量,并且给出换算时间的方法,也作为这个类的成员函数,可以供外部对象进行调用。同时还需要在输出窗口中显示换 (分数:-1.00)_计算机二级
5、(JAVA)上机考试 3答案解析(总分:-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“+“ “+ ); static
6、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)方法是计算含由 10项的菲波那契(Fibonacci)数列,而 fib(n-1)+fib(n-2);是用来计算第 0项和第 1项以外的菲波那契(Fibonacci)数列。2.简单应用题 请完成下列 Java程序:运行 3个线程,每一个线程有自己的标志,用 a,b,c表示,每个线程显示一个“Start“信息和一个“En
7、d“信息并且间隔地显示 2个“Loop“信息(间隔变化为(0.52)秒之间的随机延迟)。 程序运行结果如下:(注:由于时间间隔为随机数,所以,运行结果的顺序不惟一) a Start b Start c Start b Loop a Loop b Loop b End c Loop a Loop a End c Loop c End 注意:请勿改动 main()主方法和其他已有语句内容,仅在下划线处填入适当的语句。 public class ex2_2 implements Runnable static char flag2_2 = a; public static void main(Str
8、ing arg) ex2_2 obj2_2 = new ex2_2(); Thread thread2_2 = new Thread(obj2_2); thread2_2.start(); thread2_2 = new Thread(obj2_2); thread2_2.start(); thread2_2 = new Thread(obj2_2); thread2_2.start(); public void run() char myflag2_2; synchronized(this) ; System.out.println(myflag2_2 + “ Start“);for(int
9、 i=0; i_正确答案:(myflag2_2 = flag2_2+ (int)(high-low+1)*(Math.random() + low )解析:本题主要考查线程的创建与同步和控制随机数产生范围的算法。解题关键是,熟悉线程的概念和使用,线程的同步控制,char 类型数据的操作,以及熟悉随机数产生的方法 Math.random(),并且能够进一步根据需要控制随机数产生的范围。在本题中,main()方法中创建 3个线程,这 3个线程使用 obj2_2对象。线程调用 start()方法来中断,使一个新的线程开始执行,并且调用 run()方法。第 1空,run()方法为自己设置一个线程的标志
10、,并为下一个线程的使用增加这个标志值,由于此时线程正在处理中,因此在同步块中完成修改标志的语句放在同步块中。第 2个空,通过 low和 high两个参数,控制产生随机数的范围,将基本的数学思想应用于程序设计中。3.综合应用题 下面是一个 Applet程序,其功能是根据给出的小时,分钟和秒数计算相等的秒数,即 将1分钟化为 60秒,依此类推。要求建立一个时间类,时间参数均作为类的成员变量,并且给出换算时间的方法,也作为这个类的成员函数,可以供外部对象进行调用。同时还需要在输出窗口中显示换 (分数:-1.00)_正确答案:(out=h*3600+m*60+s g.drawString (“合计:“
11、+nSum+“秒“, 20, 90) System.out.println(“合计:“+nSum+“秒“) )解析:本题主要考查 Applet的窗口,文件和文件 I/O,面向对象的基本概念以及基于文本的应用。解题关键是熟悉 Applet的执行过程,会使用 Graphics类的基本方法在用户界面中输出字符信息,会将Applet面向对象的基本思想与文件操作相结合,编写有一定综合性的程序。本题中,第 1处,基本常识,1小时等于 3600秒,这里主要是要熟练掌握运算表达式的写法。第 2处与第 3处相同的错误,不可以直接用 objTime3_3对象访问类的成员变量,应该调用成员函数,如果不调用方法去计算,得不到正确的结果