201711嵌入式下午真题

第 1 题

阅读下列说明和图,回答问题1至问题3,将解答填入答题纸的对应栏内。
【说明】
某舰载综合处理系统由若干数据处理模块、IO处理模块、信号处理模块、图形处理模块、大容量处理模块和电源模块组成,各处理模块通过CAN总线连接,如图1-1所示。

图1-1舰载综合处理系统结构图

为了提高综合处理系统的处理速度,主要处理模块都设计为多个处理器。其中,数据处理模块有4片PowerPC8640处理器,通过RapidIO内部网络连接,如图1-2所示。


图1-2数据处理模块的处理器与RapidIO连接示意图
串行RapidIO协议即SRIO通信协议,构建了3层的协议体系。如图1-3所示,分别是物理层、传输层、逻辑层。物理层定义了硬件接口的电器特性,并包括链路控制、初级流量控制和低级错误管理等功能;传输层负责进行寻址和路由信息管理;逻辑层定义了服务类型和包交换的格式。

图1-3 RapidlO通信协议结构模型
逻辑层定义了数据包的格式,同时支持两种操作方式,分别是直接IO/DMA方式和消息传递方式。
直接IO/DMA是一种常用的数据传输方式,发送端需要知道被访问设备的存储空间地址映射,被访问端的操作基本由硬件实现。直接IO/DMA下,发起一次传输操作,需要有效数据、目标器件ID、数据长度、数据在被访问设备存储空间的地址以及包优先级等;同时,所有构成的包的长度为32bit的整数倍;若包长度不能满足要求,则添加附加位进行弥补。
消息传递方式不要求发送节点知道目的节点的地址空间映射,当数据到达目的节点时,会根据邮箱号确定消息存储位置。在消息传递模式下进行数据传输时,除了有效载荷外还需要提供目的节点的ID、数据长度、包优先级和邮箱号等。
</div>

【问题1】(4分)
可执行程序有严格的格式,一般分为text段、data段和bss段,请解释各段存放的内容,并将答案填写在答题纸的(1)~(3)中。
陈工程师写了一段图形图像相关的程序,在程序中他定义了一个大数组,如下所示:


请问此数组位于内存哪个位置(即在那个段中)?请将答案写到答题纸(4)处。
【问题2】(5分)
RapidIO逻辑层中直接IO/DMA和消息传递这两种传输方式的主要差异如表1-1所示。请完成表中的内容,将表1-1中的(1)~(5)答案填写在答题纸的对应栏中。


【问题3】(6分,每空1.5分)
在IO处理模块等多个模块上,都采用中断方式处理输入输出。在中断处过程包括关中断、保存断点、识别中断源等一系列步骤,如图1-4所示,请完成其中的填空,将答案填写在答题纸的对应栏中。


图1-4中断处理流程图

**答案与解析** - 试题难度:较难 - 知识点:嵌入式微处理器>其它 - 试题答案:

【问题1】
(1)text段:存放程序代码。
(2)data段:存放有初值的全局变量和常量。
(3)bss段:存放未被初始化的全局变量。
(4)bss段。
【问题2】
(1)可以
(2)不需要
(3)通过邮箱号间接寻址
(4)读/写
(5)无
【问题3】
(1)识别中断源
(2)设置新的屏蔽字
(3)执行中断服务程序主体
(4)关中断

- 试题解析:

本题考查考生解决嵌入式系统综合问题的能力。
【问题1】
程序经过编译后生成的目标文件至少含有三个段,分别是text段、data段和bss段。


【问题2】
本问题考查RapidIO通讯的基本概念。
在题干中已经给除了RapidIO的相关信息,根据这些信息就能回答相关问题。直接IO/DMA是一种常用的数据传输方式,发送端需要知道被访问设备的存储空间地址映射,被访问端的操作基本由硬件实现。直接IO/DMA下,发起一次传输操作,需要有效数据、目标器件ID、数据长度、数据在被访问设备存储空间的地址以及包优先级等;同时,所有构成的包的长度为32bit的整数倍;若包长度不能满足要求,则添加附加位进行弥补。另外就是支持的数据访问方式是即可读也可写。
消息传递方式不要求发送节点知道目的节点的地址空间映射,当数据到达目的节点时,会根据邮箱号确定消息存储位置。在消息传递模式下进行数据传输时,除了有效载荷外还需要提供目的节点的ID、数据长度、包优先级和邮箱号等。
【问题3】
中断的处理过程一般按如下步骤进行:
(1)关中断:进入不可再次响应中断的状态,由硬件自动实现;
(2)保存断点:为了在中断处理结束后能正确地返回到中断点,在响应中断时,必须把当前的程序计数器PC中的内容(即断点)保存起来;
(3)识别中断源,转向中断服务程序:在多个中断源同时请求中断的情况下,本次实际响应的只能是优先权最高的那个中断源,所以,需要进一步判断中断源,并转入相应的中断服务程序入口;
(4)保存现场和屏蔽字:进入中断服务程序后,首先要保存现场,现场信息一般指的是程序状态字,中断屏蔽寄存器和CPU中某些寄存器的内容。保存旧的屏蔽字是为了中断返回前恢复屏蔽字,设置新的屏蔽字是为了实现屏蔽字改变中断优先级或控制中断的产生;
(5)开中断:因为接下去就要执行中断服务程序,开中断将允许更高级中断请求得到响应,实现中断嵌套;
(6)执行中断服务程序主体:不同中断源的中断服务程序是不同的,实际有效的中断处理工作是在此程序段中实现的;
(7)关中断:是为了在恢复现场和屏蔽字时不被中断打断;
(8)恢复现场和屏蔽字:将现场和屏蔽字恢复到进入中断前的状态;
(9)中断返回:中断返回是用一条IRET指令实现的,它完成恢复断点的功能,从而返回到原程序执行。
进入中断时执行的关中断、保存断点操作和识别中断源是由硬件实现的,它类似于一条指令,但它与一般的指令不同,不能被编写在程序中。

第 2 题

阅读以下说明,回答问题1至问题4,将解答填入答题纸的对应栏内。
【说明】
某智能农业基地需要实时监控各个蔬菜大棚的温湿度,李工开发了一款温湿度监测仪,硬件系统设计部分如图2-1所示。


图2-1温湿度监控仪硬件系统设计部分连接示意图

李工采用STM32作为主控处理器,利用TS-FTM01传感器进行温度和湿度采集,采用GSM/GPRS/GPS三合一模块来实现温湿度采集数据的上报。TF-FTM01传感器和主处理器之间采用RS485总线进行通信。在系统设计中,使用STM32处理器实现对多个TF-FTM01传感器的数据读取。GSM/GPRS/GPS三合一模块可以实现自我定位,并把采集到的温湿度数据进行上报,该模块和STM32处理器之间采用RS232进行数据通信。
TS-FTM01传感器使用RS485通信机制,每个传感器的RS485通信地址可以通过如图2-2所示的拨码开关进行配置。拨码开关一共有6位,实现对TS-FTM01传感器地址的编码。
STM32处理器具有通用同步异步收发器(USART),USART利用分数波特率发生器提供宽范围的波特率选择。STM32处理器的波特比率寄存器USART BRR的定义如图2-3和表2-1所示。


注:拨码开关在ON为1,在OFF为0
图2-2 TS-FTM01传感器地址设置示意图

图2-3 USART_BRR定义示意图


【问题1】(4分)
RS232和RS485都属于串行通信总线,以下关于串行通信、RS232、RS485的叙述中,正确的是(1)、(2)、(3) 、(4)。请将答案填写在答题纸的对应栏中。
A.RS232支持全双工通信,只允许一对一通信
B.RS232采用差分传输方式进行数据信号的传输
C.RS232传输距离远,传输距离最远可达上千米
D.RS485 一般采用两线制进行半双工通信,允许一对多通信
E.RS485采用差分传输方式,抗干扰能力强,传输距离远
F.在进行嵌入式开发时,常采用RS485作为调试串口使用
G.RS232典型的连接器包括DB9和DB25,仅使用三线也可进行基本通信
【问题2】(4分)
STM32处理器具有通用同步异步收发器(USART),USART利用分数波特率发生器提供宽范围的波特率选择。波特率的计算公式为:


其中, 为给外设的时钟,USARTDIV是一个无符号数,其值设置在USART_BRR寄存器中。假设给外设提供的时钟频率 ,GSM/GPRS/GPS三合一模块所需的波特率为115200,则USARTDIV的值应为(1),USART_BRR寄存器的十六进制值应为(2)。请完成其中的填空,将答案填写在答题纸的对应栏中。

【问题3】(2分)
RS485总线使用特制的RS485芯片,最大支持节点数可达128个以上。该系统的RS485总线上最多可以支持(1)个TS-FTM01传感器?请完成其中的填空,将答案填写在答题纸的对应栏中。
【问题4】(5分)
基于图2-1所示的硬件设计,需要实现某地点的温湿度数据的定时上报功能。该功能要求以T为周期读取RS485总线上16个TS-FTM01传感器(地址编码为0〜15)的温湿度数据,通过GPS获取当前的位置信息,然后通过GSM网络把温湿度数据和定位信息发送到固定的手机号码上。需要特别指出的是,在图2-1所示的硬件设计中未使用专用的RS485芯片,STM32端的RS485总线是通过GPIO45和GPIO46两根GPIO口线模拟出的,即通过两根GPIO口线的高低电平变化来模拟RS485数据传输协议。
基于上述硬件和软件设计,请从以下选项中选择正确的操作,把图2-4所示的软件流程补充完整,将流程图2-4中的(1)~(3)的答案填写在答题纸的对应栏中。
A.设置GPIO45为输入模式,设置GPIO46为输出模式
B.设置GPIO45和GPIO46为输入模式
C.设置GPIO45为输出模式,设置GPIO46为输入模式
D.设置GPIO45和GPIO46为输出模式
E.addr>16
F.addr>=16
本方案利用低速串行总线遍历读取16个传感器的温湿度数据及GPS的定位信息,并通过GSM实现数据上报。该执行过程需要消耗一定的时间,导致现有的算法流程并不能精确实现以T为周期进行温湿度数据的采集和上报。为了修正该问题,需要把图2-4所示流程中的步骤(4)调整到步骤(5)后执行。请完成其中的填空,将答案填写在答题纸的对应栏中。


图2-4软件流程图

答案与解析

  • 试题难度:一般
  • 知识点:嵌入式硬件设计>其它
  • 试题答案:

    【问题1】
    (1)~(4):A、D、E、G
    【问题2】
    (1)39.0625
    (2)0x271
    【问题3】
    (1)64
    【问题4】
    (1)D
    (2)B
    (3)F
    (4)(m)
    (5)(c)

  • 试题解析:

    RS-232C是美国电子工业协会(EIA)制定的一种串行通信接口标准。
    (1)计算机利用RS-232C接口进行串口通信,有简单连接和完全连接两种连接方式。
    (2)简单连接又称三线连接,即只连接发送数据线、接收数据线和信号地。
    (3)如果应用中还需要使用RS-232C的控制信号,则采用完全连接方式。
    (4)RS232只支持点对点的连接,不能挂接多个器件,支持全双工通信,但只允许一对一通信。
    (5)在进行嵌入式开发时,常采用RS232作为调试串口使用。
    (6)在波特率不高于9600bit/s的情况下进行串口通信时,RS232通信线路的长度通常要小于15米,否则可能出现数据丢失现象。
    RS422是在RS232C基础上发展起来的串行数据接口标准,都是由EIA 制定并发布的,RS422和RS485标准只有电气特性的规定,而不涉及接插件、电缆。
    1.RS-422标准是RS-232的改进型,是一种单机发送、多机接收的单向、平衡传输规范,传输速率可达10Mb/s。采用差分传输方式,也称作平衡传输。允许在相同传输线上连接多个接收节点,最多可接10个节点,即一个主设备(Master),其余10个为从设备(Salve),从设备之间不能通信。支持一点对多点的双向通信。
    2.在RS-422的基础上,为扩展应用范围,EIA制定了RS-485标准,增加了多点、双向通信能力。RS-485可以采用二线与四线方式,二线制可实现真正的多点双向通信。采用四线连接时,与RS-422一样只能实现点对多的通信,即只能有一个主设备,其余为从设备。RS-485可以连接多达32个设备。

第 3 题

【说明】
某飞行器供油阀控制软件通过控制左右两边的油箱BL、BR向左右发动机EL、ER供油,既要保证飞行器的正常飞行,又要保证飞行器的平衡,该软件主要完成的功能如下:
(1)无故障情况下,控制左油箱BL向左发动机EL供油,右油箱BR向右发动机ER供油,不上报故障;
(2)当左油箱BL故障时,控制右油箱BR分别向左、右发动机ErJDER供油,并上报二级故障——左油箱故障;
(3)当右油箱BR故障时,控制左油箱BL分别向左、右发动机EL和ER供油,并上报二级故障右油箱故障;
(4)当左发动机EL故障时,根据左右油箱的剩油量决定(如果左右油箱剩油量之差大于等于50升,则使用剩油量多的油箱供油,否则同侧优先供油)左油箱BL还是右油箱BR向右发动机ER供油,并上报一级故障——左发动机故障;
(5)当右发动机ER故障时,根据左右油箱的剩油量决定(如果左右油箱剩油量之差大于等于50升,则使用剩油量多的油箱供油,否则同侧优先供油)左油箱BL还是右油箱BR向左发动机EL供油,并上报一级故障——右发动机故障;
(6)当一个油箱和一个发动机同时故障时,则无故障的油箱为无故障发动机供油,并上报一级故障——故障油箱和发动机所处位置;
(7)当两个油箱或两个发动机同时故障或存在更多故障时,则应进行双发断油控制,并上报特级故障——两侧油箱或两侧发动机故障;
(8)故障级别从低到高依次为二级故障、一级故障和特级故障,如果低级故障和高级故障同时发生,则只上报最高级别故障。

【问题1】(3分)
在嵌入式软件测试中,一般采用的测试方法有白盒测试、黑盒测试和灰盒测试方法,白盒测试方法中需要基于(1)进行测试;根据本题给定的条件,最恰当的测试方法应选择(2)。
【问题2】(3分)
覆盖率是度量测试完整性的一个手段,也是度量测试有效性的一个手段。在嵌入式软件白盒测试过程中,通常以语句覆盖率、分支覆盖率和MC/DC覆盖率作为度量指标。
在实现第6条功能时,设计人员对部分功能采用了下列算法:

请指出对上述算法达到100%语句覆盖、100%分支(DC)覆盖和100%MC/DC覆盖所需的最少测试用例数目。请完成表3-1中的(1)~(3)填空,并将答案填写在答题纸的对应栏中。


【问题3】(9分)
为了测试此软件功能,测试人员设计了表3-2所示的测试用例,请填写该表中的空(1)~(9),并将答案填写在答题纸的对应栏中。


答案与解析

  • 试题难度:一般
  • 知识点:嵌入式系统实施知识>软件测试
  • 试题答案:

    【问题1】
    (1)软件源代码
    (2)黑盒
    【问题2】
    (1)1
    (2)2
    (3)3
    【问题3】

  • 试题解析:

    本题考查软件测试的一些基本概念和方法在测试实践中的应用。
    【问题1】
    在嵌入式软件测试过程中,一般采用的测试方法有白盒测试、黑盒测试和灰盒测试方法。
    在嵌入式软件测试中,一般采用的测试方法有白盒测试、黑盒测试和灰盒测试方法,白盒测试方法中需要基于软件源代码进行测试;
    此题考查白盒测试方法和黑盒测试方法的概念及应用。
    白盒测试又称结构测试、透明盒测试、逻辑驱动测试、基于代码的测试。盒子指被测试的软件,白盒指盒子是可视的。白盒测试是一种测试用例设计方法,测试人员依据程序内部逻辑结构相关信息,设计或选择测试用例。白盒测试主要针对被测程序的源代码,主要用于软件验证,不考虑软件的功能实现,只验证内部动作是否按照设计说明书的规定进行。
    黑盒测试也称功能测试,它是通过测试来检测每个功能是否都能正常使用。在测试中,把程序看作一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下,在程序接口进行测试,它只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数据而产生正确的输出信息。
    灰盒测试是介于白盒测试与黑盒测试之间的一种测试方法,既关注输出对于输入的正确性,同时也关注代码的内部结构,但这种关注不像白盒那样详细、完整,只是通过一些表征性的现象、事件、标志来判断内部的运行状态,有时候输出是正确的,但内部其实已经错误了,这种情况非常多,如果每次都通过白盒测试来操作,效率会很低,因此需要采取这样的一种灰盒测试方法。
    根据本问题的条件,给定的说明为功能说明,故应该采用黑盒测试方法。
    【问题2】
    1.语句覆盖
    设计足够多的测试用例,使得被测试程序中的每条可执行语句至少被执行一次。
    2.分支覆盖
    设计足够多的测试用例,使得被测试程序中的每个判断的“真”、“假”分支至少被执行一次。
    3. 修正判定条件覆盖(MC/DC)
    要求在一个程序中每一种输入输出至少得出现一次,在程序中的每一个条件必须产生所有可能的输出结果至少一次,并且每一个判定中的每一个条件必须能够独立影响一个判定的输出,即在其他条件不变的前提下仅改变这个条件的值,而使判定结果改变。对问题2中的一个判断进行分析,此判断有两个条件,两个条件共有四种组合,即TT(TRUE和TRUE)、TF(TRUE和FALSE)、FT(FALSE和TRUE)和FF(FALSE和FALSE)。但是由于此判断为逻辑与条件,当前一个条件为FALSE时,其整个判断值为FALSE,后一个条件的真或假均不能独立影响整个判断的输出,所以只需要TT、TF和FX(X表示后一个条件为TRUE或FALSE都可以)三种情况就可以,故此判断最少需要3个测试用例即可满足MC/DC覆盖要求。
    【问题3】
    该题考查测试用例的设计能力,包括了输入数据、前置条件、输出的设计。需要根据题目说明中的一些信息进行判断和设计。

第 4 题

【说明】
某直升机的显示控制计算机是其座舱显控系统的核心部件,将来自飞行员的参数和控制命令与载机的飞行参数信息进行融合处理后,在显示器上显示。该显示控制计算机由一个显示控制单元和一个输入输出单元组成,它们之间通过双口RAM进行数据交换,如图4-1所示。


图4-1 显示控制计算机原理框图

显示控制单元采用Freescale公司的PowerPC8270高性能、低功耗32位处理器,并设计有系统FLASH存储器、用户FLASH存储器、SDRAM存储器。CPU内部集成存储器控制器,提供地址译码、数据处理周期访问时序、SDRAM时钟等功能。
输入输出单元采用Ti公司的DSP F2812高性能、低功耗16位处理器,采用ARINC429总线用于接收导航计算机、大气数据计算机等外部设备的数据。ARINC429解算程序严格遵循ARINC429规范,其通用字格式如表4-1所示,字长32Bit,不用的数据位填“0”。当接收到ARINC429数据后,首先判断状态位,只有在状态和标号正确的情况下,才进一步根据分辨率等进行解算数据的含义。

表4-1 ARINC429通用字格式


【问题1】(6分)
系统FLASH存储器的存储容量是8MB,用于存储CPU模块引导程序、BIT测试程序,FLASH在板编程程序,网口操作系统,用户程序。系统FLASH地址分配在存储空间的高端,地址空间为(1)~0xFFFFFFFF。
用户FLASH存储器的存储容量是为(2),用于记录数据的存储。FLASH地址分配在存储空间的高端,地址空间为0x78000000~0x7BFFFFFF。
SDRAM的存储容量是256MB,用于运行操作系统和应用软件,地址空间位于存储器的低端0x00000000~(3)。
请完成(1)~(3)填空,并将答案填写在答题纸的对应栏中。
【问题2】(4分)
根据ARINC429数据的标号(D8-D1)可知该数据为高度表数据。根据系统定义,高度表数据的分辨率为0.1米,即D9为1表示0.1米,D10为1表示0.2米,D11为1表示0.4米,依此类推。
若接收数据帧中D28-D9位是0000.0000.0111.1101.0000,则当前的高度是(1)米。
若当前的高度是100米,则数据帧中D28-D9位应为(2)。
请完成(1)和(2)填空,并将答案填写在答题纸的对应栏中。
【问题3】(5分)
显示控制单元和输入输出单元通过双口交换信息,两个处理器上的软件采用相同定义的结构体来定义双口单元,方便交换信息。以下是双口结构体定义:


为了避免由于不同的编译环境对上述数据结构产生不同的编译结果,建议对上述数据结构通过设置紧缩属性(packed属性),强迫编译器采用字节对齐方式,在该模式下,SPM_CHAN_RX429结构体占用(1)字节的存储空间。
ARINC429接收通道设计为由一个首尾相连的FIFO数组形成的环形队列。输入输出单元根据头指针向环形队列写入数据,头指针始终指向下一个要写入的位置,并且限制写入数据最多为31个,即队尾与队首之间至少保留一个元素的空间。
显示控制单元根据尾指针从环形队列读取数据,尾指针始终指向下一个要读取的位置。初始化环形队列的C语言为:


判断队列为空的C语言为(2)。
判断队列为满的C语言为(3)。
请完成(1)~(3)填空,并将答案填写在答题纸的对应栏中。

答案与解析

  • 试题难度:一般
  • 知识点:嵌入式软件程序设计>其它
  • 试题答案:

    【问题1】
    (1)0xFF800000 或者 FF800000H
    (2)64MB
    (3)0x0FFFFFFF或者0FFFFFFFH
    【问题2】
    (1)200
    (2)0000.0000.0011.1110.1000
    【问题3】
    (1)67
    (2)pBuf-〉head=pBuf->tail
    (3)pBuf->tail=(pBuf->head +1)%32

  • 试题解析:

    【问题1】
    由于系统FLASH存储器的存储容量是8MB,所以需要23位二进制才能寻址到8MB的空间。也就是:1111 1111 1000 0000 0000 0000 0000 0000B ~1111 1111 1111 1111 1111 1111 1111 1111B,,转化为16进制就是0xFF800000_~0xFFFFFFFF。

    【问题2】
    将二进制0000.0000.0111.1101.0000,转化为十进制为2000。而高度表数据的分辨率为0.1米,也就是说D9为1表示0.1米,所以当前的高度是2000*0.1=200米。
    若当前的高度是100米,则十进制的值为:100/0.1=1000,转化为二进制为:0000.0000.0011.1110.1000。
    【问题3】
    SPM_CHAN_RX429结构体占用的存储空间为1+1+1+32*2=67。
    环形队列中判断为空的条件是:pBuf-〉head=pBuf->tail;环形队列中判断为满的条件是:pBuf->tail=(pBuf->head +1)%maxsize,maxsize为环形队列的大小,这里是32。

第 5 题

【说明】
企业根据利润提成发放奖金。利润低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成15%;利润在20万到40万之间时,高于20万元的部分,可提成20%;40万到60万之间时高于40万元的部分,可提成25%;60万到100万之间时,高于60万元的部分,可提成30%;高于100万元时,高于100万元的部分可提成35%。已知企业本年度12个月的月利润存储在数组profit中,程序要求根据月利润计算月奖金并存储到数组bonus中,然后计算并返回该企业的年度总利润total_profit。该程序的实现如下:

int calculate_bonus(const int profit[], int bonus[])
{
int n=12;
int i=0;
int sum_profit=0;
int bonus1,bonus2,bonus4,bonus6,bonus10;
bonus1=100000*0.1;
bonus2=bonusl+100000*0.15;
bonus4=bonus2+200000*0.2;
bonus6=bonus4+200000*0.25;
bonus10=bonus6+400000*0.3;
for(i=0;i<n;i++)
{
if(profit[i]<=100000)
(1);
else if(profit[i]<=200000)
(2);
else if(profit[i]<=400000)
(3);
else if(profit[i]<=600000)
(4);
else if(profit[i]<=1000000)
(5);
else
(6);
}
/*以下代码计算年度总利润*/
i=0;
while(i<n)
sum_profit +=profit[++i];
return sum_profit;
}

【问题1】(3分)
在程序中,使用关键字const修饰输入参数profit,请将这样修饰的作用写到答题纸(1)处。
如果程序中bonus数组也使用const修饰,是否正确,并给出解释,请将答案写到答题纸(2)处。
【问题2】(3分)
分析程序中的计算年度总利润的代码,指出错误的一行代码,将错误代码写到答题纸(1)处;然后用一条语句实现正确代码,将正确代码写到答题纸(2)处。
【问题3】(9分)
根据题意分析程序,完成程序中的(1)~(6),每个空行只能写一行代码,即用一条语句来描述,将答案写到答题纸相应的位置。

答案与解析

  • 试题难度:一般
  • 知识点:嵌入式软件程序设计>嵌入式程序设计>面向过程的语言
  • 试题答案:

    【问题1】
    (1)限定变量,不允许被修改。
    (2)不正确。因为该数组需要被修改。
    【问题2】
    (1)sum_profit+= profit[++i];
    (2)sum_profit+= profit[i++];
    【问题3】
    (1)bonus[i]=profit[i]*0.1
    (2)bonus[i]=bonus1+(profit[i]-l00000)*0.15
    (3)bonus[i]=bonus2+(profit[i]-200000)*0.20
    (4)bonus[i]=bonus4+(profit[i]-400000)*0.25
    (5)bonus[i]=bonus6+(profit[i]-600000)*0.30
    (6)bonus[i]=bonusl0+(profit[i]-l000000)*0.35 

  • 试题解析:

    本题考查C语言程序设计能力。
    1.const类型定义:指明变量或对象的值是不能被更新,,引入目的是为了取代预编译指令。
    2.可以保护被修饰的东西,防止意外的修改,增强程序的健壮性。
    3.编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率也很高。
    4.可以节省空间,避免不必要的内存分配。
    在本题中bonus数组也使用const修饰,显然是错误的,因为在函数体内bonus数组的值是被改变的,编译器会报错的。

results matching ""

    No results matching ""