选择题
公共知识
【1】下列叙述中正确的是()。〖A〗算法的效率只与问题的规模有关, 而与数据的存储结构无关 〖B〗算法的时间复杂度是指执行算法所需要的计算工作量 〖C〗数据的逻辑结构与存储结构是一一对应的 〖D〗算法的时间复杂度与空间复杂度一定相关 算法的效率与问题的规模和数据的存储结构都有关, A错误。算法的时间复杂度, 是指执行算法所需要的计算工作量, B正确。由于数据元素在计算机存储空间中的位置关系可能与逻辑关系不同, 因此数据的逻辑结构和存储结构不是一一对应的, C错误。算法的时间复杂度和空间复杂度没有直接的联系, D错误。 【2】下列叙述中正确的是()。
〖A〗线性表链式存储结构的存储空间一般要少于顺序存储结构 〖B〗线性表链式存储结构与顺序存储结构的存储空间都是连续的 〖C〗线性表链式存储结构的存储空间可以是连续的, 也可以是不连续的 〖D〗以上说法均错误 线性表的顺序存储结构具备如下两个基本特征: (1)线性表中的所有元素所占的存储空间是连续的; (2)线性表中各数据元素在存储空间中是按逻辑顺序依次存放的。用一组任意的存储单元来依次存放线性表的结点, 这组存储单元既可以是连续的, 也可以是不连续的, 甚至是零散分布在内存中的任意位置上的。因此C正确。 【3】某二叉树共有12个结点, 其中叶子结点只有1个。则该二叉树的深度为(根结点在第1层)()。
〖A〗3 〖B〗6 〖C〗8 〖D〗12 二叉树中, 度为0的节点数等于度为2的节点数加1, 即n2 = n0 - 1, 叶子节点即度为0, n0 = 1, 则n2 = 0, 总节点数为12 = n0 + n1 + n2 = 1 + n1 + 0, 则度为1的节点数n1 = 11, 故深度为12, 选D。 【4】对长度为n的线性表作快速排序, 在最坏情况下, 比较次数为()。
〖A〗n 〖B〗n - 1 〖C〗n(n - 1) 〖D〗n(n - 1) / 2 快速排序最坏情况就是每次选的基准数都和其他数做过比较, 共需比较(n - 1) + (n - 2)+…+1 = n(n - 1) / 2, 选D。 【5】结构化程序设计中, 下面对goto语句使用描述正确的是()。
〖A〗禁止使用goto语句 〖B〗使用goto语句程序效率高 〖C〗应避免滥用goto语句 〖D〗以上说法均错误 结构化程序设计中, 要注意尽量避免goto语句的使用, 故选C。 【6】下面不属于软件测试实施步骤的是()。
〖A〗集成测试 〖B〗回归测试 〖C〗确认测试 〖D〗单元测试 软件测试主要包括单元测试、集成测试、确认测试和系统测试。 【7】下面不属于软件需求分析阶段主要工作的是()。
〖A〗需求变更申请 〖B〗需求分析 〖C〗需求评审 〖D〗需求获取 需求分析阶段的工作可概括为4个方面:①需求获取。②需求分析。③编写需求规格说明书。④需求审评。 【8】一般情况下, 当对关系R和S进行自然连接时, 要求R和S含有一个或者多个共有的()。
〖A〗记录 〖B〗行 〖C〗属性 〖D〗元组 自然连接是一种特殊的等值连接, 它满足下面的条件:①两关系间有公共域; ②通过公共域的等值进行连接, 选C。 【9】有三个关系R, S和T如下:
则由关系R和S得到关系T的操作是()。
〖A〗选择 〖B〗差 〖C〗交 〖D〗并 关系T是关系R的一部分, 并且是关系R去掉R和S相同的元素, 符合差操作。 【10】有表示公司和职员及工作的三张表, 职员可在多家公司兼职。其中公司C(公司号, 公司名, 地址, 注册资本, 法人代表, 员工数), 职员S(职员号, 姓名, 性别, 年龄, 学历), 工作W(公司号, 职员号, 工资), 则表W的键(码)为()。
〖A〗公司号, 职员号 〖B〗职员号, 工资 〖C〗职员号 〖D〗公司号, 职员号, 工资 由于职员可以再多加公司兼职, 表W的键(码)应为公司关系和职员关系的主码, 即公司号和职员号。
专业知识
【11】下列关于package语句的说法中, 错误的是〖A〗程序中可以包含1个package语句 〖B〗程序中至少要包含1个package语句 〖C〗若包含package语句, 则该语句必须是程序的第一条语句 〖D〗若程序中没有出现package语句, 则缺省的包为当前目录 在包下面建一个文件, package语句在第一行, 选项A正确; package语句有且只能有一个, 选项B错误; package语句必须在除注释外的第一行才可以通过编译, 选项C正确, 如果没有在包下建.class文件, eclipse会自动添加包名为当前的项目名; 选项D正确, 本题答案为B。 【12】Java编译器会将Java程序转换为一种代码, 该代码是
〖A〗字节码 〖B〗可执行代码 〖C〗机器代码 〖D〗不确定 Java编译器会将Java程序编译成.class结尾的字节码文件, 所以选项A正确; 字节码文件需要在虚拟机里面运行, 并不是可执行代码, 所以选项B错误; JVM会把.class转换成本地机器码进行运行, 所以C错误。本题答案为A。 【13】下列变量名中不合法的是
〖A〗something 〖B〗shape_id 〖C〗test2012 〖D〗2letters 变量名可以由字母组成, 也可以由字母开头, 选项A正确; 变量名可以由下划线组成, 也可以由下划线开头, 选项B正确; 变量名可以是下划线, 字母, $, 数字组成, 选项C正确; 变量名不能由数字开头, 选项D错误。本题答案为D。 【14】下列代码段执行后, k 的值为
int x = 3, y = 4;
int k = ++ x * y++;
〖A〗12
〖B〗15
〖C〗16
〖D〗20
本题考查的是 ++i 和 i++的区别, ++i是i的值先加1, 然后再进行运算, 而i++是先将i 进行运算, 然后再自身加1, 本题第二行代码k = 4 * 4为16, 答案C正确。计算完x的值为4, y的值为5。本题答案为C。
【15】下列选项中的逻辑运算符是〖A〗|| 〖B〗? : 〖C〗>> 〖D〗>= ||是逻辑或, 所以选项A正确, ?: 是三目运算符, >>是带符号右移, >=是关系运算符, 本题答案为A。 【16】下列代码段执行后, m 的值为
int x = 3, y = 8, z = 5, m;
if (x > y)
m = x;
else
m = y;
if (m < z)
m = z;
〖A〗3
〖B〗5
〖C〗8
〖D〗16
本题考查的是“=”的用处, 在java运算符中“=”是赋值的作用, 第二行代码, (x > y)结果为false, 执行第五行代码, m = y, 然后m = 8; 继续执行第六行代码, (m < z)的结果为false, 不执行第七行代码, 程序结束, 最后的结果m的值为8, 选项C正确。
【17】下列代码段执行后的结果是int sum = 0;
for (int i = 1; i < 10; i = i + 2)
if (i % 3 == 0)
sum += i;
System.out.println(sum);
〖A〗4
〖B〗18
〖C〗12
〖D〗25
本题考查的是java的for循环和算术运算符, sum += i等同于sum = sum + i; 在for循环里i的值可以取到1, 3, 5, 7, 9, 而只有满足是3的倍数才会进行if条件里面的操作, 第一次, sum += 3; sum的值为3, 第二次sum += 9; sum的值为12, 最后输出的结果为12, 选项C正确。本题答案为C。
【18】下列选项中, 循环会无限执行的是〖A〗for (int i = 1; i < 10; i++) System.out.print(" " + i); 〖B〗int i = 1; while (true) { System.out.print(" " + i); i++; if (i > 5) break; } 〖C〗int i = 1; while (i < 10) System.out.print(" " + i); 〖D〗for (int i = 10; i > 0; i--) System.out.print(" " + i); 本题考查的两种循环结构, for循环和while循环, 因为选项C里面i的值没有自增, 一直都是1, 一直都满足i < 10的条件。所以会导致程序陷入死循环。所以选项C正确。本题答案为C。 【19】下列代码段执行后的结果是
int x = 5;
do {
x *= 2;
System.out.print(" " + x);
} while (x <= 5);
〖A〗5
〖B〗10
〖C〗5 10
〖D〗5 10 15
本题考查的是do while的结构, 该结构至少会执行一次循环体。第一次打印x的值为10, 然后不满足x < 5的条件, 跳出循环。所以选项B正确。本题答案为B。
【20】下列代码段执行后的结果是int k = 0;
int[] num = { 3, 8, 2, 8, 5 };
for (int i = 0; i < 5; i++) {
if (num[i] > num[k]) {
k = i;
}
}
System.out.print(" " + k);
〖A〗0
〖B〗1
〖C〗2
〖D〗3
本题考查循环结构和“=”的赋值作用, 第一次循环if条件不满足, k = 0; i++后值为1, 第二次循环, 判断条件为true, k = 1, i++后为2, 第三次循环, 条件为false, k值不变为1, i++后为3, 判条件为false, k值不变为1, i++后为4, 第四次循环, 条件为false, k值不变为1, i++后为5, i < 5不满足for循环的条件, 循环结束, 最后k的值为1, 答案选B。本题答案为B。
【21】若数组a定义为 int[][] a = new int[3][4] , 则a是〖A〗一维数组 〖B〗二维数组 〖C〗三维数组 〖D〗四维数组 单行单列的数组是一维数组, 多行多列的数组为二维数组。本题的数组是一个三行四列的二维数组, 所以选项B正确。本题答案为B。 【22】关于下列代码的说法中, 正确的是
public class Animal {
static int[] legs = new int[10];
public static void main(String[] args) {
System.out.println(legs[9]);
}
}
〖A〗编译时将产生错误
〖B〗编译时正确, 运行时将产生错误
〖C〗输出0
〖D〗输出为空
本题考查数组中基本数据类型的默认值, 整数类型的默认值为0, 浮点类型的默认值为0.0, 字符类型的默认值为 / u0000, 布尔类型的默认值为false, 所以选项C正确。本题答案为C。
【23】下列代码的第10行语句运行时, 将执行的语句是class Animal {
public void bark(String i, String j) { ... }
public void bark(String i) { ... }
}
public class Dog extends Animal {
public void bark() { ... }
public static void main(String[] args) {
Animal a = new Animal();
a.bark("bowwow");
}
}
〖A〗第2行
〖B〗第3行
〖C〗第6行
〖D〗第7行
本题考查的是子类继承父类中的成员方法(除了被private修饰的), 父类中方法重写了bark(); 根据参数类型, 调用的是只有一个参数的bark()方法, 所以执行第三行代码。选项B正确。本题答案为B。
【24】StringBuffer类对象的长度是〖A〗固定的 〖B〗必须小于16个字符 〖C〗可变的 〖D〗必须大于16个字符 StringBuffer对象的每次修改都会改变对象自身, 且还是之前的对象, 在内存中的地址不变。所以选项A错误, C正确, 长度是可变的, 因此没有字符个数的限制, 所以BD错误。本题答案为C。 【25】下列代码中构造方法的返回类型是
public class Town {
public static void main(String[] args) {
Town c = new Town();
}
Town() {
System.out.println("Living in Town");
}
}
〖A〗18 0
〖B〗null
〖C〗integer
〖D〗String
〖E〗无
本题考查的是构造方法的特点: 1没有返回值, 且不能用void修饰, 2方法名和类名一致, 3不能直接调用, 而是在你new该类的对象的时候自动调用。所以本题答案选E。
【26】下列代码的运行结果是public class ThrowsException {
static void proc(int sel) throws ArithmeticException, ArrayIndexOutOfBoundsException {
System.out.println("In Situation" + sel);
if (sel == 0) {
System.out.println("no Exception caught");
return;
} else if (sel == 1) {
int iArray[] = new int[4];
iArray[4] = 3;
}
}
public static void main(String args[]) {
try {
proc(0);
proc(1);
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("catch " + e);
} finally {
System.out.println("in proc finally");
}
}
}
〖A〗In Situation0 no Exception caught In Situation1
〖B〗In Situation0 no Exception caught In Situation1 catch java.lang. ArrayIndexOutOfBoundsException: 4 in proc finally
〖C〗In Situation0 no Exception caught in proc finally
〖D〗In Situation0 no Exception caught In Situation1 in proc finally
本题考查异常的相关知识, 首先找到main函数, proc(0); 调用ThrowsException类相关的方法, 先打印In Situation0, 然后通过if条件语句, 打印"no Exception caught", 继续执行proc(1), 先打印In Situation1, 然后通过if条件语句, 因为iArray[4]该行代码下标越界, 所以报的是下标越界异常, 紧接着catch捕获了该异常并执行catch代码块里面的内容, finally代码块里面的内容无论有没有捕获到异常都一定会执行, 所以综合判断, 本题答案选B。
【27】下列代码的运行结果是public class ValuePass {
boolean fact;
public static void main(String args[]) {
float f;
ValuePass vp = new ValuePass();
f = 10;
System.out.println("float is:" + f);
vp.changeFloat(f);
System.out.println("changed float is:" + f);
vp.fact = true;
System.out.println("fact is:" + vp.fact);
vp.changeFact(vp);
System.out.println("changed fact is:" + vp.fact);
}
public void changeFact(ValuePass vp) {
vp.fact = false;
}
public void changeFloat(float f) {
f = 20;
}
}
〖A〗float is: 10.0 changed float is: 10.0 fact is: true changed fact is: false
〖B〗float is: 10.0 changed float is: 20.0 fact is: true changed fact is: false
〖C〗float is: 10.0 changed float is: 10.0 fact is: true changed fact is: true
〖D〗float is: 10.0 changed float is: 20.0 fact is: true changed fact is: true
本题考查全局变量与局部变量的作用范围问题, vp.changeFloat(f); 该方法里面的f是形式参数, 也是局部变量, 只能在该方法中起作用, 不会影响到方法外的全局变量的值。所以第二次打印f的值还是10.0, 而在changeFact(ValuePass vp)方法中, 通过对象来获取该类的成员变量, 所以, 会, 打印了false。综合分析, 本题答案为A。
【28】下列代码的运行结果是public class StringTest {
public static void main(String args[]) {
char chars[] = { 'J', 'a', 'v', 'a', 'l', 'a', 'n', 'g', 'u', 'a', 'g', 'e' };
String s = new String(chars);
String s1 = s.replace('a', 'b');
System.out.println(s1);
}
}
〖A〗Javalanguage
〖B〗Jbvalanguage
〖C〗Javalangubge
〖D〗Jbvblbngubge
本题考查的是String类的replace()方法, 将该字符串中所有的‘a’用‘b’来代替掉, 所以答案D正确。本题答案为D。
【29】下列说法中正确的是〖A〗java.io包中不存在兼有输入输出功能的类 〖B〗RandomAccessFile类可以在文件的任意位置读写一个记录 〖C〗RandomAccessFile类只实现了DataInput接口 〖D〗RandomAccessFile类只实现了DataOutput接口 RandomAccessFile是java. io包中的一个兼有输入输出功能的类, 所以A错误, RandomAccessFile既实现了DataInput接口, 又实现了DataOutput接口, 所以CD错误。本题答案为B。 【30】下列代码实现了以对象流方式向score.txt文件写入数据的功能。下划线处应填入的代码是
import java.io.*;
public class testOut {
public static void main(String[] args) {
int[] data = new int[3];
data[0] = 100;
data[1] = 95;
data[2] = 80;
try {
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("score.txt"));
out.________(data);
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
〖A〗writeOut
〖B〗output
〖C〗write
〖D〗writeObject
在API文档中, writeObject()方法是 将指定的对象写入 ObjectOutputStream, 所以本题选D。选项A和B两个方法不存在。本题答案为D。
【31】在随机文件流RandomAccessFile类中不能实现数据读取的方法是〖A〗readInt 〖B〗readChar 〖C〗skipBytes 〖D〗readDouble skipBytes()尝试跳过输入的 n 个字节以丢弃跳过的字节, 本题答案为C。 【32】下列能判断“score.dat”文件是否存在的语句是
〖A〗if (new File("score.txt").exists()) 〖B〗if (File.exists("score.txt")) 〖C〗if (File.exists("score.txt") == 1) 〖D〗if (exists("score.txt") == 1) 本题考查File类的exists()方法, 通过该方法的返回值为布尔类型, 该方法是没有参数的且不是静态方法么不能通过类名直接调用, 所以BC错误, D是完全语法错误。本题答案为A。 【33】JOptionPane类中的参数message的作用是
〖A〗定义作为此对话框的Component 〖B〗定义Message的样式 〖C〗定义显示的对话框类型 〖D〗定义对话框中所显示的描述消息 本题从字面意思解释就是信息的含义, 而message的作用是对对话框中的内容进行了一些描述。本题答案为D。 【34】下列选项中不是事件处理过程中所涉及的对象是
〖A〗事件 〖B〗事件源 〖C〗事件处理者 〖D〗事件保护 事件保护是事件处理过程中的应用, 不属于该问题所涉及的对象。本题答案为D。 【35】当鼠标拖动时, 产生的事件是
〖A〗ActionEvent 〖B〗ButtonEvent 〖C〗FocusEvent 〖D〗MouseEvent ActionEvent回车事件, ButtonEvent按钮事件, FocusEvent鼠标聚焦事件, MouseEvent鼠标事件, 所以本题答案为D。 【36】为了使下列程序正常运行并且输出10以内的偶数, 在下划线处应填入的是
class Test4
{
int i = 0;
public void run() {
while (i++<10)
if (i % 2 == 0)
System.out.println(i);
}
public static void main(String[] args) {
Thread t = new ;
t.start();
}
}
〖A〗extends Thread, Test4()
〖B〗implements Runnable, Test4()
〖C〗extends Runnable, Thread(new Test4())
〖D〗implements Thread, Thread(new Test4())
创建线程的两种方法要么实现Runnable接口要么继承Thread类, 本题正常运行并且输出10以内的偶数, 根据t.start(); 是启动线程, 需要让Tes4类成为线程, 再根据main函数中的多态, 则Test4需要继承Thread类。综合考虑答案A正确。本题答案为A。
【37】要实现线程同步, 建议使用的方法是〖A〗stop() 〖B〗suspend() 〖C〗start() 〖D〗wait() 在java.lang.object中, 实现线程通信有两个方法: wait()和notify(), 它们可以完成线程间同步。其中wait()方法使线程等待, 并且暂时释放其占有的对象锁。notify()方法通知因调用wait()方法而等待的线程重新占有该对象锁。本题答案为D。 【38】在堆栈类TheStack的定义中, 为了保证堆栈在并发操作中数据的正确性, 应在下划线处填入的代码是
public class TheStack {
_________ int idx = 0 ;
_________ char[] data = new char[10];
public synchronized void push(char c) { …… }
public synchronized void pop() { …… }
}
〖A〗public, private
〖B〗default, default
〖C〗public, public
〖D〗protected, private
public: 访问控制符指明该类为公共类, 可被其他类访问或引用其成员变量和成员方法。为了保证堆栈在并发操作中数据的正确性, 必须定义成公共变量。选项C正确, 本题答案为C。
【39】下列关于Applet的叙述中, 正确的是〖A〗Applet程序中不需要、也不能有main()方法 〖B〗Applet程序不需要编译 〖C〗Applet的主类要定义为Applet类或JApplet类的子类 〖D〗同一个页面中的Applet之间不能通信 Applet是Java与Web相结合而引入的重要的Java应用形式。Applet是Java类, 但自身不能运行, 必须嵌入在其他应用程序中运行, 因此不能直接由java.exe解释执行, 选项A说法错误。Applet的主类必须是java.appletApplet或JApplet类的子类。Applet与Application的主要区别在执行方式上, Application以main()方法为入口点运行, Applet要在浏览器或appletviewer中运行, 运行过程比Application更复杂。所以本题答案选C。 【40】下列程序定义了一个Applet, 在下划线处应填入的是
import java.awt.*;
import java.applet.*;
public class SayHi extends __________ {
public void paint(Graphics g) {
g.drawString("Hi!", 40, 40);
}
}
〖A〗JPanel
〖B〗JApplet
〖C〗applet
〖D〗Applet
含有Applet的网页的HTML文件代码中部带有 < applet > 和