1.对于下列文法中非终结符号的First与Follow集错误的是(A)
(1)S→iCtSS’|a
(2)S’→eS|ε
(3)C→b
A.Follow( C )={b}
B.First(S)={i,a}
C.First( C )={b}
D.Follow(S’)= {e,#}
解析:
Follow( C ) 应为{t} 而不是 {b}。
2.中间代码的主要优点是( C )
A.进行语法错误检查
B.增加编译器的复杂性
C.提供了一种平台无关的中间表示
D.提供了直接的机器代码
3.査找student表中所有电话号码(列名:telephone)的第一位为8或6,第三位为0的电话号码(D)
A.SELECT telephone FROM student WHERE telephone LIKE '[8,6]_0*'
B.SELECT telephone FROM student WHERE telephone LIKE '[8,6]%0*'
C.SELECT telephone FROM student WHERE telephone LIKE '(8,6)*0%'
D.SELECT telephone FROM student WHERE telephone LIKE '[8,6]_0%'
解析:
() 和*都不是 SQL的LIKE子句中的通配符。
4.向表evaluate的成绩列添加成绩,从表grade中的成绩一列提取记录,下列语句正确的是( C )
A.
INSERT INTO (evaluate.point)
SELECT * FROM grade
B.
INSERT INTO (evaluate.point)
SELECT grade.point FROM grade
C.
INSERT INTO evaluate(evaluate.point)
SELECT grade.point FROM grade
D.
INSERT INTO evaluate(evaluate.point)
SELECT * FROM grade
解析:
正确的插入语法应该是: insert into table_name (column_name)
5.有订单表orders,包含字段用户信息userid,字段产品信息productid,以下语句能够返回至少被订购过两次的productid?(A)
A.select productid from orders group by productid having count (productid)>1
B.select productid from orders where count(productid)>1
C.select productid from orders where max (productid)>1
D.select productid from orders where having count (productid)>1 group by productid
解析:
where子句不能直接使用聚合函数count()和max(),having 子句应放在 group by 子句之后。
6.能实现不同的网络层协议转换功能的互联设备是 ( D )。
A.网桥
B.集线器
C.交换机
D.路由器
解析:
网桥和交换机都工作在数据链路层,集线器工作在物理层,它们都不能进行网络层协议转换。
7.下列文法中不存在左递归的是(A)
A.
(1)E→TE'
(2)E'→+TE'|ε
(3)T→FT'
(4)T'→*FT'|ε
(5)F→(E)|i
B.
(1)S→Ac|c
(2)A→Bb|b
(3)B→Sa|a
C.
S→Sc|c
D.
(1)E→E+T|T
(2)T→T*F|F
(3)F→(E)|i
解析:
B 存在间接左递归,CD存在直接左递归。
8.从以下哪一个选项中可以获得Servlet的初始化参数?(D)
A.GenericServlet
B.Servlet
C.ServletContext
D.ServletConfig
解析:
GenericServlet 和 Servlet 都不能直接获取初始化参数,它们只能返回一个 ServletConfig 对象。
ServletContext 只能获取全局初始化参数,不能获取单个 Servlet 的初始化参数。
9.假设用于通信的电文由5个字母组成,字母在电文中出现的频率分别为2,4,5,7,8(根为第一层),用这5个字母设计哈弗曼树带权路径长度为(B)
A.84
B.58
C.105
D.96
解析:
哈夫曼树构建步骤:
1.初始化: 将每个字母视为一个节点,节点的权值是其出现频率。
2.排序: 将所有节点按照权值从小到大排序。
3.合并: 选择权值最小的两个节点,创建一个新的父节点,其权值为这两个子节点的权值之和。
4.插入: 将新的父节点插入到节点列表中,并保持列表的权值有序。
5.重复: 重复步骤 3 和 4,直到只剩一个节点,即哈夫曼树的根节点。
计算带权路径长度 (WPL):
WPL = Σ (每个叶子节点的权值 * 该叶子节点到根节点的路径长度)
WPL = 2 * 3 + 4 * 3 + 5 * 2 + 7 * 2 + 8 * 2 = 6 + 12 + 10 + 14 + 16 = 58
10.已知定义数组char a[3];,以下哪个选项不能代表数组元素a[1]的地址( C )
A.&a[1]
B.a+1
C.&a[0]++
D.&a[0]+1
解析:
&a[0] 是一个常量地址,不能进行自增操作。
11.一个32位的机器,该机器的指针是多少字节( C )
A.不确定
B.2
C.4
D.8
12.以下程序是用辗转相除法来计算两个非负数之间的最大公约数:
long long gcd(long long x,long long y){if(y==0){return x;}else{return gcd(y,x%y);}
}
我们假设x,y中最大的那个数的长度为n,基本运算时间复杂度是O(1),那么该程序的时间复杂度为(B)
A.O(n)
B.O(logn)
C.O( 1 )
D.O(n^2)
13.IP地址202.100.80.110是( D )地址。
A.D类
B.A类
C.B类
D.C类
解析:
A 类地址:第一个字节的范围:1 ~ 126。
B 类地址:第一个字节的范围:128 ~ 191。
C 类地址:第一个字节的范围:192 ~ 223。
D 类地址:第一个字节的范围:224 ~ 239。
E 类地址:第一个字节的范围:240 ~ 255。
14.设有序表中的元素为(13,18,24,35,47,50,62),则在其中利用二分法查找值为24的元素需要经过(D)次比较。
A.4
B.1
C.2
D.3
解析:
初始时,left = 0,right = 6。
第一次查找:
mid = (0 + 6) / 2 = 3,中间元素是 35。
因为 24 < 35,更新 right = mid - 1 = 2。
第二次查找:
mid = (0 + 2) / 2 = 1,中间元素是 18。
因为 24 > 18,更新 left = mid + 1 = 2。
第三次查找:
mid = (2 + 2) / 2 = 2,中间元素是 24,查找成功。
15.在Python3中,执行函数结果为:(A)
def dig_num(n):
if n <= 10:
return n
else:
return n%10+dig_num(n//10)
print(dig_num(1291))
A.13
B.1291
C.129
D.12
解析:
// 是整数除法(也称为地板除法)的运算符。使用 // 对两个数进行除法运算时,结果会自动向下取整到最接近的整数,去掉小数部分。
16.在类Tester中定义方法如下,public double max(int x, int y){/省略},则在该类中定义如下哪个方法头是对上述方法的重载(Overload)?( C )
A.private double max(int a, int b){}
B.public int max(int a, int b){}
C.public int max(double a, double b) {}
D.public double max(int x, int y){}
解析:
方法重载是指在同一个类中定义多个方法,它们具有相同的名称,但参数列表不同(参数的数量、类型或顺序不同),与返回类型和访问修饰符无关。