三、程序填空题(本大题共5小题,每空2分,共20分)
第1题回文是指正读和反读都一样的字符串。方法f27(String s)的功能是判断一个字符串是否为回文。例如:s="abccba",该方法返回值为true;n="abc",该方法返回值为false。
boolean f27(String s)
{
int i=0;
while(i<s.length()/2)
{
String s1,s2;
s1=s.substring(i,i+1);
s2=s.substring(___);
if(!(s1.equals(s2)))break;
i++;
}
return___;
}
【正确答案】s.length()-i-1,s.length()-i
i<s.length()/2?false:true
第2题以下程序的功能是:生成菜单条(menubar)、菜单(menu)和菜单项(item1,item2)对象,有“文件”菜单,“文件”菜单中有“新建”,“保存”菜单项。
import javax.swing.*;
public class Class2903
{
public Class2903()
{
JFrame myWin=new JFrame();
JMenuBar menubar=new JMenuBar();
___
JMenuItem item1=new JMenuItem("新建");
JMenuItem item2=new JMenuItem("保存");
myWin.setJMenuBar(menubar);
___
menu.add(item1);
menu.add(item2);
myWin.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
myWin.setBounds(100,100,200,200);
myWin.setVisible(true);
}
public static void main(String[]args)
{
new Class2903();
}
}
menubar.add(menu);"/>
【正确答案】JMenu menu=new JMenu("文件");
menubar.add(menu);
第3题程序运行结果如下图:上边,左边和右边是三个按钮,下边是一个内容为“Class2804”的文本框txt。
import java.awt.*;
import javax.swing.*;
public class Class2804
{
public static void main(String[]args)
{
JFrame myWin=new JFrame("Class2804");
myWin.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
myWin.setBounds(100,200,300,200);
Container con=myWin.getContentPane();
con.setBackground(Color.red);
con.setLayout(new BorderLayout());
___
JButton button1=new JButton("左边");
JButton button2=new JButton("右边");
JButton button3=new JButton("上边");
con.add(button1,"West");
con.add(button2,"East");
con.add(button3,"North");
___
myWin.setVisible(true);
}
}
con.add(txt,"South");"/>
【正确答案】JTextField txt=new JTextField("Class2804");
con.add(txt,"South");
第4题下面程序产生一个窗口,1秒后自动关闭。
public class Class3104 implements Runnable
{
___
{
try
{
Thread.sleep(1000);
}
catch(InterruptedException e){}
System.exit(0);
}
public Class3104()
{
JFrame my=new JFrame();
my.setBounds(100,100,600,300);
my.setVisible(true);
}
public static void main(String[]args)
{
Class3104 t=new Class3104();
Thread tt=___;
tt.start();
}
}
【正确答案】public void run()
new Thread(t)
第5题方法f2701(int n)返回十进制整数n的位数。
___f2701(int n)
{
int c;
for(c=0;___;c++)n/=10;
return c;
}
【正确答案】int
n!=0
四、程序分析题(本大题共5小题,每小题4分,共20分)
第1题阅读下面程序,写出程序运行结果。
class A
{
B obj;
A()
{
obj=new B();
obj.print();
System.out.println("AAA");
}
class B
{
public void print()
{System.out.println("BBB");}
}
}
public class Class3202
{
public static void main(String arg[])
{A obj=new A();}
}
【正确答案】程序运行结果:
BBB
AAA
第2题阅读程序,画出程序运行后初始界面并写出程序功能。
import javax.swing.*;
import java.awt.event.*;
public class Class3403 extends JFrame implements ActionListener
{
JButton b1=new JButton("b1");
JButton b2=new JButton("b2");
public Class3403()
{
super("Class3403");
setSize(300,100);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel=new JPanel();
panel.add(b1);panel.add(b2);
setContentPane(panel);
b1.addActionListener(this);
b2.addActionListener(this);
setVisible(true);
}
public void actionPerformed(ActionEvent e)
{
Object s=e.getSource();
if(s==b1)setTitle("Teacher");
if(s==b2)setTitle("Student");
}
public static void main(String[]args)
{
new Class3403();
}
}
【正确答案】程序运行后初始界面为:
程序功能:是单击b1按钮窗口标题变为Teacher,单击b2按钮窗口标题变为Student。
第3题阅读下列程序,写出程序运行结果。
class A1
{
public void f(int aa,int bb)
{
System.out.println(aa+bb);
}
}
class A2 extends A1
{
public void f(int aa,int bb)
{
System.out.println(aa-bb);
}
}
public class C3201 extends A2
{
public void f(int aa,int bb)
{
System.out.println(aa*bb);
}
public static void main(String[]args)
{
A1 a=new A1();
A1 a1=new A2();
A2 a2=new C3201();
a.f(20,10);
a1.f(20,10);
a2.f(20,10);
}
}
【正确答案】运行结果:
30
10
200
第4题阅读下列程序,写出程序功能。
import javax.swing.*;
public class C3501
{
public static void main(String[]args)
{
JFrame myWin=new JFrame("C3501");
myWin.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JMenuBar jmb=new JMenuBar();
myWin.setJMenuBar(jmb);
myWin.setBounds(100,200,300,300);
JMenu jm=new JMenu("AAA");
jmb.add(jm);
JMenuItem jmi=new JMenuItem("AA1");
jm.add(jmi);
JMenu jm2=new JMenu("AA2");
jm.add(jm2);
JMenuItem jmi2=new JMenuItem("AA21");
jm2.add(jmi2);
myWin.setVisible(true);
}
}
【正确答案】程序功能:应用程序窗口生成一个下拉菜单,菜单名是AAA,有两个菜单项AA1和AA2,其中AA2有子菜单,子菜单中有一个菜单项AA21。
第5题阅读下列程序,写出程序运行结果。
class A
{
int x,y;
A(int xx,int yy){x=xx;y=yy;}
}
interface A3202{int f3202(A a);}
interface B3202{int g3202();}
public class C3202 extends A implements A3202,B3202
{
A a=new A(x,y);
C3202(int x,int y)
{
super(x,y);
this.x=x*x;
this.y=y*y;
}
public int f3202(A a){return x*a.x+x*a.y;}
public int g3202(){return x*a.x+x*a.y;}
public static void main(String[]args)
{
int x=10,y=20;
A a=new C3202(x,y);
C3202 c=new C3202(x,y);
System.out.println(a.x+","+a.y);
System.out.println(c.f3202(a));
System.out.println(c.g3202());
}
}
【正确答案】输出结果:
100,400
50000
3000
[解析]本程序中有很多重复的命名,应注意分清。两个接口方法中用的a.x和a.y并不是同一个对象a的成员。f3202中使用的a是参数传递的对象,是main()中定义的那个对象a,它的x和y值经过运算后是100和400。g3202中使用的a是类C3202中定义的对象a,它的成员x和y的值是在类C3202中定义a时给的值,这个值是C3202的构造方法传的10和20,而此时c对象从A类继承来的x和y的值经过运算后分别是100和400。
另外,A a=new A(x,y);这一句在执行时相当于:
A=a;
C3202(x,y)
{super(x,y);a=new A(x,y);…………}
五、程序设计题(本大题共2小题,每小题6分,共12分)
第1题编写一个方法string3703,要求在一个字符串数组中找出长度最短的一个元素。其中字符串数组是方法的参数,最短的一个元素是方法的返回值。
System.out.println(string3703(b));
}
}
输出结果为:as"/>
【正确答案】方法如下:
String string3703(String[]a)
{
String maxStr=a[0];
for(int i=1;i<a.length;i++)
if(maxStr.length()<a[i].length())
maxStr=a[i];
return maxStr;
}
[解析]完整的程序如下:
public class Class3703
{
static String string3703(String[]a)
{
String maxStr=a[0];
for(int i=1;i<a.length;i++)
if(maxStr.length()>a[i].length())
maxStr=a[i];
return maxStr;
}
public static void main(String[]args)
{
String b[]={"asdf","saffdfd","as"};
System.out.println(string3703(b));
}
}
输出结果为:as
第2题编写一个方法hex3705(),要求将一个以字符串(如有字母用大写)形式表示的十六进制数转换十进制正整数,其中字符串为方法参数,正整数为返回值。
}
}
运行结果为:269"/>
【正确答案】int hex3705(String s)
{
int n=0;
byte b[]=s.getBytes();
int i=b.length,k=1;
while(--i>=0)
{
int t=b[i]-48;
if(t>10)t=t-7;
n=n+t*k;
k*=16;
}
return n;
}
[解析]完整的程序如下:
public class Class3705
{
static int hex3705(String s)
{
int n=0;
byte b[]=s.getBytes();//字符串存入字节数组,转化为字符
int i=b.length,k=1;
while(--i>=0)//对字节数组每个元素进行分析
{
int t=b[i]-48;//字符‘0’的ASCII码值是48
if(t>10)t=t-7;//若是字母,需要减55,‘A’的ASCII码值是65
n=n+t*k;
k*=16;//k是16的幂
}
return n;
}
public static void main(String[]args)
{
System.out.println(hex3705("10D"));
}
}
运行结果为:269
六、简答题(本大题共6小题,每小题3分,共18分)
第1题设有整型变量x和y的值分别为5和110。请指出执行了下面循环语句后,变量x和y的值分别是多少?
do{x=y/x;y=y-x;}while(y>=1);
【正确答案】(P35)x=18,y=0
第2题请写出表示条件“x=2与y=3最多只有一个成立”的Java表达式。
【正确答案】(P15)x==2&&y!=3||x!=2&&y==3||x!=2&&y!=3
第3题一个网络关系数据库应用系统是一个三层次结构,请写出这三个层次结构。
【正确答案】(P198)
(1)客户机与服务器采用网络连接。
(2)客户机端应用程序按通信协议与服务器端的数据库服务程序通信。
(3)数据库服务程序通过SQL命令与数据库管理系统通信。
第4题标签(JLabel)是最简单的Swing组件,程序关于标签的基本内容有哪三个方面?
【正确答案】(P91)
①声明一个标签名。
②创建一个标签对象。
③将标签对象加入到某个容器中。
第5题用一个Java语句完成下面的要求:
先将整型变量a的值加1,再把它加到变量b中。
【正确答案】(P14)b=b+(++a);或者b+=++a;
[解析]这是一个表达式语句,不要忘记加分号。不能写成b=b+++a;这相当于b=(b++)+a。
第6题下列类的定义中有哪些错误?写出错误原因或者进行改正。
class C2202
{
int x;
C2202(int x){this.x=x;}
C2202(){C2202(10);}
int f()
{
int a=1;
x=a;
}
void g()
{
int y;
y=a+x;
}
}
【正确答案】(1)C2202(){C2202(10);}错误,可改为:C2202(){this(10);}。
(2)int f()错误,可改为:void f()。
(3)y=a+x;错误,原因是引用非法,在g方法中不能使用a。