选择题
公共知识
【1】设数据结构B = (D, R), 其中
D = { a, b, c, d, e, f }
R = { (f, A), (d, B), (e, D), (c, e), (a, C) }
该数据结构为()。
D = { a, b, c, d, e, f }
R = { (f, A), (d, B), (e, D), (c, e), (a, C) }
该数据结构为()。
数据的逻辑结构有两个要素: 一是数据元素的集合, 通常记为D; 二是D上的关系, 它反映了D中各数据元素之间的前后件关系, 通常记为R。即一个数据结构可以表示成B = (D, R)。其中B表示数据结构。为了反映D中各数据元素之间的前后件关系, 一般用二元组来表示。例如, 假设a与b是D中的两个数据, 则二元组(a, b)表示a是b的前件, b是a的后件。如果一个非空的数据结构满足下列两个条件:①有且只有一个根结点; ②每一个结点最多有一个前件, 也最多有一个后件。则称该数据结构为线性结构。如果一个数据结构不是线性结构, 则称之为非线性结构。根据上述理论, 本题中f为根结点, 每个结点有一个前件和一个后件, 符合线性结构的定义。故本题答案为A选项。
【2】下列叙述中错误的是()。
在循环队列中, 当front = rear时, 不能确定是队列满还是队列空。在实际使用循环队列时, 为了能区分队列满还是队列空, 通常还需要增加一个标志s。当s = 0时表示队列空, 当s = 1且front = rear时表示队列满。故本题答案为A选项。
【3】某带链栈的初始状态为 top = bottom = NULL, 经过一系列正常的入栈与退栈操作后, top = bottom = 20。该栈中的元素个数为()。
带链的栈是具有栈属性的链表。线性链表的存储单元是不连续的, 为把存储空间中一些离散的空闲存储结点利用起来, 把所有空闲的结点组织成一个带链的栈, 称为可利用栈。线性链表执行删除操作运算时, 被删除的结点可以“回收”到可利用栈, 对应于可利用栈的入栈运算, 线性链表执行插入运算时, 需要一个新的结点, 可以在可利用栈中取栈顶结点, 对应于可利用栈的退栈运算。可利用栈的入栈运算和退栈运算只需要改动top指针即可。当top = bottom = 20时链栈中的元素个数为1。故本题答案为A选项。
【4】设一棵度为3的树, 其中度为2, 1, 0的结点数分别为3, 1, 6。该树中度为3的结点数为()。
根据题目有6个度为0的结点:
1个度为1的结点:
3个度为2的结点:
因此最后度为3的结点有1个:
故本题答案为A选项。
【5】下面描述错误的是()。
模块独立性的概念是抽象、模块化、信息隐蔽和局部化的直接结果。模块的独立性是指软件模块的编写和修改应使其具有独立功能, 且与其他模块的关联尽可能少。故本题答案为A选项。
【6】下面属于黑盒测试方法的是()。
黑盒测试方法也称为功能测试或数据驱动测试。黑盒测试是对软件已经实现的功能是否满足需求进行测试和验证。黑盒测试方法主要有等价类划分法、边界值分析法、错误推测法和因果图等。白盒测试方法主要有逻辑覆盖测试(语句覆盖、路径覆盖、判断覆盖、条件覆盖)、基本路径测试等。故本题答案为A选项。
【7】下面模型中为概念模型的是()。
数据模型按照不同的应用层次分为3种类型: 概念数据模型、逻辑数据模型、物理数据模型。概念数据模型有实体联系模型(E - R模型)、面向对象模型及谓词模型; 逻辑数据模型有层次模型、网状模型、关系模型和面向对象模型。故本题答案为A选项。
【8】学生关系模式中有D(D#, Dn, Dl, DAddr)(其属性分别为系编号、系名称、系主任和系地址)和S(S#, Sn, SG, Date, Maj, D#)(其属性分别为学号、姓名、性别、入学日期、专业和系编号)两个关系, 关系S的主键(码)是S#, 关系S的外键(码)是()。
在二维表中凡能唯一标识元组的最小属性集称为该表的键或码。表A中的某属性集是某表B的键, 则称该属性集为A的外键或外码。故本题答案为A选项。
【9】关系的实体完整性要求关系中不能为空的属性是()。
关系模型中可以有3类完整性约束: 实体完整性约束、参照完整性约束和用户定义的完整性约束。实体完整性约束是指若属性M是关系的主键, 则属性M中的属性值不能为空值。故本题答案为A选项。
【10】学生选修课程的关系模式为SC(S#, Sn, Sd, Sa, C#, G)(其属性分别为学号、姓名、所在系、年龄、课程号和成绩); C(C#, Cn, P#)(其属性分别为课程号、课程名、先选课)。关系模式中包含对主属性部分依赖的是()。
若X→Y, 但Y不完全依赖于X, 则称Y对X部分函数依赖。关系模式SC中, 主键为(S#, C#), 但显然有S#->Sd, S#->Sa, 存在非主属性对主属性的部分依赖。故本题答案为A选项。
专业知识
【11】下列关于import语句的说法中, 错误的是
Java程序中使用import语句导入一个包中的类。在一个Java源程序中可以有0条或多条import语句, 但必须在所有类定义之前引入标准类。选项C正确, 本题答案为C。
【12】下列标识符符合Java命名约定的是
标识符可以由字母、数字、下画线“-”和美元符“$”组成, 但数字不能开头, 不能用关键字作标识符。类名和接口名都采用完整的英文描述符, 并且所有单词的第一个字母大写; 变量和方法名采用完整的英文描述符, 第一个字母小写, 任何中间的单词首字母大写; 包采用完整的英文描述符, 且都是由小写字母组成。(参见Java编程规范), 选项C正确, 本题答案为C。
【13】执行下列语句后, k的值为
int x = 4, y = 5;
int k = -- x * y++;
本题考查++, --在前和在后的运算规则, 在前要先自身 + 1或 - 1然后再参与运算, 在后先参与运算再自身 + 1或 - 1, 本题结果是3 * 5 = 15, 选项C正确, 本题答案为C。
【14】下列代码段执行后的结果是
char k = 'B', p = 'F';
int data = p - k ;
System.out.println("" + data);
字符在参与运算时会转换成对应的10进制数参与运算, B对应的10进制数是66, F对应的10进制数是70, 选项D正确, 本题答案为D。
【15】经常与switch语句一起使用的语句是
break语句可以根据需要, 使用在循环体和switch语句体内, 选项A正确, 本题答案为A。
【16】下列代码段执行后, x的值为
int x = 5;
if (x > 1 && x < 5)
x += 2;
else if (x > 10 || x < 20)
x -= 2;
else
x *= 2;
X = 5不满足if条件中的布尔表达式, 满足else if中的表达式, 执行语句3块, 选项D正确, 本题答案为D。
【17】下列代码段执行后, y的值为
int d, y = 0;
int x = 123;
while (x != 0) {
d = x % 10;
y = y * 10 + d;
x = x / 10;
}
%在java中做取余操作, /在java中做取整操作 第一次: 3 3 12 第二次: 2 32 1 第三次: 1 321 0 选项B正确, 本题答案为B。
【18】下列代码段执行后, result的值为
long result = 0;
for (int i = 1; i < 5; i++)
result = result + i * (i + 1);
第一次循环结果: 0 + 2 第二次循环结果: 2 + 6 第三次循环结果: 8 + 12 第四次循环结果: 20 + 20 选项C正确, 本题答案为C。
【19】下列代码段执行后的结果是
int i, j;
for (i = 1; i < 3; i++) {
for (j = 10; j >= 0; j--)
if ((j % 3) == 0) break;
System.out.print("" + i + "," + j + ",");
}
里层for循环缺少大括号, break默认跳出离它最近的循环体, 本程序直接跳出第一层循环, 选项D正确, 本题答案为D。
【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(" " + num[k]);
循环第二次执行if中的语句块, k = 1, num[1] = 8, 选项D正确, 本题答案为D。
【21】类变量必须带有的修饰符是
在java类变量用static修饰会成为静态变量, 可以直接通过类名去调用, 不需new对象。选项A正确, 本题答案为A。
【22】关于下列代码的说法中, 正确的是
public class BankAccount {
static double loan[] = new double[10];
public static void main(String args[]) {
System.out.println(loan[9]);
}
}
数组在java中具有默认值, double类型默认值为0.0。输出的是0.0选项C正确, 本题答案为C。
【23】下列代码的第10行语句运行时, 将执行的语句是
class Reptile {
public void crawl(int i, int j) { ... }
public void crawl(int i) { ... }
}
public class Tortoise extends Reptile {
public void crawl() { ... }
public void crawl(int i) { ... }
public static void main(String args[]) {
Reptile a = new Tortoise();
a.crawl();
}
}
父类的引用指向子类的对象, 向上造型, 体现多态(重写与重载), 编译期看父类, 运行期看子类, 子类的方法要应对父类的方法。本题答案为D。
【24】下列代码中构造方法的返回类型是
public class Village {
public static void main(String args[]) {
Village c = new Village();
}
Village() {
System.out.println("hiding in Village");
}
}
java中的构造方法是用来初始化一个对象的, 并为为实例变量赋予合适的初始值。因此构造方法不需要返回类型。选项D正确, 本题答案为D。
【25】如果要抛出异常, 应该采用的子句是
当程序中需要抛出异常时, 应该使用throw子句, try catch语句是捕获并处理异常, finally代码块无论如何都会执行里面的代码块, 选项B正确, 本题答案为B。
【26】下列代码的运行结果是
public class ExceptionsHandling {
static void test(int i) throws ArithmeticException, ArrayIndexOutOfBoundsException {
if (i == 0) {
System.out.println("Everything is OK");
return;
} else if (i == 1) {
int myArray[] = new int[4];
myArray[4] = 3;
}
}
public static void main(String args[]) {
try {
test(0);
test(1);
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("catch " + e);
} finally {
System.out.println("test over");
}
}
}
test(0)执行if语句块里面的内容, 输出Everything is OK, test(1)数组下标越界, 通过throws抛出了, finally代码块里面的内容无论如何都会执行, 选项B正确, 本题答案为B。
【27】下列代码的运行结果是
public class ValueChange {
char c;
public static void main(String args[]) {
long l;
ValueChange vc = new ValueChange();
l = 50;
System.out.println("long is:" + l);
vc.changelong(l);
System.out.println("changed long is:" + l);
vc.c = 'J';
System.out.println("char is:" + vc.c);
vc.changeName(vc);
System.out.println("changed char is:" + vc.c);
}
public void changelong(long l) {
l = 60;
}
public void changeName(ValueChange vc) {
vc.c = 'X';
}
}
public void changelong(long l) { l = 60; } 此时的l值仍然是50, 60没有覆盖l值。 public void changeName(ValueChange vc) { vc.c = 'X'; } vc.c已经重新辅助为X , 选项B正确, 本题答案为B。
【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.substring(5, 10);
String s2 = s1.toUpperCase();
System.out.println(s2);
}
}
substring()方法用于提取字符串中介于两个指定下标之间的字符, toUpperCase()将所有的字母全部转为大写, 选项D正确, 本题答案为D。
【29】在File类中, 能返回字符串形式的文件路径名的方法是
getParent()方法返回的父级路径字符串, 如果此抽象路径名的父或如果此路径名没有指定父目录则为null。getParentFile()的作用是获得父目录 getName()是用来返对象所代表的具体对象的名称。 选项A正确, 本题答案为A。
【30】下列代码实现了以对象流方式从score.txt文件读出数据的功能。下划线处应填入的代码是
import java.io.*;
public class testIn {
public static void main(String[] args) {
try {
ObjectInputStream in =
new ObjectInputStream(new FileInputStream("score.txt"));
int[] pdata = new int[3];
pdata = (int[]) in._________();
in.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
虚拟机会试图调用对象类里的readObject(), 读出byte, 选择C正确, 本题答案为C。
【31】下列选项中不是DeflaterOutput子类的选项是
Deflater 是用于压缩数据包的, 当数据包比较大的时候, 采用压缩后的数据, 可以减少带宽的占用, 加多传送的速度, GZipOutputStream ZipOutputStream JarOutputStream, 都属于压缩包类型, 选项D不满足条件, 本题答案为D。
【32】下列说法中错误的是
1、该对象的类必须实现Serializable接口。 2、该对象的串行化成员必须是非静态成员变量, 即不能保存任何的成员方法和静态的成员变量, 而且串行化保存的只是变量的值, 对于变量的任何修饰符, 都不能保存。而对于某些类型的对象, 其状态是瞬时的, 这样的对象是无法保存其状态的, 例如一个Thread对象, 或一个FileInputStream对象, 对于这些字段, 我们必须用transient关键字标明 。(注: 保存任何的成员方法和静态的成员变量没有任何的意义, 因为对象的类已经完整的保存了他们) 3、要串行化一个对象, 必须与一定的对象输入 / 输出流联系起来, 通过对象输出流将对象状态保存下来, 再通过对象输入流将对象状态恢复。 选项B正确, 本题答案为B。
【33】JOptionPane类中参数optionType的值不可能是
static int DEFAULT_OPTION 用于 showConfirmDialog 的类型。 static int YES_NO_OPTION 用于 showConfirmDialog 的类型。 static int OK_CANCEL_OPTION 用于 showConfirmDialog 的类型。 选项A正确, 本题答案为A。
【34】JFrame的缺省布局管理器是
JFrame 缺省布局使用的是边界布局管理器(BorderLayout). 边界布局管理器(BorderLayout)是将容器控件划分为上北(NORTH)、下南(SOUTH)、左西(WEST)、右东(EAST)、中间(CENTER)五个位置, 使用此局布的时候可以将控件分别放置在这五个位置上进行显示. 选项B正确, 本题答案为B。
【35】当按钮被按下时, 应执行的方法是
这是 ActionListener 中定义的方法, java 的事件监听器的一个, 例如点击按钮、文本框里按下回车, 就会调用这个里面的方法。选项A正确, 本题答案为A。
【36】为了使下列程序正常运行并且输出字符串abc, 在下划线处应填入的是
public class Test implements Runnable {
public static void main(String[] args) {
Thread t = new___________;
t.start();
}
public void run() {
System.out.println("abc");
}
}
本题创建线程的方式是实心Runnable接口, 但最终启动线程还是Thread类中的start(), 选项C正确, 本题答案为C。
【37】如果线程正处于阻塞状态, 不能够使线程直接进入可运行状态的是
notify 仅仅通知一个线程, 并且我们不知道哪个线程会收到通知, 选项C正确, 本题答案为C。
【38】在下列Counter类的定义中, 由于某些代码定义不当, 使得对计数器counter的并发控制无法实现, 有问题的代码是
public class Counter {
public int counter = 0;
synchronized void add() {
counter ++;
}
public int get() {
counter --;
return counter;
}
}
要想对计数器并发实现, 必须将counter变量定义为静态变量, 需用static修饰, 方法也应是静态方法, 所以第2行和第6行出现异常, 选项B正确, 本题答案为B。
【39】每个Applet程序必须定义为
Applet类定义了小应用程序(Applet)与其运行环境之间的一个接口; JApplet是Applet类的扩展, 它继承了Applet的方法和执行机制, 同时也增加了对Swing构件的支持。每个Java小应用程序都必须是Applet类或JApplet类的子类。因此, 本题的正确答案是A。
【40】下列程序定义了一个Applet, 为了使程序运行时在浏览器中显示字符串"Good Luck!", 在下划线处应填入的是
import java.awt.*;
import java.applet.*;
public class SaySomething extends Applet {
public void ________(Graphics g) {
g.drawString("Good Luck!", 40, 40);
}
}
Graphics类提供基本绘图方法, 使用paint, 本题答案为C。