Dotcpp  >  试卷列表  >  2017年考研408计算机统考真题在线评测(附答案)

2017年考研408计算机统考真题在线评测(附答案)


第1题

下列函数的时间复杂度是( )。

1
2
3
4
5
int func(int n){
    int i=0, sum=0;
    while(sum < n) sum += ++i;
    return i;
}
共 2 分 

第2题

下列关于栈的叙述中,错误的是( )。

Ⅰ. 采用非递归方式重写递归程序时必须使用栈

Ⅱ. 函数调用时,系统要用栈保存必要的信息   

Ⅲ. 只要确定了入栈次序,即可确定出栈次序   

Ⅳ. 栈是一种受限的线性表,允许在其两端进行操作

共 2 分 

第3题

适用于压缩存储稀疏矩阵的两种存储结构是( )。

共 2 分 

第4题

要使一棵非空二叉树的先序序列与中序序列相同,其所有非叶结点须满足的条件是( )。

共 2 分 

第5题

已知一棵二叉树的树形如下图所示,其后序序列为e,a,c,b,d,g,f,树中与结点a同层的结点是( )。

二叉树

共 2 分 

第6题

已知字符集{a,b,c,d,e,f,g,h},若各字符的哈夫曼编码依次是0100,10,0000,0101,001,011,11,0001,则编码序列0100011001001011110101的译码结果是( )。

共 2 分 

第7题

已知无向图G含有16条边,其中度为4的顶点个数为3,度为3的顶点个数为4,其他顶点的度均小于3。图G所含的顶点个数至少是( )。

共 2 分 

第8题

下列二叉树中,可能成为折半查找判定树(不含外部结点)的是( )。

二叉树

共 2 分 

第9题

下列应用中,适合使用B+树的是( )。

共 2 分 

第10题

在内部排序时,若选择了归并排序而没有选择插入排序,则可能的理由是( )。

Ⅰ. 归并排序的程序代码更短

Ⅱ. 归并排序的占用空间更少

Ⅲ. 归并排序的运行效率更高

共 2 分 

第11题

下列排序方法中,若将顺序存储更换为链式存储,则算法的时间效率会降低的是( )。

Ⅰ. 插入排序   Ⅱ. 选择排序   Ⅲ. 起泡排序  

Ⅳ. 希尔排序   Ⅴ. 堆排序

共 2 分 

第12题

假定计算机M1和M2具有相同的指令集体系结构(ISA),主频分别为1.5GHz和1.2GHz。在M1和M2上运行某基准程序P,平均CPI分别为2和1,则程序P在M1和M2上运行时间的比值是( )。

共 2 分 

第13题

某计算机主存按字节编址,由4个64M×8位的DRAM芯片采用交叉编址方式构成,并与宽度为32位的存储器总线相连,主存每次最多读写32位数据。若double型变量x的主存地址为804 001AH,则读取x需要的存储周期数是( )。

共 2 分 

第14题

某C语言程序段如下:

1
2
3
4
5
for(i=0;i<=9;i++){
    temp = 1;
    for(j=0;j<=i;j++) temp *= a[j];
    sum += temp;
}

下列关于数组a的访问局部性的描述中,正确的是( )。

共 2 分 

第15题

下列寻址方式中,最适合按下标顺序访问一维数组元素的是( )。

共 2 分 

第16题

某计算机按字节编址,指令字长固定且只有两种指令格式,其中三地址指令29条,二地址指令107条,每个地址字段为6位,则指令字长至少应该是( )。

共 2 分 

第17题

下列关于超标量流水线特性的叙述中,正确的是( )。

Ⅰ. 能缩短流水线功能段的处理时间

Ⅱ. 能在一个时钟周期内同时发射多条指令

Ⅲ. 能结合动态调度技术提高指令执行并行性

共 2 分 

第18题

下列关于主存储器(MM)和控制存储器(CS)的叙述中,错误的是( )。

共 2 分 

第19题

下列关于指令流水线数据通路的叙述中,错误的是( )。

共 2 分 

第20题

下列关于多总线结构的叙述中,错误的是( )。

共 2 分 

第21题

I/O指令实现的数据传送通常发生在( )。

共 2 分 

第22题

下列关于多重中断系统的叙述中,错误的是( )。

共 2 分 

第23题

假设4个作业到达系统的时刻和运行时间如下表所示。

作业

到达时刻t

运行时间

J1

03

J2

13

J3

12

J4

31

系统在t=2时开始作业调度。若分别采用先来先服务和短作业优先调度算法,则选中的作业分别是( )。

共 2 分 

第24题

执行系统调用的过程包括如下主要操作:

①返回用户态      ②执行陷入(trap)指令    

③传递系统调用参数     ④执行相应的服务程序

正确的执行顺序是( )。

共 2 分 

第25题

某计算机按字节编址,其动态分区内存管理采用最佳适应算法,每次分配和回收内存后都对空闲分区链重新排序。当前空闲分区信息如下表所示。

分区起始地址

20K

500K

1000K

200K

分区大小

40KB

80KB

100K

200KB

回收起始地址为60K、大小为140KB的分区后,系统中空闲分区的数量、空闲分区链第一个分区的起始地址和大小分别是( )。

共 2 分 

第26题

某文件系统的簇和磁盘扇区大小分别为1KB和512B。若一个文件的大小为1026B,则系统分配给该文件的磁盘空间大小是( )。

共 2 分 

第27题

下列有关基于时间片的进程调度的叙述中,错误的是( )。

共 2 分 

第28题

与单道程序系统相比,多道程序系统的优点是( )。

Ⅰ. CPU利用率高     Ⅱ. 系统开销小

Ⅲ. 系统吞吐量大     Ⅳ. I/O设备利用率高

共 2 分 

第29题

下列选项中,磁盘逻辑格式化程序所做的工作是( )。

Ⅰ. 对磁盘进行分区

Ⅱ. 建立文件系统的根目录   

Ⅲ. 确定磁盘扇区校验码所占位数

Ⅳ. 对保存空闲磁盘块信息的数据结构进行初始化

共 2 分 

第30题

某文件系统中,针对每个文件,用户类别分为4类:安全管理员、文件主、文件主的伙伴、其他用户;访问权限分为5种:完全控制、执行、修改、读取、写入。若文件控制块中用二进制位串表示文件权限,为表示不同类别用户对一个文件的访问权限,则描述文件权限的位数至少应为( )。

共 2 分 

第31题

若文件f1的硬链接为f2,两个进程分别打开f1和f2,获得对应的文件描述符为fd1和fd2,则下列叙述中,正确的是( )。

Ⅰ. f1和f2的读写指针位置保持相同

Ⅱ. f1和f2共享同一个内存索引结点

Ⅲ. fd1和fd2分别指向各自的用户打开文件表中的一项

共 2 分 

第32题

系统将数据从磁盘读到内存的过程包括以下操作:

①DMA控制器发出中断请求

②初始化DMA控制器并启动磁盘

③从磁盘传输一块数据到内存缓冲区

④执行“DMA结束”中断服务程序

正确的执行顺序是( )。

共 2 分 

第33题

假设OSⅠ参考模型的应用层欲发送400B的数据(无拆分),除物理层和应用层之外,其他各层在封装PDU时均引入20B的额外开销,则应用层数据传输效率约为( )。

共 2 分 

第34题

若信道在无噪声情况下的极限数据传输速率不小于信噪比为30dB条件下的极限数据传输速率,则信号状态数至少是( )。

共 2 分 

第35题

在下图所示的网络中,若主机H发送一个封装访问Internet的IP分组的IEEE802.11数据帧F,则帧F的地址1、地址2和地址3分别是( )。

网络示意图

共 2 分 

第36题

下列IP地址中,只能作为IP分组的源IP地址但不能作为目的IP地址的是( )。

共 2 分 

第37题

直接封装RIP、OSPF、BGP报文的协议分别是( )。

共 2 分 

第38题

若将网络21.3.0.0/16划分为128个规模相同的子网,则每个子网可分配的最大IP地址个数是( )。

共 2 分 

第39题

若甲向乙发起一个TCP连接,最大段长MSS=1KB,RTT=5ms,乙开辟的接收缓存为64KB,则甲从连接建立成功至发送窗口达到32KB,需经过的时间至少是( )。

共 2 分 

第40题

下列关于FTP协议的叙述中,错误的是( )。

共 2 分 

第41题

请设计一个算法,将给定的表达式树(二叉树)转换为等价的中缀表达式(通过括号反映操作符的计算次序)并输出。例如,当下列两棵表达式树作为算法的输入时,输出的等价中缀表达式分别为(a+b) * (c * (-d)和(a * b)+(-(c-d))。

二叉树

二叉树结点定义如下:

1
2
3
4
typedef struct node{
    char data[10];                 //存储操作数或操作符
    struct node *left, *right;
}BTree;

请回答下列问题。

(1)给出算法的基本设计思想。

(2)根据设计思想,采用C或C++语言描述算法,关键之处给出注释。


答:

(1)算法的基本设计思想

表达式树的中序序列加上必要的括号即为等价的中缀表达式。可以基于二叉树的中序遍历策略得到所需的表达式。(3分)

表达式树中分支结点所对应的子表达式的计算次序,由该分支结点所处的位置决定。为得到正确的中缀表达式,需要在生成遍历序列的同时,在适当位置增加必要的括号。显然,表达式的最外层(对应根结点)及操作数(对应叶结点)不需要添加括号。

(2)算法实现(10分)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void BtreeToE(BTree *root) {
    BtreeToExp(root,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层括号
    }
}
共 0 分 

第42题

使用Prim(普里姆)算法求带权连通图的最小(代价)生成树(MST)。请回答下列问题。

(1)对下列图G,从顶点A开始求G的MST,依次给出按算法选出的边。

(2)图G的MST是唯一的吗?

(3)对任意的带权连通图,满足什么条件时,其MST是唯一的?

图G


答:

(1)Prim算法属于贪心策略。算法从一个任意的顶点开始,一直长大到覆盖图中所有顶点为止。算法每一步在连接树集合S中顶点和其他顶点的边中,选择一条使得树的总权重增加最小的边加入集合S。当算法终止时,S就是最小生成树。

①S中顶点为A,候选边为(A,D)、(A,B)、(A,E),选择(A,D)加入S。

②S中顶点为A、D,候选边为(A,B)、(A,E)、(D,E)、(C,D),选择(D,E),加入S。

③S中顶点为A、D、E,候选边为(A,B)、(C,D)、(C,E),选择(C,E)加入S。

④S中顶点为A、D、E、C,候选边为(A,B)、(B,C),选择(B,C)加入S。

⑤S就是最小生成树。

依次选出的边为:

(A,D),(D,E),(C,E),(B,C) (4分)

(2)图G的MST是唯一的。(2分)第一小题的最小生成树包括了图中权值最小的四条边,其他边都比这四条边大,所以此图的MST唯一。

(3)当带权连通图的任意一个环中所包含的边的权值均不相同时,其MST是唯一的。

共 0 分 

第43题

已知公式,计算f(n)的C语言函数f1如下:

1
2
3
4
5
6
7
8
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采用IEEE754单精度标准。请回答下列问题。

(1)当n=0时,f1会出现死循环,为什么?若将f1中的变量和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)由于i和n是unsigned型,故“i<=n-1”是无符号数比较,n=0时,n-1的机器数为全1,值是232-1,为unsigned型可表示的最大数,条件“i<=n-1”永真,因此出现死循环。(2分)

若i和n改为int类型,则不会出现死循环。(1分)

因为“i<=n-1”是带符号整数比较,n=0时,n-1的值是-1,当i=0时条件“i<=n-1”不成立,此时退出for循环。(1分)

(2)f1(23)与f2(23)的返回值相等。(1分)f(23) = 223+1-1 = 224-1,它的二进制形式是24个1。int占32位,没有溢出。float有1个符号位,8个指数位,23个底数位,23个底数位可以表示24位的底数。所以两者返回值相等。

f1(23)的机器数是 00FF FFFFH。(1分)

f2(23)的机器数是 4B7F FFFFH。(1分)

显而易见前者是24个1,即 0000 0000 1111 1111 1111 1111 1111 1111(2),后者符号位是 0,指数位为 23+127(10) = 1001 0110(2),底数位是 111 1111 1111 1111 1111 1111(2)。

(3)当n=24时,f(24) = 1 1111 1111 1111 1111 1111 1111 B,而float型数只有24位有效位,舍入后数值增大,所以f2(24)比f1(24)大1。(1分)

(4)显然f(31)已超出了int型数据的表示范围,用f1(31)实现时得到的机器数为32个1,作为int型数解释时其值为-1,即f1(31)的返回值为-1。(1分)

因为int型最大可表示数是0后面加31个1,故使f1(n)的返回值与f(n)相等的最大n值是30。(1分)

(5)IEEE 754标准用“阶码全1、尾数全0”表示无穷大。f2返回值为float型,机器数7F80 0000H对应的值是+∞。(1分)当n=126时,f(126) = 2127-1 = 1.1…1×2126,对应阶码为127+126=253,尾数部分舍入后阶码加1,最终阶码为254,是IEEE 754单精度格式表示的最大阶码。故使f2结果不溢出的最大n值为126。(1分)当n=23时,f(23)为24位1,float型数有24位有效位,所以不需舍入,结果精确。故使f2获得精确结果的最大n值为23。(1分)

共 0 分 

第44题

在按字节编址的计算机M上,题43中f1的部分源程序(阴影部分)与对应的机器级代码(包括指令的虚拟地址)如下:

     int fl(unsigned n)

1    00401020   55          push ebp

     ......        ...          ......

         for(unsigned i=0; i<=n-1; i++)

     ......        ...          ......

20   0040105E   39 4D F4    cmp dword ptr[ebq-0Ch],ecx

     ......        ...          ......

     {    power *= 2;

 ......        ...          ......

23   00401066 D1 E2      shl edx,1

 ......  ...         ......

  return sum;

 ......        ...           ......

35   0040107F C3           ret

  }

其中,机器级代码行包括行号、虚拟地址、机器指令和汇编指令。请回答下列问题。

(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中能否也用sh1指令实现power*2?为什么?


答:

(1)M为CISC。(1分)M的指令长短不一,不符合RISC指令系统特点。(1分)

(2)f1的机器代码占96 B。(1分)

因为f1的第一条指令“push ebp”所在的虚拟地址为0040 1020H,最后一条指令“ret”所在的虚拟地址为0040 107FH,所以,f1的机器指令代码长度为0040 107FH-0040 1020H+1 = 60H = 96个字节。(1分)

(3)CF=1。(1分)cmp指令实现i与n-1的比较功能,进行的是减法运算。在执行f1(0)过程中,n=0,当i=0时, i=0000 0000H,并且n-1=FFFF FFFFH。因此,当执行第20条指令时,在补码加/减运算器中执行“0减FFFF FFFFH”的操作,即0000 0000H+0000 0000H+1=0000 0001H,此时,进位输出C=0,减法运算时的借位标志CF=C⊕1=1。(2分)

(4)f2中不能用shl指令实现power*2。(1分)

因为 shl 指令用来将一个整数的所有有效数位作为一个整体左移;而f2中的变量power是float型,其机器数中不包含最高有效数位,但包含了阶码部分,将其作为一个整体左移时并不能实现“乘2”的功能,因而f2中不能用shl指令实现power*2。(2分)浮点数运算比整型运算要复杂,耗时也较长。

共 0 分 

第45题

假定题44给出的计算机M采用二级分页虚拟存储管理方式,虚拟地址格式如下:

页目录号(10位)
页表索引(10位)
页内偏移量(12位)

请针对题43的函数f1和题44中的机器指令代码,回答下列问题。

(1)函数f1的机器指令代码占多少页?

(2)取第1条指令(push ebp)时,若在进行地址变换的过程中需要访问内存中的页目录和页表,则会分别访问它们各自的第几个表项(编号从0开始)?

(3)M的I/O采用中断控制方式。若进程P在调用f1之前通过scanf( )获取n的值,则在执行scanf( )的过程中,进程P的状态会如何变化?CPU是否会进入内核态?


答:

(1)函数f1的代码段中所有指令的虚拟地址的高20位相同,因此f1的机器指令代码在同一页中,仅占用1页。(1分)页目录号用于寻找页目录的表项,该表项包含页表的位置。页表索引用于寻找页表的表项,该表项包含页的位置。

(2)push ebp指令的虚拟地址的最高10位(页目录号)为 00 0000 0001,中间10位(页表索引)为00 0000 0001,所以,取该指令时访问了页目录的第1个表项,(1分)在对应的页表中访问了第1个表项。(1分)

(3)在执行scanf( )的过程中,进程P因等待输入而从执行态变为阻塞态。(1分)输入结束时,P被中断处理程序唤醒,变为就绪态。(1分)P被调度程序调度,变为运行态。(1分)CPU状态会从用户态变为内核态。(1分)

共 0 分 

第46题

某进程中有3个并发执行的线程thread1、thread2和thread3,其伪代码如下所示。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//复数的结构类型定义
typedef struct
{
    float a;
    float b;
} cnum;
cnum x, y, z; //全局变量
  
//计算两个复数之和
cnum add(cnum p, cnum q)
{
    cnum s;
    s.a = p.a+q.a;
    s.b = p.b+q.b;
    return s;
}


1
2
3
4
5
6
7
8
9
10
11
12
13
thread1
{
    cnum w;
    w = add(x, y);
    
}
  
thread2
{
    cnum w;
    w = add(y, z),
    
}


1
2
3
4
5
6
7
8
9
thread3
{
    cnum w;
    w.a = 1;
    w.b = 1;
    z = add(z, w);
    y = add(y, w);
    
}


请添加必要的信号量和P、V(或wait( )、signal( ))操作,要求确保线程互斥访问临界资源,并且最大程度地并发执行。


答:

先找出线程对在各个变量上的互斥、并发关系。如果是一读一写或两个都是写,那么这就是互斥关系。每一个互斥关系都需要一个信号量进行调节。

semaphore mutex_y1=1;//mutex_y1用于thread1与thread3对变量y的互斥访问。(1分)

semaphore mutex_y2=1;//mutex_y2用于thread2与thread3对变量y的互斥访问。(1分)

semaphore mutex_z=1; //mutex_z用于变量z的互斥访问。(1分)

互斥代码如下:(5分)

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);

    ……

}


共 0 分 

第47题

甲乙双方均采用后退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)t0时刻到t1时刻期间,甲方可以断定乙方已正确接收了3个数据帧,(1分)分别是S0,0、S1,0、S2,0。(1分)R3,3说明乙发送的数据帧确认号是3,即希望甲发送序号3的数据帧,说明乙已经接收了序号为 0~2的数据帧。

(2)从t1时刻起,甲方最多还可以发送5个数据帧,(1分)其中第一个帧是S5,2,(1分)最后一个数据帧是S1,2。(1分)发送序号3位,有8个序号。在GBN协议中,序号个数>=发送窗口+1,所以这里发送窗口最大为7。此时已发送了S3,0 和 S4,1,所以最多还可以发送5个帧。

(3)甲方需要重发3个数据帧(1分),重发的第一个帧是S2,3。(1分)在GBN协议中,接收方发送了N帧后,检测出错,则需要发送出错帧及其之后的帧。S2,0超时,所以重发的第一帧是S2。已收到乙的R2帧,所以确认号应为3。

(4)甲方可以达到的最大信道利用率是:

信道利用率


U=发送数据的时间/从开始发送第一帧到收到第一个确认帧的时间 = N * Td /(Td + RTT + Ta)。

U是信道利用率,N是发送窗口的最大值,Td是发送一数据帧的时间,RTT是往返时间,Ta是发送一确认帧的时间。这里采用捎带确认,Td=Ta。

共 0 分