2017-01
下列函数的时间复杂度是__。
int func(int n)
{
int i = 0, sum = 0;
while (sum < n)
sum += ++i;
return i;
}A. O(log n)
B. O(n1/2)
C. O(n)
D. O(nlog n)
答案:B
2017 全国硕士研究生入学统一考试
当前显示 47 道题
下列函数的时间复杂度是__。
int func(int n)
{
int i = 0, sum = 0;
while (sum < n)
sum += ++i;
return i;
}A. O(log n)
B. O(n1/2)
C. O(n)
D. O(nlog n)
答案:B
下列关于栈的叙述中,错误的是__。
I. 采用非递归方式重写递归程序时必须使用栈
II. 函数调用时,系统要用栈保存必要的信息
III. 只要确定了入栈次序,就可确定出栈次序
IV. 栈是一种受限的线性表,允许在其两端进行操作
A. 仅 I
B. 仅 I、II、III
C. 仅 I、III、IV
D. 仅 II、III、IV
答案:C
适用于压缩存储稀疏矩阵的两种存储结构是__。
A. 三元组表和十字链表
B. 三元组表和邻接矩阵
C. 十字链表和二叉链表
D. 邻接矩阵和十字链表
答案:A
要使一棵非空二叉树的先序序列与中序序列相同,其所有非叶结点须满足的条件是__。
A. 只有左子树
B. 只有右子树
C. 结点的度均为 1
D. 结点的度均为 2
答案:B
已知一棵二叉树的树形如右图所示,其后序序列为 e, a, c, b, d, g, f,树中与结点 a 同层的结点是__。

A. c
B. d
C. f
D. g
答案:B
已知字符集{a, b, c, d, e, f, g, h},若各字符的哈夫曼编码依次是 0100, 10, 0000, 0101, 001, 011, 11, 0001,则编码序列 0100011001001011101 的译码结果是__。
A. acgabfh
B. adbagbb
C. afbeagd
D. afeefgd
答案:D
已知无向图 G 含有 16 条边,其中度为 4 的顶点个数为 3,度为 3 的顶点个数为 4,其他顶点的度均小于 3。图 G 所含的顶点个数至少是__。
A. 10
B. 11
C. 13
D. 15
答案:B
下列二叉树中,可能成为折半查找判定树(不含外部结点)的是__。
A.

B.

C.

D.

答案:A
下列应用中,适合使用B+树的是__。
A. 编译器中的词法分析
B. 关系数据库系统中的索引
C. 网络中的路由表快速查找
D. 操作系统的磁盘空闲块管理
答案:B
在内部排序时,若选择了归并排序而没有选择插入排序,则可能的理由是__。
I. 归并排序的程序代码更短. II. 归并排序的占用空间更少
III. 归并排序的运行效率更高
A. 仅II
B. 仅III
C. 仅I、II
D. 仅I、III
答案:B
下列排序方法中,若将顺序存储更换为链式存储,则算法的时间效率会降低的是__。
I. 插入排序 II. 选择排序 III. 起泡排序 IV. 希尔排序 V. 堆排序
A. 仅I、II
B. 仅II、III
C. 仅III、IV
D. 仅IV、V
答案:D
假定计算机 M1 和 M2 具有相同的指令集体系结构(ISA),主频分别为 1.5GHz 和 1.2GHz。在M1 和 M2 上运行某基准程序 P,若平均 CPI 分别为 2 和 1,则程序 P 在 M1 和 M2 上运行时间的比值是__。
A. 0.4
B. 0.625
C. 1.6
D. 2.5
答案:C
某计算机主存按字节编址,由 4 个 64M×8 位的 DRAM 芯片采用交叉编址方式构成,并与宽度为 32 位的存储器总线相连,主存每次最多读写 32 位数据。若 double 型变量 x 的主存地址为 804 001AH,则读取 x 需要的存储周期数是__。
A. 1
B. 2
C. 3
D. 4
答案:C
某 C 语言程序段如下:
for (i = 0; i <= 9; i++) {
temp = 1;
for (j = 0; j <= i; j++)
temp *= a[j];
sum += temp;
}下列关于数组 a 的访问局部性的描述中,正确的是__。
A. 时间局部性和空间局部性皆有
B. 无时间局部性,有空间局部性
C. 有时间局部性,无空间局部性
D. 时间局部性和空间局部性皆无
答案:A
下列寻址方式中,最适合按下标顺序访问一维数组元素的是__。
A. 相对寻址
B. 寄存器寻址
C. 直接寻址
D. 变址寻址
答案:D
某计算机按字节编址,指令字长固定且只有两种指令格式,其中三地址指令 29 条,二地址指令 107 条,每个地址字段为 6 位,则指令字长至少应该是__。
A. 24位
B. 26位
C. 28位
D. 32位
答案:A
下列关于超标量流水线特性的叙述中,正确的是__。
I. 能缩短流水线功能段的处理时间
II. 能在一个时钟周期内同时发射多条指令
III. 能结合动态调度技术提高指令执行并行性
A. 仅 II
B. 仅 I、III
C. 仅 II、III
D. I、II 和 III
答案:C
下列关于主存储器(MM)和控制存储器(CS)的叙述中,错误的是__。
A. MM在CPU外,CS在CPU内
B. MM按地址访问,CS按内容访问
C. MM存储指令和数据,CS存储微指令
D. MM用RAM和ROM实现,CS用ROM实现
答案:B
下列关于指令流水线数据通路的叙述中,错误的是__。
A. 包含生成控制信号的控制部件
B. 包含算术逻辑运算部件(ALU)
C. 包含通用寄存器组和取指部件
D. 由组合逻辑电路和时序逻辑电路组合而成
答案:A
下列关于多总线结构的叙述中,错误的是__。
A. 靠近CPU的总线速度较快
B. 存储器总线可支持突发传送方式
C. 总线之间必须通过桥接器相连
D. PCI-Express×16采用并行传输方式
答案:D
I/O指令实现的数据传送通常发生在__。
A. I/O设备和I/O端口之间
B. 通用寄存器和I/O设备之间
C. I/O端口和I/O端口之间
D. 通用寄存器和I/O端口之间
答案:D
下列关于多重中断系统的叙述中,错误的是__。
A. 在一条指令执行结束时响应中断
B. 中断处理期间CPU处于关中断状态
C. 中断请求的产生与当前指令的执行无关
D. CPU通过采样中断请求信号检测中断请求
答案:B
假设4个作业到达系统的时刻和运行时间如下表所示。

系统在 t=2 时开始作业调度。若分别采用先来先服务和短作业优先调度算法,则选中的作业分别是__。
A. J2、J3
B. J1、J4
C. J2、J4
D. J1、J3
答案:D
执行系统调用的过程包括如下主要操作:
①返回用户态
②执行陷入(trap)指令
③传递系统调用参数
④执行相应的服务程序
正确的执行顺序是__。
A. ②→③→①→④
B. ②→④→③→①
C. ③→②→④→①
D. ③→④→②→①
答案:C
某计算机按字节编址,其动态分区内存管理采用最佳适应算法,每次分配和回收内存后都对空闲分区链重新排序。当前空闲分区信息如下表所示。

回收起始地址为 60K、大小为 140KB 的分区后,系统中空闲分区的数量、空闲分区链第一个分区的起始地址和大小分别是__。
A. 3、20K、380KB
B. 3、500K、80KB
C. 4、20K、180KB
D. 4、500K、80KB
答案:B
某文件系统的簇和磁盘扇区大小分别为 1KB 和 512B。若一个文件的大小为 1026B,则系统分配给该文件的磁盘空间大小是 ___。
A. 1026B
B. 1536B
C. 1538B
D. 2048B
答案:D
下列有关基于时间片的进程调度的叙述中,错误的是 ___。
A. 时间片越短,进程切换的次数越多,系统开销也越大
B. 当前进程的时间片用完后,该进程状态由执行态变为阻塞态
C. 时钟中断发生后,系统会修改当前进程在时间片内的剩余时间
D. 影响时间片大小的主要因素包括响应时间、系统开销和进程数量等
答案:B
与单道程序系统相比,多道程序系统的优点是 ___。
I. CPU利用率高
II. 系统开销小
III. 系统吞吐量大
IV. I/O设备利用率高
A. 仅I、III
B. 仅I、IV
C. 仅II、III
D. 仅I、III、IV
答案:D
下列选项中,磁盘逻辑格式化程序所做的工作是 ___。
I. 对磁盘进行分区
II. 建立文件系统的根目录
III. 确定磁盘扇区校验码所占位数
IV. 对保存空闲磁盘块信息的数据结构进行初始化
A. 仅II
B. 仅II、IV
C. 仅III、IV
D. 仅I、II、IV
答案:B
某文件系统中,针对每个文件,用户类别分为4类:安全管理员、文件主、文件主的伙伴、其他用户;访问权限分为5种:完全控制、执行、修改、读取、写入。若文件控制块中用二进制位串表示文件权限,为表示不同类别用户对一个文件的访问权限,则描述文件权限的位数至少应为 ___。
A. 5
B. 9
C. 12
D. 20
答案:D
若文件 f1 的硬链接为 f2,两个进程分别打开 f1 和 f2,获得对应的文件描述符为 fd1 和 fd2,则下列叙述中,正确的是 ___。
I. f1 和 f2 的读写指针位置保持相同
II. f1 和 f2 共享同一个内存索引结点
III. fd1 和 fd2 分别指向各自的用户打开文件表中的一项
A. 仅III
B. 仅II、III
C. 仅I、II
D. I、II和III
答案:B
系统将数据从磁盘读到内存的过程包括以下操作:
①DMA 控制器发出中断请求
②初始化 DMA 控制器并启动磁盘
③从磁盘传输一块数据到内存缓冲区
④执行“DMA 结束”中断服务程序
正确的执行顺序是 ___。
A. ③→①→②→④
B. ②→③→①→④
C. ②→①→③→④
D. ①→②→④→③
答案:B
假设 OSI 参考模型的应用层欲发送 400B 的数据(无拆分),除物理层和应用层之外,其他各层在封装 PDU 时均引入 20B 的额外开销,则应用层数据传输效率约为 ___。
A. 80%
B. 83%
C. 87%
D. 91%
答案:A
若信道在无噪声情况下的极限数据传输速率不小于信噪比为 30dB 条件下的极限数据传输速率,则信号状态数至少是 ___。
A. 4
B. 8
C. 16
D. 32
答案:D
在下图所示的网络中,若主机 H 发送一个封装访问 Internet 的 IP 分组的 IEEE 802.11 数据帧 F,则帧 F 的地址 1、地址 2 和地址 3 分别是__。

A. 00-12-34-56-78-9a, 00-12-34-56-78-9b, 00-12-34-56-78-9c
B. 00-12-34-56-78-9b, 00-12-34-56-78-9a, 00-12-34-56-78-9c
C. 00-12-34-56-78-9b, 00-12-34-56-78-9c, 00-12-34-56-78-9a
D. 00-12-34-56-78-9a, 00-12-34-56-78-9c, 00-12-34-56-78-9b
答案:B
下列 IP 地址中,只能作为 IP 分组的源 IP 地址但不能作为目的 IP 地址的是__。
A. 0.0.0.0
B. 127.0.0.1
C. 200.10.10.3
D. 255.255.255.255
答案:A
直接封装 RIP、OSPF、BGP 报文的协议分别是__。
A. TCP、UDP、IP
B. TCP、IP、UDP
C. UDP、TCP、IP
D. UDP、IP、TCP
答案:D
若将网络 21.3.0.0/16 划分为 128 个规模相同的子网,则每个子网可分配的最大 IP 地址个数是__。
A. 254
B. 256
C. 510
D. 512
答案:C
若甲向乙发起一个 TCP 连接,最大段长 MSS = 1KB,RTT = 5ms,乙开辟的接收缓存为 64KB,则甲从连接建立成功至发送窗口达到 32KB,需经过的时间至少是__。
A. 25ms
B. 30ms
C. 160ms
D. 165ms
答案:A
下列关于 FTP 协议的叙述中,错误的是__。
A. 数据连接在每次数据传输完毕后就关闭
B. 控制连接在整个会话期间保持打开状态
C. 服务器与客户端的 TCP 20 端口建立数据连接
D. 客户端与服务器的 TCP 21 端口建立控制连接
答案:C
请设计一个算法,将给定的表达式树(二叉树)转换为等价的中缀表达式(通过括号反映操作符的计算次序)并输出。例如,当下列两棵表达式树作为算法的输入时,输出的等价中缀表达式分别为 (a+b)*(c*(-d)) 和 (a*b)+(-(c-d))。

二叉树结点定义如下:
typedef struct node {
char data[10]; // 存储操作数或操作符
struct node *left, *right;
} BTree;要求:
(1)给出算法的基本设计思想。
(2)根据设计思想,采用 C 或 C++ 语言描述算法,关键之处给出注释。
(1)算法设计思想:
采用二叉树的中序遍历策略,在遍历过程中根据节点位置动态添加括号以反映操作符计算次序。根节点和叶节点(操作数)无需括号;对于内部节点(操作符),在递归遍历其左子树前添加左括号,遍历右子树后添加右括号,且括号层数由节点深度控制。
(2)算法实现:
通过递归中序遍历实现,传递当前节点深度。深度为1时对应根节点,不添加括号;深度大于1时为子表达式添加括号。核心代码如下:
void BtreeToExp(BTree *root, int deep) {
if (root == NULL) return; // 空结点返回
else if (root->left == NULL && root->right == NULL) // 若为叶结点
printf("%s", root->data); // 输出操作数,不加括号
else {
if (deep > 1) printf("("); // 若有子表达式则加1层括号
BtreeToExp(root->left, deep + 1); // 递归左子树
printf("%s", root->data); // 输出操作符
BtreeToExp(root->right, deep + 1); // 递归右子树
if (deep > 1) printf(")"); // 若有子表达式则加1层括号
}
}
void BtreeToE(BTree *root) {
BtreeToExp(root, 1); // 根的深度为1
}入口调用:BtreeToE(root);
(3)关键结论:
算法正确将表达式树转换为带括号的中缀表达式。示例输入输出验证:
(a+b)*(c*(-d)); (a*b)+(-(c-d))。 括号嵌套准确,无冗余或缺失。
使用 Prim(普里姆)算法求带权连通图的最小(代价)生成树(MST)。请回答下列问题。
(1)对下列图 G,从顶点 A 开始求 G 的 MST,依次给出按算法选出的边。

(2)图 G 的 MST 是唯一的吗?
(3)对任意的带权连通图,满足什么条件时,其 MST 是唯一的?
【答案】
(1)依次选出的边为:(A, D), (D, E), (C, E), (B, C)。
(2)是唯一的。
(3)当带权连通图中任意环的所有边权值均不相同时,其MST是唯一的。(或:当图中所有边的权值互不相同时,其MST是唯一的。)
已知 f(n)=∑i=0n2i=2n+1-1=(11…1)2,计算 f(n) 的 C 语言函数 f1 如下:
int f1(unsigned n){
int sum=1, power=1;
for(unsigned i=0; i<=n-1; i++){
power *= 2;
sum += power;
}
return sum;
}将 f1 中的 int 都改为 float,可得到计算 f(n) 的另一个函数 f2。假设 unsigned 和 int 型数据都占 32 位,float 采用 IEEE 754 单精度标准。请回答下列问题。
(1)当 n=0 时,f1 会出现死循环,为什么?若将 f1 中的变量 i 和 n 都定义为 int 型,则 f1 是否还会出现死循环?为什么?
(2)f1(23)和 f2(23)的返回值是否相等?机器数各是什么(用十六进制表示)?
(3)f1(24)和 f2(24)的返回值分别为 33 554 431 和 33 554 432.0,为什么不相等?
(4)f(31)=232-1,而 f1(31) 的返回值却为 -1,为什么?若使 f1(n) 的返回值与 f(n) 相等,则最大的 n 是多少?
(5)f2(127)的机器数为 7F80 0000H,对应的值是什么?若使 f2(n)的结果不溢出,则最大的 n 是多少?若使 f2(n)的结果精确(无舍入),则最大的 n 是多少?
(1)当 n=0 时,i 和 n 均为 unsigned 型,表达式 n-1 下溢,其机器数为 32 个 1,即 232-1,这是 unsigned 可表示的最大值。因此 i <= n-1 始终成立,循环不会结束。若把 i 和 n 都改为 int 型,则不会死循环:此时 n-1=-1,初始 i=0,循环条件不成立。
(2)f1(23) 和 f2(23) 返回值相等。f1(23) 的机器数为 00FFFFFFH,f2(23) 的机器数为 4B7FFFFFH。
(3)不相等。f(24)=33\,554\,431 的二进制形式为 25 个连续的 1,而单精度 float 只有 24 位有效数字,必须舍入,因此 f2(24) 得到 33 554 432.0,比 f1(24) 的 33 554 431 大 1。
(4)f1(31) 返回 -1 是因为 int 溢出,全 1 解释为 -1。使 f1(n) 与 f(n) 相等的最大 n 为 30。
(5)f2(127) 对应 +∞。使 f2(n) 不溢出的最大 n 为 126;使 f2(n) 精确的最大 n 为 23。
在按字节编址的计算机 M 上,题 43 中 f1 的部分源程序(阴影部分)与对应的机器级代码(包括指令的虚拟地址)如下图所示。

其中,机器级代码行包括行号、虚拟地址、机器指令和汇编指令。请回答下列问题。
(1)计算机M是RISC还是CISC?为什么?
(2)f1的机器指令代码共占多少字节?要求给出计算过程。
(3)第20条指令cmp通过i减n-1实现对i和n-1的比较。执行f1(0)过程中,当i=0时,cmp指令执行后,进/借位标志CF的内容是什么?要求给出计算过程。
(4)第 23 条指令 shl 通过左移操作实现了 power *= 2 运算,在 f2 中能否也用 shl 指令实现 power *= 2?为什么?
(1)计算机M是CISC。因为其指令长短不一,不符合RISC指令系统特点。
(2)f1的机器指令代码共占96字节。计算过程:第一条指令地址为00401020H,最后一条指令ret地址为0040107FH,长度 = 0040107FH - 00401020H + 1 = 60H = 96字节。
(3)CF=C=1。执行 f1(0) 时,n=0、i=0、n-1=FFFFFFFFH。cmp 执行减法 0-FFFFFFFFH,在补码加/减运算器中等价于 00000000H+00000000H+1=00000001H,进位输出 C=0,因此减法借位标志 CF=C=1。
(4)不能用shl指令实现power*2。因为power是float型变量,其机器数包含阶码部分,shl指令将整数所有有效数位左移,但不能正确处理浮点数的阶码,因此无法实现乘2功能。
假定题 44 给出的计算机 M 采用二级分页虚拟存储管理方式,虚拟地址格式如下:
[页目录号(10 位) | 页表索引(10 位) | 页内偏移量(12 位)]
请针对题43的函数f1和题44中的机器指令代码,回答下列问题。
题43中的函数 f1:
int f1(unsigned n){
int sum=1, power=1;
for(unsigned i=0; i<=n-1; i++){
power *= 2;
sum += power;
}
return sum;
}题44中的机器指令代码:

(1)函数f1的机器指令代码占多少页?
(2)取第1条指令(push ebp)时,若在进行地址转换的过程中需要访问内存中的页目录和页表,则会分别访问它们各自的第几个表项(编号从0开始)?
(3)M的I/O采用中断控制方式。若进程P在调用f1之前通过scanf()获取n的值,则在执行scanf()的过程中,进程P的状态会如何变化?CPU是否会进入内核态?
(1) 仅占用1页。
(2) 会分别访问页目录的第1个表项和页表的第1个表项。
(3) 进程P的状态变化为:执行态→阻塞态→就绪态→运行态;CPU会从用户态进入内核态。
某进程中有3个并发执行的线程thread1、thread2和thread3,其伪代码如下所示。

请添加必要的信号量和 P、V(或 wait()、signal())操作,要求确保线程互斥访问临界资源,并且最大限度地并发执行。
需要三个初值均为 1 的互斥信号量:mutex_y1 用于 thread1 与 thread3 对变量 y 的互斥访问,mutex_y2 用于 thread2 与 thread3 对变量 y 的互斥访问,mutex_z 用于 thread2 与 thread3 对变量 z 的互斥访问。
// thread1
cnum w;
wait(mutex_y1);
w = add(x, y);
signal(mutex_y1);
// thread2
cnum w;
wait(mutex_y2);
wait(mutex_z);
w = add(y, z);
signal(mutex_z);
signal(mutex_y2);
// thread3
cnum w;
w.a = 1;
w.b = 1;
wait(mutex_z);
z = add(z, w);
signal(mutex_z);
wait(mutex_y1);
wait(mutex_y2);
y = add(y, w);
signal(mutex_y1);
signal(mutex_y2);甲乙双方均采用后退 N 帧协议(GBN)进行持续的双向数据传输,且双方始终采用捎带确认,帧长均为 1000B。Sx,y 和 Rx,y 分别表示甲方和乙方发送的数据帧,其中 x 是发送序号,y 是确认序号(表示希望接收对方的下一帧序号);数据帧的发送序号和确认序号字段均为 3 比特。信道传输速率为 100Mbps,RTT = 0.96ms。下图给出了甲方发送数据帧和接收数据帧的两种场景,其中 t0 为初始时刻,此时甲方的发送和确认序号均为 0,t1 时刻甲方有足够多的数据待发送。

请回答下列问题。
(1)对于图(a),t0 时刻到 t1 时刻期间,甲方可以断定乙方已正确接收的数据帧数是多少?正确接收的是哪几个帧?(请用 Sx,y 形式给出。)
(2)对于图(a),从 t1 时刻起,甲方在不出现超时且未收到乙方新的数据帧之前,最多还可以发送多少个数据帧?其中第一个帧和最后一个帧分别是哪个?(请用 Sx,y 形式给出。)
(3)对于图(b),从 t1 时刻起,甲方在不出现新的超时且未收到乙方新的数据帧之前,需要重发多少个数据帧?重发的第一个帧是哪个?(请用 Sx,y 形式给出。)
(4)甲方可以达到的最大信道利用率是多少?
(1)3个;S0,0、S1,0、S2,0。
(2)5个;S3,2、S1,2。
(3)3个;S2,3。
(4)50%。