嵌入式100题

进来做点题。

  1. 下面哪个ARM的寄存器是栈指针(B)
    A R12
    B R13
    C R14
    D R15
    解析:寄存器R13在ARM指令中常用作堆栈指针SP,寄存器R14称为子程序链接寄存器LR(Link Register),寄存器R15用作程序计数器(PC)

  2. 下列哪个方法能让ARM Cortex-M从线程模式切换到处理器模式(C)
    A 修改CPSR对应的标志位
    B 修改SPSR到对应的模式再更新CPU状态
    C 运行SVC
    D 让处理器执行未定义指令
    解析:SVC指令是过去的SWI指令,架构更改之后名称也改变,SVC通常用于在操作系统上请求特权操作或访问系统资源

  3. 32位ARM处理器有__种处理器工作模式,以及__个标识CPU工作状态和程序运行状态的状态寄存器(B)
    A 7,7
    B 7,6
    C 6,6
    D 6,7
    解析:ARM体系的CPU有以下7种工作模式:

    1. 用户模式(usr):正常的程序执行状态
    2. 快速中断模式(fiq):用于支持高速数据传输或通道处理
    3. 中断模式(irq):用于普通中断处理
    4. 管理模式(svc):操作系统使用的保护模式
    5. 系统模式(sys):运行具有特权的操作系统任务
    6. 数据访问终止模式(abt):数据或指令预取终止时进入该模式
    7. 未定义指令终止模式(und):未定义的指令执行时进入该模式

    6个状态寄存器描述CPU工作状态:

    1. 1个固定用作CPSR(程序状态寄存器,用来记录当前cpu的状态,因此只有一个);
    2. 5个固定用作5种异常模式下的SPSR(Saved Program Status Register,程序状态保存寄存器,用来保存CPSR的,返回时将spsr赋给cpsr)
  4. 下列关于RISC处理器说法错误的是(D)
    A 流水线每周期前进一步
    B 具备多个通用寄存器
    C 独立的Load和Store指令完成数据再寄存器和外部存储器之间的传输
    D 指令长度不固定,执行需要多个周期
    解析: 执行为单周期,D错。

  5. 在小端模式的存储结构中,存储32位数0x2876165到1000H-1003H四个字节单元中,1000H中存放的是(C)
    A 0x00
    B 0x87
    C 0x65
    D 0x02
    解析:小端模式与阅读顺序相反。

  6. 寄存器R15除了可以做通用寄存器以外,还可以做(A)
    A 程序计数器
    B 链接寄存器
    C 栈指针寄存器
    D 基址寄存器
    解析:R15为PC,程序计数器

  7. 若R1=1000H,(1000H)=0x28,(1008H)=0x21,则执行如下命令:
    LDR R0, [R1, #8]!
    后R0的值为(D)
    A 0x1000
    B 0x28
    C 0x1008
    D 0x21
    解析:讲R1+8后的值作为地址,地址指向的值0x21传递给R0。

  8. 下列关于MMU说法错误的是(B)
    A MMU提供的一个关键服务是使得各个任务作为各自独立的程序在其自己的私有存储空间中运行
    B 在带MMU的操作系统控制下,运行的任务必须知道其他与之无关的任务的存储需求情况,以方便简化任务设计
    C MMU提供了一些资源以允许使用虚拟存储器
    D MMU作为转换器,将程序和数据的虚拟地址转换为实际的物理地址,即在物理主存中的地址
    解析:不需要知道其他的任务所使用的内存情况

  9. 下列哪个不是单片机最小系统的组成(D)
    A 时钟
    B 复位电路
    C 电源
    D RAM
    解析:一般单片机的片上有小容量的内存。

  10. ARM芯片的存储器系统中,读取速度最快的是(D)
    A Cache
    B Flash
    C 内存
    D 寄存器
    解析:寄存器就直接连接在CPU计算单元上,cache则在内存控制器外面。

  1. 下面关于TLB( Translation Look- aside buffer)说法中错误的一项是(C)
    A TLB专门用于缓存内存中的页表项,一般在MMU单元内部
    B 当处理器要访问一个虚拟地址时,首先会在TLB中查询
    C TLB是一个内存管理单元用于改进物理地址到虚拟地址转换速度的缓存
    D 存放的TLB表项就越多,TLB命中率就越高,但是TLB的容量是有限的
    解析:改进虚拟地址到物理地址的转换速度,系统使用快表(TLB)首先访问的是虚拟内存。

  2. 下列哪个不属于计算机的基本组成(C)
    A 控制器
    B 运算器
    C 处理器
    D 存储器
    解析:处理器不在计算机基本组成之中。

  3. 下列对Linux系统中断上半部和下半部说法错误的是(D)
    A Linux 内核将中断分为上半部和下半部的主要目的就是实现中断处理函数的快进快出
    B 对时间敏感、执行速度快的操作可以放到中断处理函数
    C 外设设备的数据输入至内存应当放在上半部处理
    D tasklet属于Linux中断上半部的手段
    解析:下半部有tasklet和软中断,以及工作队列。

  4. 下列那种类型设备不属于Linux的主要设备(B)
    A 字符设备
    B 存储设备
    C 块设备
    D 网络设备
    解析:一般存储设备属于块设备。

  5. 下列关于Linux系统内存管理描述不合理的一项是(D)
    A 虚拟内存的目的是为了让物理内存扩充成更大的逻辑内存,从而让程序获得更多的可用内存
    B 缺页中断是限制Linux实时性的原因之一
    C 先进先出算法会提高内存的缺页率
    D 最佳选择算法是目前最主要使用的内存页面置换算法
    解析:最佳选择算法是内存页面置换算法的理想情况。

  6. 下列关于Linux内存管理中分页分段技术描述正确的一项是(C)
    A 分段是一维地址空间,分页是二维地址空间
    B 段的大小不可以改变,页的大小可以改变
    C 分页主要为了扩大虚拟内存,分段主要为了程序数据的独立
    D 程序开发者需要自己确定分页的大小
    解析:A,分页一维,分段二维;B,页大小不可变;D,程序员需要确定分段大小。

  7. 下列哪一个文件系统不是为Nand Flash设计的(B)
    A yaffs2
    B ext4
    C ubi
    D jffs
    解析:ext4不适用于Nand Flash芯片,其他都是为Nand Flash定制的。

  8. 下列关于操作系统说法正确的是(B)
    A 批处理系统常采用时间片轮转算法调度程序
    B VxWorks是最广泛商用的硬实时操作系统
    C RT-Linux和Linux系统同样属于软实时操作系统
    D 最短剩余时间优先算法是RT-Linux实时性的保证
    解析:时间片轮转算法属于分时操作系统,RT-Linux属于硬实时操纵系统;RT-Linux采用抢占调度。

  9. Linux系统可以用nice指令查看进程的优先级,下列关于优先级说法不正确的是(B)
    A Linux进程的nice默认值为0
    B nice值越大,进程优先级越高
    C 内核源码中定义的优先级不可以小于0
    D 优先级越高,程序获取的处理器时间越多
    解析:Nice值越小,优先级越高。

  10. 下列哪个不属于程序的编译过程(D)
    A 编译
    B 汇编
    C 预处理
    D 连接
    解析:链接

  11. 在Linux系统中, 哪个文件你可以存储用于创建用户目录的系统用户默认文件?(D)
    A /usr/tmp
    B /etc/default
    C /etc/skel
    D /etc/users
    解析:其他属于系统级的配置文件存放位置

  12. 操作系统采用缓冲技术,能够减少CPU(A)次数,从而提高资源的利用率。
    A 中断
    B 访问
    C 控制
    D 依赖
    解析:引入缓冲的主要原因包括:缓和CPU与I/O设备间速度不匹配的矛盾;减少对CPU的中断频率,放宽对中断响应时间的限制;提高CPU和I/O设备之间的并行性。所以采用缓冲技术,可减少对CPU的中断次数,从而提高系统效率。

  1. 下列方法中可以解除操作系统死锁的方法是(C)
    A 银行家算法
    B 资源静态分配法
    C 剥夺资源法
    D 资源分配图简化法
    解析:银行家算法用于避免死锁,剥夺资源法用于解除死锁

  2. 同个进程的不同线程以下不能被共享的是?(D)
    A 全局变量
    B 堆
    C 文件句柄
    D 栈
    解析:栈是私有的。

  3. 设fp已定义,执行语句fp=fopen(“file”,“w”);后,以下针对文本文件file操作叙述的选项正确的是:(B)
    A 可以随意读和写
    B 只能写不能读
    C 可以在原有内容后追加写
    D 写操作结束后可以从头开始读
    解析:表示只能写,因为没有”r”。

  4. 已经获得除CPU以外的所有所需资源的进程处于(A)状态
    A 就绪状态
    B 阻塞状态
    C 运行状态
    D 活动状态
    解析:就绪以等待CPU的使用权,阻塞表示等待其他条件的触发,仍然存在对某些资源的需求。

  5. 以下关于内存的说法错误的是(B)
    A RAM是随机存储器,在断电时将丢失其存储内容,ROM是只读存储器,断电时不会丢失存储内容
    B 内存的数据带宽与内存的数据传输频率、内存数据总线位数以及内存大小有关
    C 用户进程通常情况只能访问用户空间的虚拟地址,不能访问内核空间虚拟地址
    D Linux中使用 buddy system算法可以管理页外内存碎片,使用slub算法可以管理页内内存碎片
    解析:带宽与总线位数有关。

  6. 以下哪些事件不会导致进程的创建(C)
    A 系统初始化
    B fork系统调用
    C pthread_ create函数调用
    D 一个批处理作业的初始化
    解析:C是创建线程,必然发生在进程以内。

  7. 下列说法错误的是(A)
    A 计算机体系结构是一门研究计算机系统软件结构的学科。
    B 现代计算机处理器结构按照指令类型划分,可分为复杂指令集计算机和精简指令集计算机
    C RISC技术对比CISC最大的区别就是对CPI的精简
    D 单指令流单数据流计算机的每个机器周期最多执行一条指令
    解析:计算机的基础是硬件,不仅仅包括软件结构

  8. 下列有关软链接表述正确的是?(C)
    A 不可以对不存在的文件创建软链接
    B 不能对目录创建软链接
    C 和普通文件没有什么不同,inode都指向同一个文件在硬量中的区块
    D 保存了其代表的文件的绝对路径是另一种文件。在硬盘上有独立的区块,访问时替代自身路径
    解析:在Linux系统中,一切皆为文件。软链接相当于Windows中的“快捷方式”,读取软链接系统将自动访问指向的文件。

  9. 时间片轮转法进行进程调度是为了(A)
    A 多个进程都能得到系统的及时响应
    B 先来先服务
    C 优先级较高的进程得到及时响应
    D 需要cpu最短的进程先做
    解析:时间片轮转调度是为了让每个进程都能享有CPU的使用权

  10. 在32位系统环境,编译选项为4字节对齐,那么sizeof (A)和sizeof (B)分别是______。(C)

    struct A {
        int a;
        short b;
        int c;
        char d;
    };
    
    struct B {
        int a;
        short b;
        char d;
        int c;
    };

    A 16,16
    B 13,12
    C 16,12
    D 11,16
    解析:前者short,char均对齐为4字节,后者short和char合并对齐为4字节。

  11. 32位处理器是指处理器的(B)是32位的
    A 控制总线
    B 数据总线
    C 地址总线
    D 所有的总线
    解析:32位处理器,计算机中的位数指的是CPU一次能处理的最大位数。32位计算机的CPU一次最多能处理32位数据

  12. 下列关于单片机引脚输出说法错误的是(B)
    A 推挽输出既可以直接输出高电平或者低电平
    B 开漏输出既可以直接输出高电平或者低电平
    C 推挽输出可以提高电路的负载能力
    D 开漏输出相当于三极管的集电极
    解析:开漏输出只有当有上拉电阻时才可以输出高电平

  13. 汇编语言中,存放下一条将要执行的指令地址寄存器是(D)
    A SP
    B AX
    C DI
    D IP
    解析:SP:堆栈指针(BP:基址指针),AX:累加器,DI:目的变址寄存器(SI:源变址寄存器),IP:指针寄存器(CS:代码段寄存器

  14. 在测试某50MHz的低频时钟信号,发现使用500M带宽示波器测试出的上升沿为1ns,而使用带宽为1G的示波器测试出上升沿为0.5ns,那么正确选择示波器带宽的原则是(C)
    A 示波器带宽为10倍频被测信号的频率
    B 示波器带宽为20倍频被测信号的频率
    C 示波器带宽为3倍频被测信号的频率
    D 示波器带宽由被测信号的上升沿决定
    解析:奈奎斯特采样定律要求采样频率至少为信号频率的两倍,工业上要求不高的情况下一般采用三倍。

  15. 若万用表无“OFF”档位,当万用表使用完毕后,则转换开关应转到(B)位置。
    A 直流电流最低档
    B 交流电压最高档
    C 交流电压最低档
    D 直流电流最高低档
    解析:防止误操作导致高压击穿电路,因此交流最高档

  16. 下面关于SPI的叙述中,错误的是(C)
    A SPI是一种同步串行外设接口
    B SPI是一种全双工串行外设接口
    C 通过SPI只能连接两个设备
    D 通过SPI可以方便地实现几Mb/s(或更高)的数据传输速率
    解析:SPI可以主机对多个从机,通过片选信号。

  17. I2C是计算机系统内部常用的总线,以下哪一个定义不适用于I2C(B)
    A 低速总线
    B 并行总线
    C 串行总线
    D 支持双向传输
    解析:I2C是串行总线,只有一个数据线

  18. 下面关于I2C总线的叙述中,错误的是(C)
    A I2C总线是集成电路互连总线的简称
    B I2C总线是一种串行半双工传输的总线标准
    C I2C总线有三条信号线:数据线SDA,时钟线SCL,应答线ACK
    D I2C总线属于多主总线,可以同时挂接多个主控器件
    解析:I2C没有应答线。

  19. 下面关于UART的叙述中,正确的是(B)
    A UART不能实现全双工通信
    B UART即为通用异步收发器
    C UART通信波特率固定为115200bps,不能调节
    D UART发送字符的长度固定为8位
    解析:UART可以全双工,波特率可以灵活配置,字符长度不固定。

  20. NAND FLASH和NOR FLASH的说法正确的是。(D)
    A NOR的读速度比NAND稍慢一些
    B NAND的写入速度比NOR慢很多
    C NAND的擦除速度远比NOR的慢
    D 大多数写入操作需要先进行擦除操作
    解析:NOR读取快,写入慢,擦除也慢,Flash的写入都是需要预先擦除为0。

  21. 传感器的输出信号达到稳定时,输出信号变化与输入信号变化的比值代表传感器的 (D)
    A 抗干扰能力
    B 精度
    C 线性度
    D 灵敏度
    解析:灵敏度为线性传感器的斜率。

  22. 以下关于驱动程序与应用程序的描述中,错误的是(C)
    A 应用程序从头到尾执行一个任务
    B 驱动程序完成初始化后不再运行,等待系统调用
    C 应用程序不可以使用glibc等标准c函数库
    D 驱动程序以一个模块初始化函数作为入口
    解析:Linux驱动include了Linux内核的头文件,而Linux内核使用了C Library.

  23. TCP/IP模型的体系结构中,ICMP协议属于(A)。
    A 网络层
    B 应用层
    C 数据链路层
    D 传输层
    解析:ICMP协议是一种面向无连接的协议,用于传输出错报告控制信息。它是一个非常重要的协议,它对于网络安全具有极其重要的意义。它属于网络层协议,主要用于在主机与路由器之间传递控制信息,包括报告错误、交换受限控制和状态信息等。当遇到IP数据无法访问目标、IP路由器无法按当前的传输速率转发数据包等情况时,会自动发送ICMP消息。ICMP是TCP/IP模型中网络层的重要成员,与IP协议、ARP协议、RARP协议及IGMP协议共同构成TCP/IP模型中的网络层。

  24. 在局域网络内的某台主机用ping命令测试网络连接时发现网络内部的主机都可以连同,而不能与公网连通,问题可能是(C)
    A 主机IP设置有误
    B 没有设置连接局域网的网关
    C 局域网的网关或主机的网关设置有误
    D 局域网DNS服务器设置有误
    解析:能内部连通表示局域网一切正常,与外网的网关连接失败有关

  25. FTP服务和SMTP服务的端口默认分别是(C)
    A 20与25
    B 21与25
    C 20,21与25
    D 20与21
    解析:FTP文件传输协议,有两个端口,21是控制端口,20是数据端口。SMTP是简单邮件传输协议,端口是25

  26. 下面协议中不属于应用层协议的是(A)
    A ICMP、ARP
    B FTP、 TELNET
    C HTTP、SNMP
    D SMTP、POP3
    解析:ICMP、ARP属于网络层

  27. 以下是有关TCP/IP协议中IP地址格式(IPv4)的叙述,其中错误的是(A)。
    A IP地址使用64个二进位表示
    B IP地址由网络号和主机号两部分组成
    C IP地址有A类、B类、C类等不同类型之分
    D 具有C类地址的主机连接在小型网络中
    解析:由32个二进位表示

  28. TCP建立连接的第三次握手报文的发送序列号为1000,确认序列号为2000,则本次连接的第二次握手报文的发送序列号和确认序列号分别是(B)
    A 1999 999
    B 1999 1000
    C 999 2000
    D 999 1999
    解析:有两个序列,客户端发送X,服务器发送Y。三次握手分别是
    客户端:发送X
    服务端:发送Y, 确认X+1
    客户端:发送X+1(1000),确认Y+1(2000)
    可以反推第二次为1999,确认1000这不是同一端的数据包。

  29. 若有定义语句:

    int year=1009
    *p = &year

    以下不能使变量 year 中的值增至 1010 的语句是(D)
    A *p+=1;
    B (*p)++;
    C ++(*p)
    D *p++
    解析:D表示指针加一,而非指针指向的值加一

  30. 若有定义:char a;int b;float c;double d;则表达式“a+b*c-d”的类型为(D)
    A int
    B char
    C float
    D double
    解析:向上兼容

  31. 以下代码中for循环的执行次数是(C)

    for(x=0,y=0;(y=123)&&(x<4);x++);

    A 无限循环
    B 循环次数不定
    C 4次
    D 3次
    解析:y=123不是y==123,y=123是赋值永远为真,因此实际仍然是x从0到4的循环

  32. 在(C)情况下适宜采用 inline 定义内联函数
    A 函数体含有循环语句
    B 函数体含有递归语句
    C 函数代码少、频繁调用
    D 函数代码多,不常调用
    解析:inline是为了减少频繁调用导致入栈出栈的资源消耗。

  33. 设有如下定义:

    int *(*ptr)();

    则以下叙述中正确的是(D)
    A ptr是指向一维数组的指针变量
    B ptr是指向int型数据的指针变量
    C ptr是指向函数的指针,该函数返回一个int型数据
    D ptr是指向函数的指针,该函数的返回值是指向int型数据的指针
    解析:int* 表示返回值是指针,指向int数据,(*ptr)()表示函数指针

  34. 下面这段代码的输出结果为:(A)

    #include
    void change(int*a, int&b, int c)
    {
        c=*a;
        b=30;
        *a=20;
    }
    int main ( )
    {
        int a=10, b=20, c=30;
        change(&a,b,c);
        printf(“%d,%d,%d,”,a,b,c);
        return 0;
    }

    A 20,30,30
    B 10,20,30
    C 20,30,10
    D 10,30,30
    解析:a将地址传进函数,并对指针指向的值赋值为20,因此a变为20;函数内定义了引用b,指向输入的外部变量b,赋值后改变了外部b的值为30;c没有传递地址,函数内部赋值不改变外部变量的值,仍为30。

  35. 有一个如下的结构体:

    struct A{
        long a1;
        short a2;
        int a3;
        int *a4;
    };

    请问在64位编译器下用sizeof(struct A)计算出的大小是多少?(A)
    A 24
    B 28
    C 16
    D 18
    解析:按最大的数据长度对齐,即8字节

  36. 下列关于指针和引用叙述不正确的是(D)
    A 指针可以为空,引用不能为空。
    B 不存在指向空值的引用,但是存在指向空值的指针
    C 引用必须被初始化,但是指针不必
    D 指针初化后不能被改变,引用可以改变所指对象
    解析:指针初始化后可以改变,引用不可以改变对象

  37. 下列关于C++容器描述错误的是?(B)
    A list类型支持双向顺序访问,在list中任何位置插入删除都很快
    B deque类型支持快速顺序访间,在头尾插入/删除速度很快
    C C++标准库map的底层实现为红黑树
    D vector类型在每次调用 pushback时都在栈上开辟新内存
    解析:deque支持快速随机访问。

  38. C/C++中,下列数据类型的转换,哪个可能会发生信息丢失?(C)
    A int -> double
    B int -> long
    C long -> float
    D char -> int
    解析:long应该转换为double才不会丢失整数部分的信息。

  39. int i = 1;const int j =2;以下表示不正确的是(D)
    A const int *p1 = &i;
    B const int *p2 = &j;
    C int *const p3 = &i;
    D int *const p4 = &j;
    解析:

    const int* p;       //p可变,p指向的内容不可变
    int const* p;       //p可变,p指向的内容不可变
    int* const p;       //p不可变,p指向的内容可变
    const int* const p; //p和p指向的内容都不可变
  40. 若 int x = 5&6,那么x的值为(B)
    A 3
    B 4
    C 5
    D 6
    解析:二进制,1001 & 1010 = 1000,即十进制的4

  41. 以下错误的表达式为(D)

    struct {
        int a;
        char b;
    }Q,*p=&Q;

    A Q.a
    B (*p).b
    C p->a
    D *p.b
    解析:如果是结构体指针带*号,*p指向Q,应当加括号。

  42. 在32位系统中,下列类型占用8个字节的为(B)
    A int
    B unsigned long long
    C char
    D short int
    解析:int是4字节,char是1个字节,short int是两个字节,long long是8个字节。

  43. 下列哪个不是面向对象程序设计语言不同于其他语言的主要特点。(B)
    A 继承性
    B 消息传递
    C 多态性
    D 封装性
    解析:继承,多态,封装是面向对象语言的特征。

  44. 以下分别对变量a给出定义,错误的是(C)
    A 一个有10个指针的数组,该指针指向同一个整型数:int *a[10];
    B 一个指向10个整型数组的指针:int (*a)[10];
    C 一个指向函数的指针,该函数有一个整型数并返回一个整型数:int *a(int);
    D 一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数:int (*a[10])(int);
    解析:C正确表达应该是int (*a)(int),int *a(int)表示的是返回整型指针的一个函数。

  45. 下面关于字符数组的初始化,那个是正确的?(B)
    A char b[2][3] = {"d","e","f"};
    B char b[2][3] = {"d","e"};
    C char b[2][3] = {{"d","e","f"},{"a","b","c"}};
    D char b[2] = {"d","e"};
    解析:二维数组,第一个下标2表示最多为两个char数组,char数组可以用字符串形如”abc”表示,最长不超过3个元素,因此B正确。

  46. 下面哪一项将寄存器X的BIT3清零(C)
    A X &= 0x4;
    B X |= 0x4;
    C X &= 0x4;
    D X |= ~0x4;
    解析:先取0x4的反,”
    “,即BIT3为0其余位为1,再和这个数与计算,”&”,选C

  47. 使用gcc编译器生成的.o为后缀的文件是(C)
    A 程序所包含的头文件
    B 预处理过的C源代码文件
    C 编译后的目标文件
    D 经过预编译后的汇编语言源代码文件
    解析:object文件是目标文件

  48. ARMCLANG编译的目标镜像文件中,假设Code 100K,RW Data 50K,RO Data 20K,ZI Data 10K,那么Flash至少应该大于()
    A 150K
    B 170K
    C 110K
    D 180K
    解析:存储器应当存放Code,RW和RO,因为ZI表示0初始化的数据,实际上不占存储空间,但是占内存的使用空间。

  49. 下列有关二进制目标文件说法正确的是(B)
    A .bin文件可以直接烧进存储器
    B .hex文件至少是.bin文件大小的两倍
    C .hex文件可以转化为.elf文件
    D .elf文件是专门为ARM平台提供的可执行文件格式
    解析:elf文件包含调试信息,这在hex文件中是缺失的,因此不可以hex转变为elf文件。

  50. 静态变量通常存储在进程哪个区(D)
    A 栈区
    B 堆区
    C 代码区
    D 全局区
    解析:c++程序内存布局: 1)全局区(静态区)(static)存放全局变量、静态数据,const常量。程序结束后有系统释放 2)栈区(stack) 函数运行时分配,函数结束时释放。由编译器自动分配释放 ,存放为运行函数而分配的局部变量、函数参数、返回数据、返回地址等。其操作方式类似于数据结构中的栈。 3)堆区(heap) 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS(操作系统)回收。分配方式类似于链表。 4)文字常量区 常量字符串就是放在这里的。 程序结束后由系统释放。 5)程序代码区存放函数体(类成员函数和全局函数)的二进制代码。

  51. 关于Linux C静态库和动态库说法错误的是(C)
    A 静态库代码运行速度快
    B 动态库通常后缀是.so
    C 动态库可以解决代码兼容性的问题
    D 静态库存在扩展性的问题
    解析:动态库存在兼容性问题。

  52. 若某线性表常用的操作是存取任一指定序号的元素和在最后进行插入和删除运算,则利用(A)存储方式节省时间
    A.顺序表
    B.双链表
    C.带头结点的双循环链表
    D.单循环链表
    解析:在最后插入删除,则数组这类的顺序表合适。数组支持随机存取

  53. 设数组data[m]作为循环队列的存储空间。front为队头指针,rear为队尾指针,则执行出队操作后其头指针front值为(D)
    A front=front+1
    B front=(front+1)%(m-1)
    C front=(front-1)%m
    D front=(front+1)%m
    解析:循环队列中出队操作后头指针需在循环意义下加1,因此为front=(front+l)%m。

  54. 在循环队列中用数组A[0.m-1]存放队列元素,其队头和队尾指针分别为front和rear,则当前队列中的元素个数是 (D)
    A (front-rear+1)%m
    B (rear-front+1)% m
    C (front-rear+m)% m
    D (rear-front+m)% m
    解析:循环队列中,队头指向的是队首元素的前一个位置,队尾指向队尾元素所在位置。所以当前队列中的元素个数是(rear-froot+m)%m。

  55. 下面算法中可以判断出一个有向图是否有环的是(B)
    A 求短路径
    B 深度优先遍历
    C 广度优先遍历
    D 动态规划
    解析:DFS深度优先遍历是判断环的一种有效算法。

  56. 向一个栈顶指针为h的带头结点的链栈中插入指针s所指的结点时,应执行(D)
    A h->next=s;
    B s->next=h;
    C s->next=h;h->next=s;
    D s->next=h->next;h->next=s;
    解析:考察基本的链表插入。

  57. 若一棵具有n(n>0)个结点的二叉树的先序序列与后序序列正好相反,则该二叉树一定?(C)
    A 结点均无左孩子的二叉树
    B 结点均无右孩子的二叉树
    C 高度为n的二叉树
    D 存在度为2的结点的二叉树
    解析:表示每一层只有个节点。

  58. 线性表(a1,a2,…,an)以链接方式存储时,访问第i位置元素的时间复杂性为(C)
    A O(i)
    B O(1)
    C O(n)
    D O(i-1)
    解析:链表不支持随机访问,只能顺序访问。时间复杂度与n有关,与单次的i无关

  59. 对一个含有20个元素的有序数组做二分查找,数组起始下标为1,则查找A[2]的比较序列的下标为(B)
    A 9,5,4,2
    B 10,5,3,2
    C 9,6,2
    D 20,10,5,3,2
    解析:(1+20)/2 = 10,(1+10)/2=5,以此类推

  60. 设栈S和队列Q的初始状态均为空,元素a,b,c,d,e,f,g依次进入栈S。若每个元素出栈后立即进入推列Q,且7个元素出队的顺序是b,d,c,f,e,a,g,则栈S的容量至少是?(C)
    A 1
    B 2
    C 3
    D 4
    解析:出队顺序就是出栈顺序,元素的出栈顺序是b,d,c,f,e,a,g,可推出进栈出栈顺序为Push(S,a),Push(S,b),Pop(S,b),Push(S,c),Push(S,d),Pop(S,d),Pop(S,c),Push(S,e),Push(S,f),Pop(S,f),Pop(S,e),Pop(S,a),Push(S,g),Pop(S,g)。假设初始所需容量为0,每做一次Push进行一次“+1”操作,每做一次Pop进行一次“-1”操作,记录容量的最大值为3,所以选C。

  61. 下列说法错误的是 (C)
    A 当top等于数组的大下标值时则栈满
    B 栈可以对输入序列部分或全局起求逆作用
    C top=0 时为空栈,元素进栈时指针 top 不断地减 1
    D 利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素,这种形式的栈也称为顺序栈
    解析:top加一

  62. 某二叉树的中序遍历序列为32145,后序遍历序列为32145,则前序遍历序列为(A)
    A 54123
    B 32154
    C 32541
    D 54321
    解析:中序遍历为左、中、右,后序遍历为左、右、中,那么根据后序遍历结果5肯定为根节点,然后根据中序遍历可知5只有左子树,再依据同样的思想可将二叉树画出,即可进行前序遍历

  63. 若已知一个栈的入栈顺序是1,2,3…,n,其输出序列为P1,P2,P3,….Pn,若P1是n,则Pi=(B)?
    A i
    B n-i+1
    C 不确定
    D n-i
    解析:先进先出,因此是一个倒序数组

  64. 下列程序段的时间复杂度是(C)

    int fact(int n){
        if(n<=1){
            return 1;
        }
        return n*fact(n-1);
    }

    A O(log2n)
    B O(nlog2n)
    C O(n)
    D O(n*n)
    解析:递归执行了N次

  65. 下列排序算法时间复杂度最高的是?(C)
    A 堆排序
    B 快速排序
    C 冒泡排序
    D 归并排序
    解析:冒泡排序效率最低

  66. 将两个各有n个元素的有序表归并成一个有序表,最少的比较次数是?(A)
    A n
    B 2n
    C n-1
    D 2n-1
    解析:这里所说的最少次数是基于归并排序的基础上,归并排序的过程是依次取两个表中的最小元素进行比较,然后较小的则放入新表,所以最少次数应为n。

  67. 若某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则最节省运算时间的存储方式是(D)
    A 单链表
    B 仅有头指针的单循环链表
    C 双链表
    D 仅有尾指针的单循环链表
    解析:因为最后位置插入只需要知道尾指针,尾结点后面的第一个结点往往是头结点,头结点的下一个结点就是第线性表的第一个结点。对最后一个元素和第一个元素操作对带尾指针的单循环链表是非常方便的。故选D

  1. 如果下列公式成立:3A*124=446C。则采用的是(C)进制
    A 11
    B 12
    C 14
    D 16
    解析:设为Q进制,则(3xQ+10)x(1xQ^2+2xQ+4) = 4xQ^3+4xQ^2+6xQ+12,解方程,Q=14

  2. 数据结构分为逻辑结构和存储结构,下列数据结构中不属于存储结构的是?(C)
    A 线性链表
    B 二叉链表
    C 栈与队列
    D 循环队列
    解析:栈与队列是逻辑结构

  3. 以下数据结构属于非线性数据结构的是(B)
    A 线性单链表
    B 图
    C 栈
    D 队列
    解析:图和树是非线性的。

  4. Linux内核CFS调度采用下列哪个数据结构判断最小虚拟时间以选择下一个进程(C)
    A 链表
    B AVI树
    C 红黑树
    D 循环列表
    解析:红黑树是Linux完全公平调度的基础。

  5. 下列叙述中正确的是(D)
    A 一个逻辑数据结构只能有一种存储结构
    B 数据的逻辑结构属于线性结构,存储结构属于非线性结构
    C 一个逻辑数据结构可以有多种存储结构,且各种存储结构不影响数据处理的效率
    D 一个逻辑数据结构可以有多种存储结构,且各种存储结构影响数据处理的效率
    解析:根据逻辑数据结构和存储结构的定义,特点可得。

  6. 用链表表示线性表的优点是(D)
    A 便于随机存取
    B 花费的存储空间比顺序表少
    C 数据元素的物理顺序与逻辑顺序相同
    D 便于插入与删除
    解析:链表区别于数组在于随机插入和删除,也是最大的有点之一

  7. 若允许表达式内多种括号混合嵌套,则为检查表达式中括号是否正确配对的算法,通常选用的辅助结构是(A)。
    A 栈
    B 线性表
    C 队列
    D 二叉排序树
    解析:因为栈是后进先出(LIFO, Last In First Out)特性。而匹配括号时,从左到右扫描,遇到左括号记录下来,每次遇到右括号时匹配的都是最后一个左括号,也即元素后进先出

  8. 一个栈的入栈序列是a,b,c,d,e,则栈的不可能的输出序列是(C)
    A edcba
    B decba
    C dceab
    D abcde
    解析:先进先出,C中a应该最后出栈

  9. 广度优先遍历类似于二叉树的(D)
    A 先序遍历
    B 中序遍历
    C 后序遍历
    D 层次遍历
    解析:广度优先遍历类似于二叉树的层次遍历。广度优先搜索是从根结点开始沿着树的宽度搜索遍历,也就是按层次的去遍历;从上往下对每一层依次访问,在每一层中,从左往右(也可以从右往左)访问结点,访问完一层就进入下一层,直到没有结点可以访问为止。

  1. 下列排序算法中不稳定的是(D)
    A 直接选择排序
    B 折半插入排序
    C 冒泡排序
    D 快速排序
    解析:不稳定排序指相对位置改变。快速排序的思想:找一个记录作为关键字枢纽,小于枢纽的记录移到该关键字枢纽之前,大于枢纽的移到关键字之后,然后对分割的两个子序列进行递归操作,也属于跳跃式进行,所以不稳定。

  2. 快速排序在下列哪种情况下最易发挥其长处。(C)
    A 被排序的数据中含有多个相同排序码
    B 被排序的数据已基本有序
    C 被排序的数据完全无序
    D 被排序的数据中的最大值和最小值相差悬殊
    解析:C 熵值最大最优