【计算机二级Java语言】卷008

选择题

公共知识

【1】下列关于栈叙述正确的是()。
〖A〗栈顶元素最先能被删除
〖B〗栈顶元素最后才能被删除
〖C〗栈底元素永远不能被删除
〖D〗栈底元素最先被删除
栈是先进后出的数据结构, 所以栈顶元素最后入栈却最先被删除。
栈底元素最先入栈却最后被删除。
所以选择A。
【2】下列叙述中正确的是()。
〖A〗在栈中, 栈中元素随栈底指针与栈顶指针的变化而动态变化
〖B〗在栈中, 栈顶指针不变, 栈中元素随栈底指针的变化而动态变化
〖C〗在栈中, 栈底指针不变, 栈中元素随栈顶指针的变化而动态变化
〖D〗以上说法均不正确
栈是先进后出的数据结构, 在整个过程中, 栈底指针不变, 入栈与出栈操作均由栈顶指针的变化来操作, 所以选择C。
【3】某二叉树共有7个结点, 其中叶子结点只有1个, 则该二叉树的深度为(假设根结点在第1层)()。
〖A〗3
〖B〗4
〖C〗6
〖D〗7
根据二叉树的基本性质3:在任意一棵二叉树中, 多为0的叶子结点总比度为2的结点多一个, 所以本题中度为2的结点为1 - 1 = 0个, 所以可以知道本题目中的二叉树的每一个结点都有一个分支, 所以共7个结点共7层, 即度为7。
【4】软件按功能可以分为应用软件、系统软件和支撑软件(或工具软件)。下面属于应用软件的是()。
〖A〗学生成绩管理系统
〖B〗C语言编译程序
〖C〗UNIX 操作系统
〖D〗数据库管理系统
软件按功能可以分为:应用软件、系统软件、支撑软件。
操作系统、编译程序、汇编程序、网络软件、数据库管理系统都属于系统软件。
所以B、C、D都是系统软件, 只有A是应用软件。
【5】结构化程序所要求的基本结构不包括()。
〖A〗顺序结构
〖B〗GOTO跳转
〖C〗选择(分支)结构
〖D〗重复(循环)结构
1966年Boehm和Jacopini证明了程序设计语言仅仅使用顺序、选择和重复三种基本控制结构就足以表达出各种其他形式结构的程序设计方法。
【6】下面描述中错误的是()。
〖A〗系统总体结构图支持软件系统的详细设计
〖B〗软件设计是将软件需求转换为软件表示的过程
〖C〗数据结构与数据库设计是软件设计的任务之一
〖D〗PAD图是软件详细设计的表示工具
详细设计的任务是为软件结构图中而非总体结构图中的每一个模块确定实现算法和局部数据结构, 用某种选定的表达工具表示算法和数据结构的细节, 所以A错误。
【7】负责数据库中查询操作的数据库语言是()。
〖A〗数据定义语言
〖B〗数据管理语言
〖C〗数据操纵语言
〖D〗数据控制语言
数据定义语言:负责数据的模式定义与数据的物理存取构建; 数据操纵语言:负责数据的操纵, 包括查询及增、删、改等操作; 数据控制语言:负责数据完整性、安全性的定义与检查以及并发控制、故障恢复等功能。
【8】一个教师可讲授多门课程, 一门课程可由多个教师讲授。则实体教师和课程间的联系是()。
〖A〗1 : 1联系
〖B〗1 : m联系
〖C〗m : 1联系
〖D〗m : n联系
解析】因为一个教师可讲授多门课程, 而一门课程又能由多个老师讲授所以他们之间是多对多的关系, 可以表示为m : n。
【9】有三个关系R、S和T如下:

则由关系R和S得到关系T的操作是()。
〖A〗自然连接
〖B〗
〖C〗
〖D〗
关系T中的元组是关系R中有而关系S中没有的元组的集合, 即从关系R中除去与关系S中相同元组后得到的关系T。
所以做的是差运算。
【10】定义无符号整数类为UInt, 下面可以作为类UInt实例化值的是()。
〖A〗-369
〖B〗369
〖C〗0.369
〖D〗整数集合 { 1, 2, 3, 4, 5 }
只有B选项369可以用无符号整数来表示和存储。
A选项-369有负号, 选项C0.369是小数都不能用无符号整数类存储, 选项D是一个整数集合得用数组来存储。

专业知识

【11】下列说法中, 错误的是
〖A〗子类的派生过程称为类的继承
〖B〗封装是面向对象技术中隐蔽信息的一种机制
〖C〗方法名相同, 参数类型或个数不同, 称为重载
〖D〗Java语言中, "方法"是程序封装的最小单位
程序封装的最小单位是属性, 不是方法。
本题答案为D选项。
【12】Java中有效的注释声明是
I.//This is a comment
II./**This is a comment*/
III./This is a comment
IV./*This is a comment*/
〖A〗I, IV
〖B〗IV
〖C〗I, II, IV
〖D〗I
Java中注释有三种方式:(1)单行注释"//"(2)多行注释"/* */"(3)文档注释"/** */"。
本题答案为C选项。
【13】若已有int s = 5; 则下列表达式的类型为整型的是
〖A〗1.0 * s
〖B〗(float) s
〖C〗s + 1.0
〖D〗s /= 2
double类型与int类型相乘, 结果为double, "1.0 * s"为double型; int类型的s被强转为float类型, "(float)s"为float型; int类型与double类型相加, 结果为double, "s + 1.0"为double型; 两个int类型的值进行数学运算结果还是int类型, "s /= 2"为整型。
本题答案为D选项。
【14】若已有int x = 345; 则下列表达式的值与其他三个选项不同的是
〖A〗x % 10
〖B〗x / 100 + 1
〖C〗x % 100 / 10
〖D〗x / 10 % 10
A选项中, "345%10"结果为5; B选项中"345/100+1"等于4; C选项中"345%100/10"等于4; D选项中"345/10%10"等于4。
本题答案为A选项。
【15】下列表达式中不能使x的值增1的是
〖A〗x += 1
〖B〗x + 1
〖C〗x++
〖D〗++x
"x+=1"、"++x"、"x++"都可以使自身的值加1; "x+1"并没有重新赋值。
本题答案为B选项。
【16】下列代码段执行后, k的值为
char ch = 'a';
int k = 0;
switch (ch) {
    case 'a':
        k = k + 1;
    case 'b':
        k = k + 2;
        break;
    case 'c':
        k = k + 3;
        break;
}
〖A〗1
〖B〗2
〖C〗3
〖D〗6
switch语句中, break的作用是防止case渗透。
因为ch = 'a', 执行switch语句的case'a'子句, k = 1。
这里没有break语句, 接着执行case'b', 此时k = 3, 接着执行break语句, 跳出switch语句。
本题答案为C选项。
【17】下列代码段执行后, a的值为
int a = 1;
for (int k = 0; k < 10; k++) {
    a = a * 2;
}
〖A〗2
〖B〗32
〖C〗512
〖D〗1024
程序中, for循环一共循环10次, 变量a累乘2, 等价于2 ^ 10 = 1024。
本题答案为D选项。
【18】下列代码段执行后的结果是
int x = 1;
while (x < 15) {
    System.out.print("  " + x);
    x = x + 3;
}
〖A〗1 3 5 7 9 11 13
〖B〗1 4 7 10 13
〖C〗1 3 5 7 9 11 13 15
〖D〗1 4 7 10 13 16
本题主要考查while循环。
当x的值小于15才会进入循环体中执行x = x + 3语句。
当x = 1时可以进入循环体, 执行完x = x + 3后x为4, 以此类推直到x大于15跳出循环。
本题答案为B选项。
【19】下列代码段执行后, a[3]的值为
int[] a = { 1, 3, 5, 7, 9 };
int t;
for (int i = 0; i < 3; i++) {
    t = a[i];
    a[i] = a[4 - i];
    a[4 - i] = t;
}
〖A〗1
〖B〗3
〖C〗5
〖D〗7
此程序主要实现数组元素的交换。
第一位和最后一位, 第二位和倒数第二位……。
元素a[3] = 7与元素a[1] = 3交换, 交换后a[1] = 7, a[3] = 3。
本题答案为B选项。
【20】下列代码段执行后的结果是
int k, s = 0;
for (int x = 3; x <= 10; x++) {
    for (k = 2; k < x; k++)
        if (x % k == 0)
            break;
    if (k == x)
        s = s + x;
}
System.out.println(" " + s);
〖A〗0
〖B〗52
〖C〗37
〖D〗15
本题考查循环嵌套。
外层循环的变量x的值分别为:3、4、5、6、7、8、9、10。
内循环是:x分别求余2 ~ x - 1之间的所有数。
如果能整除则退出循环。
并判断x与k是不是相等, 如果相等累加x的值。
此过程本质是判断变量x是不是质数, 如果是质数累加x到s。
当x为3、5、7时会累加到s, 则s的值为15。
本题答案为D选项。
【21】下列选项中, 与成员变量共同构成一个类的是
〖A〗关键字
〖B〗方法
〖C〗运算符
〖D〗表达式
一个类中包含属性(成员变量)与方法。
本题答案为B选项。
【22】请阅读下面程序
public class ExampleStringBuffer {
    public static void main(String[] args) {
        StringBuffer sb = new StringBuffer("test");
        System.out.println("buffer =" + sb);
        System.out.println("length =" + sb.length());
    }
}
程序运行结果中在"length="后输出的值是
〖A〗10
〖B〗4
〖C〗20
〖D〗30
创建一个StringBuffer, 初始化值为test, 长度为4。
Length()方法是求一求StringBuffer类的长度。
本题答案为B选项。
【23】在当前目录下存在文件"record.txt", 则下列代码的运行结果是
public void test() {
    String s[] = new String[10];
    try {
        FileInputStream fis = new FileInputStream("record.txt");
        s[9] = "exception";
    } catch (ArrayIndexOutOfBoundsException e) {
        System.out.println("exception 1");
    } catch (IOException e) {
        System.out.println("exception 2");
    } finally {
        System.out.println("over");
    }
}
〖A〗exception
〖B〗exception 1
〖C〗exception 2
〖D〗over
"record.txt"文件在当前文件夹, 可以直接访问, 不会抛IOException异常; 创建一个长度为10的字符串数组, s[9]是第10个元素, 不会抛ArrayIndexOutOfBoundsException异常; 程序中没有异常抛出, 执行finally子句。
输出语句为"over"。
本题答案为D选项。
【24】下列能正确定义二维浮点数数组的是
〖A〗float f[][] = new float[7, 7];
〖B〗float f[7][7] = new float[][];
〖C〗float f[][] = new float[7][7];
〖D〗float f[7, 7] = new float[][];
二维数组声明的方式为:数组类型[][]数组名=new 数组类型[][]。
声明数组不能在中括号内加入数组长度。
本题答案为C选项。
【25】定义一个类, 要求其中的成员变量可以被该类的所有子类访问, 但不能被与该类不在同一个包中的非子类访问, 则成员变量的访问权限是
〖A〗public
〖B〗private
〖C〗protected
〖D〗default
public可以被所有的类访问; private只能被本类, protected可以被本类和同一个包中的类及其子类访问, default不是权限修饰符。
本题答案为C选项。
【26】下列给整型二维数组进行赋值的语句中, 错误的是
〖A〗int i[][] = { { 1, 2 }, { 3, 4 } };
〖B〗int i[2][2] = { { 1, 2 }, { 3, 4 } };
〖C〗int i[][] = { { 0 }, { 1, 2 }, { 3, 4 } };
〖D〗int i[][] = { { 0 }, { 1, 2, 3, 4 } };
【解析二维数组声明的方式为:数组类型[][]数组名=new 数组类型[][], 声明时, 不能在数据类型中的[]添加参数。
本题答案为B选项。
【27】下列可加入类Dog中的方法是
public class Animal {
    protected void bark() {
        …
    }
}
class Dog extends Animal {
}
〖A〗public void bark() { … }
〖B〗void bark() { … }
〖C〗private void bark() { … }
〖D〗abstract void bark() { … }
继承关系中, 子类方法的权限要高于等于父类。
Java中修饰符权限大小关系:public > protected>默认>private, 选项B、C错误; abstract是修饰抽象方法的关键字, 只有父类中的方法为抽象方法时, 子类继承的方法才能为抽象方法, D选项错误。
本题答案为A选项。
【28】下列代码中, 将引起错误的是
1 class Animal {
    2 private String name;
    3 public Animal() {
    }
    4
}
5 public class Dog extends Animal {
    6 private String place;
    7 public Dog() {
    }
    8 public String getValue() {
        return name;
    }
    9 public static void main(String args[]) {
        10 Animal p = new Animal();
        11
    }
    12
}
〖A〗第3行
〖B〗第6行
〖C〗第7行
〖D〗第8行
Animal类的name熟悉是私有的。
private修饰的属性只能在本类被访问。
子类不能访问父类的私有属性。
第8行代码出现错误。
本题答案为D选项。
【29】能实现线程之间通信的类是
〖A〗ObjectInputStream
〖B〗PipedInputStream
〖C〗FilterInputStream
〖D〗ByteArrayInputStream
在管道流实现线程间的通信。
java.io包中2个类:PipedInputStream和PipedOutputStream类实现了管道机制。
本题答案为B选项。
【30】下面关于管道的叙述中错误的是
〖A〗管道流分为字节管道流和字符管道流
〖B〗管道的优点在于提供了一个安全的线程通信方法
〖C〗管道的缺点在于有时会使依赖于管道通信的程序造成死锁
〖D〗Java使用管道进行线程连接时必须要考虑线程的同步问题
管道流分为字节管道流和字符管道流, 选项A正确; 管道的优点在于提供了一个安全的线程通信方法, 选项B正确; 管道的缺点在于有时会使依赖于管道通信的程序造成死锁, 选项C正确; Java使用管道进行线程连接时不用考虑线程的同步问题。
本题答案为D选项。
【31】下列关于对象流的描述中, 错误的是
〖A〗对象流是字节流的一个分支
〖B〗对象的传送首先要对所传送的对象串行化
〖C〗串行化对象可以把一个对象转换成字节流
〖D〗串行化对象不能把字节流反串行化为原始对象的拷贝
串行化对象可以把字节流反串行化为原始对象的拷贝。
本题答案为D选项。
【32】下列关于Swing布局管理器的描述中, 错误的是
〖A〗Swing采用布局管理器来管理组件的排放、位置、大小等
〖B〗Swing具有FlowLayout、BorderLayout和CardLayout布局管理器
〖C〗Swing与AWT相比, 新增加了BoxLayout布局管理器
〖D〗Swing可以把组件直接加到顶层容器中
JavaSwing组件不能直接添加到顶层容器中, 它必须添加到一个与Swing顶层容器相关联的内容面板(ContentPane)上。
内容面板其实就是一个中间容器, 它是一个轻量级组件。
本题答案为D选项。
【33】下面的代码运行后得到的结果是
import javax.swing.*;
public class testOut {
    public static void main(String[] args) {
        JOptionPane.showMessageDialog(null, "消息类型", "图标", JOptionPane.WARNING_MESSAGE);
    }
}
〖A〗
〖B〗
〖C〗
〖D〗
showMessageDialog 的构造方法showMessageDialog(Component parentComponent, Object message, String title, int messageType), 其中 messageType 的WARNING_MESSAGE, 为警告图标, 也就是选项C中显示的图标。
本题答案为C选项。
【34】下列关于JComponent类的描述中错误的是
〖A〗JComponent类是一个抽象类
〖B〗JComponent类继承于Container类
〖C〗JComponent类定义了所有子类组件的一般方法
〖D〗JComponent类是所有Swing组件的父类
JComponent类是一个继承与Container类的抽象类, 它定义了所有子类组件的一般方法, 选项A、B、C正确。
本题答案为D选项。
【35】当容器大小发生改变时, 使容器中组件的大小不发生改变的布局管理器是
〖A〗GridLayout
〖B〗BorderLayout
〖C〗FlowLayout
〖D〗CardLayout
只有flowlayout 不会改变组件的大小。
因为其布局中所有组件的大小都是自动适配的, 不管容器有多大, 组件大小通常都是根据显示需要的最小尺寸。
本题答案为C选项。
【36】为了使下列程序正常运行并且输出5行字符串Hello !, 在下划线处应填入的是
class Test5 extends Thread {
    public void ________() {
        int i = 0;
        while (i++ < 5)
            System.out.println("Hello! ");
    }
    public static void main(String[] args) {
        Thread t = __________();
        t.start();
    }
}
〖A〗run, new Test5
〖B〗run, new Thread
〖C〗Test5, new Thread
〖D〗Test5, new Test5
线程的实现有两种方法(1)继承Thread类(2)实现Runnable接口。
同时要重写run()方法。
main()函数创建一个线程的实例, 需要填写new Thread()。
本题答案为B选项。
【37】在一个线程中调用下列方法, 一定会改变该线程运行状态的是
〖A〗yield方法
〖B〗urrentThread方法
〖C〗sleep方法
〖D〗一个对象的notify方法
线程的sleep()方法会是线程进入阻塞状态; yield()方法和notify()方法会使线程进入就绪状态, 如果线程本身就是就绪状态则状态不发生改变。
本题答案为C选项。
【38】为了支持压栈线程与弹栈线程之间的交互与同步, 应在下划线处填入的选项是
public class MyStack {
    private int idx = 0;
    private int[] data = new int[8];
    public void push(int i) {
        ________ {
            this.notify();
            data[idx] = i;
            idx++;
        }
    }
    ……
}
〖A〗synchronized(this)
〖B〗interrupt()
〖C〗wait()
〖D〗synchronized()
在方法中使用synchronized(对象), 一般可以锁定当前对象this。
表示同一时刻只有一个线程能够进入同步代码块, 用来保证线程同步。
本题答案为A选项。
【39】下列关于Applet的叙述中, 错误的是
〖A〗Applet可以嵌入到浏览器中运行
〖B〗Applet的主类要定义为Applet类或JApplet类的子类
〖C〗同一个页面中的Applet之间可以通信
〖D〗Applet中必须包含main()方法
Applet可以嵌入到浏览器中运行。
Applet的主类要定义为Applet类或JApplet类的子类。
同一个页面中的Applet之间可以通信, 选项A、B、C正确。
Applet中可能不包含main()方法。
本题答案为D选项。
【40】下列代码包括一个HTML文件和一个定义Applet类的Java程序。为了使HTML文件在浏览器中运行时显示"Hello!", 在下划线处应填入的代码是
/*hello.html*/
<HTML><HEAD><TITLE > A simple program</TITLE></HEAD><BODY><________ CODE = " Hello.class " WIDTH = 200 HEIGHT = 100></APPLET></BODY></HTML>/*Hello.java*/
import java.awt.*;
import java.applet.*;
public class Hello extends Applet {
    public void paint(________ g) {
        g.drawString("Hello!", 25, 25);
    }
}
〖A〗APPLET, Component
〖B〗PARAM, Component
〖C〗APPLET, Graphics
〖D〗PARAM, Graphics
Html中APPLET标签是成对存在的, 程序中有结束符没有开始符, 需加APPLET表签作为开始符。
Graphics类:可以理解为画笔, 为我们提供了各种绘制图形。
本题答案为C选项。

编程题

【41】在考生文件夹中存有文件名为Java_1.java的文件, 该程序是不完整的, 请在注释行"//**********Found**********"下一行语句的下划线地方填入正确内容, 然后删除下划线, 请勿删除注释行或改动其他已有语句内容。存盘时文件必须存放在考生文件夹下, 不得改变原有文件的文件名。
本题的要求是:
计算并打印1, 3, 5, 7的阶乘以及这些阶乘的和。
完成程序, 使程序输出结果如下:
1 != 1
3 != 6
5 != 120
7 != 5040
sum = 5167
(1) sum = 0
(2) i
(3) b = j * b
本题考查:求一个数的阶乘, 以及java中多层循环的应用。
(1) 程序要求求和, 求和的结果存放到sum变量中, 需要对变量进行初始化, 赋初值为0。
(2) 阶乘为小于及等于该数的正整数的积。
内循环将小于等于i的值累乘。
所以j <= i。
(3) 将累乘的结果存放到变量b中, 所以b的值应为j * b。
【42】在考生文件夹中存有文件名为Java_2.java的文件, 该程序是不完整的, 请在注释行"//**********Found**********"下一行语句的下划线地方填入正确内容, 然后删除下划线, 请勿删除注释行或改动其他已有语句内容。存盘时文件必须存放在考生文件夹下, 不得改变原有文件的文件名。
本题的要求是:
统计骰子旋转500次后每个面出现的频率(起始面是随机的), 某次程序结果如下:

(1) swing
(2) face
(3) new
(4) outputArea
(5) exit
本题考查:java窗口构件、switch分支结构。
(1) JTextArea, JOptionPane都是属于swing包中的类, 所以需要导入swing包。
(2) switch (表达式) , 表达式为face匹配case的常量值, 执行分支中的内容。
(3) JTextArea在使用的时候必须创建对象, 创建对象用关键字new。
(4) JOptionPane.showMessageDialog()方法中必须传入4个参数, 其中第2个参数传入的是Object Message, 本程序要求将新建的JTextArea对象添加到容器中。
(5) 程序正常退出system.exit(0);
【43】在考生文件夹中存有文件名为Java_3.java和Java_3.html的文件, 该程序是不完整的, 请在注释行"//**********Found**********"下一行语句的下划线地方填入正确内容, 然后删除下划线, 请勿删除注释行或改动其他已有语句内容。存盘时文件必须存放在考生文件夹下, 不得改变原有文件的文件名。
本题的要求是:
利用Do / While循环语句编写Applet程序, 实现画10个同心圆
程序运行结果如下:

(1)JApplet(2)Graphics(3)g(4)++counter
本题考查:do / While循环语句、Graphics类以及java Applet小程序应用。
(1) java Applet小程序需要继承JApplet类。
(2) Graphics这个是抽象类, 它的对象是用来传给paint()方法作为画笔的。
(3) java的Graphics类提供绘制椭圆的方法drawOval()。
(4) do - while循环的结束条件为counter <= 10, 变量counter的初始值为1, 所以这里需要让变量counter自增1。
posted @ 2020-03-10 13:55  M了个J  阅读(1080)  评论(0编辑  收藏  举报