1、国家二级( JAVA)机试模拟试卷 57及答案与解析 一、基本操作题( 30分) 1 下面的程序是用 do-while语句计算 10的阶乘。请在程序的每条横线处填写 1个语句,使程序的功能完整。 注意:请勿改动 main()主方法和其他已有的语句内容;仅在横线处填入适当的语句。 源程序文件代码清单如下: public class DoWhileLoop public static void main(_) int n=10; long result=1; do _; _; System.out.println(“10的阶乘为: “+result); 二、简单应用题( 40分) 2 请完成下列
2、Java程序。程序的功能是利用迭代法求一个数的平方根 (求平方根的迭代公式为: Xn+1=1/2(Xn+a/Xn)。 注意:请勿改动 main()主方法和其他已有的语句内容,仅在下 划线处填入适当的语句。 源程序代码文件清单如下: public class PingFangGen public static void main(String args ) System.out.println(Math.sqrt(2.0); static double sqrt(_) double x=1.0; do _; while(Math.abs(x*x-a)/a 1e-6); return x; 三、综
3、合应用题( 30分) 3 下面是一个 Applet程序,其功能是实现一个计数器,每隔 0.15秒计数器数值加1,数值动态变化,并且能够控制计数器的暂停和继续。要求通过使用 Swing的构件建立图形用户界面。主要包括一个文本区域,用于显示计数器结果:两个按钮,一个使计数器暂停,一个使计数器继续工作。请改正程序中的错 误 (有下划线的语句 ),使程序能输出正确的结果。 注意:不改动程序的结构,不得增行或删行。 源程序文件代码清单如下。 import javax.swing.*; import java.awt.*; import java.awt.event.*; /* applet code=“
4、ex19_3.class“ width=800 height=400 /applet */ public class ex19_3 extends JApplet private JTextField jtf=new JTextField(15); private JButton Hold=new JButton(“Hold“); private JButton resume=new JButton(“Resume“); private ex19_3th obj19_3th=new ex19_3th(); class ex19_3th extends Thread private int cn
5、t=0; private boolean bIsHold=false; public ex19_3th() start(); public void hold() bIsHold=true; public synchronized void fauxResume() bIsHold=false; wait (); public void run() while (true) try sleep(150); synchronized(this) while(bIsHold) notify(); catch(InterruptedException ie) System.err.println(“
6、Interrupted“); jtf.setText(cnt); public void init() Container cp=getContentPane(); cp.setLayout(new FlowLayout(); cp.add(jtf); Hold.addActionListener( new ActionListener() public void actionPerformed(ActionEvent ae) obj19_3th.hold ( ); ); cp.add(Hold); resume.addActionListener ( new ActionListener()
7、 public void actionPerformed(ActionEvent e) obj19_3th.fauxResume(); ); cp.add(resume); public static void main(String args) ex19_3 obj19_3=new ex19_3(); String str= obj19_3.getClass().toString(); if(str.indexOf(“class“) !=-1) str=str.substring(6); JFrame frm=new JFrame(str); frm.addWindowListener(ne
8、w WindowAdapter() public void windowClosing(WindowEvent we) System.exit(0); ); frm.getContentPane().add(obj19_3); frm.setSize(300, 200); obj19_3.init(); obj19_3.start); frm.setVisible(true); ex19_3.html HTML HEAD TITLE ex19_3 /TITLE /HEAD BODY applet code=“ex19_3.class“ width=800 height=400 /applet
9、/BODY /HTML 国家二级( JAVA)机试模拟试卷 57答案与解析 一、基本操作题( 30分) 1 【正确答案】 String args result*=n- while(n =1) 【试题解析】 本题主要考查 main()主方法的使用、 while循环语句的用法。解答本题的关键是熟练掌握 main()主方法的使用、 while循环语句的用法。在本题中,string args的作用是声明字符数组 args, result*=n-语句的作用是获得 n的阶乘并赋值给变量 result。 二、简单应用题( 40分) 2 【正确答案】 double a x=(x+a/x) 【试题解析】 本题主
10、要考查 do-while循环语句及 Java的基本运算。解答本题需要对 do-while循环语句的用法 熟练。 do-while循环又称 “直到型 ”循环,它的一般格式为: 初始化部分 do循环体部分;迭代部分; while(判断部分 )。说明如下: do-while结构首先执行循环体,然后计算终止条件,若结果为 true,则循环执行大括号中的语句或代码块,直到布尔表达式的结果为 false。 与 while结构不同的是, do-while结构的循环至少被执行 1次,这是 “直到型 ”循环的特点。在本题中, double a语句是定义一个 double型变量 a, x=(x+a/x)的功能是迭
11、代求出被开方的变量。 三、综合应用题( 30分) 3 【正确答案】 notify() wait() jtf.setText.(Integer.toString(cnt+) 【试题解析】 本题主要考查图形用户界面, Swing以及线程同步、共享、死锁相结合的综合应用。解题关键是熟悉 wait()方法和 notify()方法的含义, wait()必须被声明为 synchronized,这样它才能拥有对象锁。 fauxResume()把 bIsHold标志设为false,并调用 notify(),为了唤醒 synchronized子句中的 wait(), notify()也必须被声明为 synchronized,这样才能在调用 notify()之前获得对象锁,然后该对象锁才能在 wait()执行时被运用。本题中,第 1和第 2处,应该在 bIsHold为 true时调用wait(),而在 fauxResume()中调用 notify();第 3处,需要对 int类型做转换才能够作为 String类型输出,并且要对计数器变量 cnt做累加。程序运行结果如下。