精华内容
下载资源
问答
  • 定义 相关题解 1 算法 就是解决问题的方法和步骤算法是程序设计的灵魂 算法 +数据结构程序 单选题 1下列关于算法说法不正确的是 ( A ) A 算法独立于任何具体的语言 BASIC 算法只能用 BASIC 语言来实现 B 解决问题的...
  • 定义 相关题解 1 算法 就是解决问题的方法和步骤算法是程序设计的灵魂 算法 +数据结构程序 单选题 1下列关于算法说法不正确的是A算法独立于任何具体的语言 ( A ) BASIC算法只能用 BASIC语言来实现 B解决问题的过程...
  • 定义 相关题解 1 算法 就是解决问题的方法和步骤算法是程序设计的灵魂 算法 +数据结构程序 单选题 1下列关于算法说法不正确的是 ( A ) A 算法独立于任何具体的语言 BASIC 算法只能用 BASIC 语言来实现 B 解决问题的...
  • 定义 相关题解 1 算法 就是解决问题的方法和步骤算法是程序设计的灵魂 算法 +数据结构程序 单选题 1下列关于算法说法不正确的是 ( A ) A 算法独立于任何具体的语言 BASIC 算法只能用 BASIC 语言来实现 B 解决问题的...
  • 定义 相关题解 算法 就是解决问题的方法和步骤算法是程序设计的灵魂 算法 +数据结构程序 单选题 1下列关于算法说法不正确的是 ( A ) A 算法独立于任何具体的语言 BASIC 算法只能用 BASIC 语言来实现 B 解决问题的...
  • 定义 相关题解 1算法就是解决问题的方法和步骤算法是程序设计的灵魂算法+数据结构程序 单选题 1下列关于算法说法不正确的是( A ) A算法独立于任何具体的语言BASIC算法只能用BASIC语言来实现 B解决问题的过程就是实现...
  • 算法与程序设计分章节选择题 姓名_ 班级_ 一算法及算法的特征 1在算法执行流程中对于循环模式下列说法正确的是 A对某个情况进行判断当结果为真时执行步骤一否则执行步骤二 B对某个情况进行判断当结果为真时执行步骤...
  • 20.设 i,j 为类 x 中定义的 double 型变量名,下列 x 类的构造函数中不正确的是( )。 A) double x(double k ){ i=k; return i; } B) x(double m, double n ){ i=m; j=n; } C) x( ){i=0;j=0 } D) x(double k ){ i=k;...
  • 包括设计目标相关问题探讨、算法分析、各功能子模块设计、用户实现接口定义等软件工程开发中主要步骤,着重解答内核实现中所要遇到各种技术难题,对于相关各方面的程序设计人员相信具有深远启迪意义。...
  • - - PAGE # - 分层训练进阶冲关 A组 基础练( 建议用时 20分钟) 下列关于算法的说法中正确的个数有 ( B ) 求解某... 1 B.2 C.3 D.4 下列所给问题中 , 不能设计一个算法求解的是 ( D ) 用二分法求方程 x2-3=0 的近似解
  • 学 海 无 涯 本资料来源于七彩教育网 15算法初步 151 算法的含义与流程图 知识网络 1 算法的含义能用...典型例题 [例1] 1下列关于算法的说法正确的是 A 某算法可以无止境地运算下去 B 一个问题的算法步骤可以是可逆的 C
  • 下面的结论正确的是 A一个程序的算法步骤是可逆的 B一个算法可以无止境地运算下 去的 C完成一件事情的算法有且只有一种 D设计算法要本着简单方便的原 则 2早上从起床到出门需要洗脸刷牙(5 min)刷水壶(2 min)烧水(8 ...
  • 个人收集整理资料 仅供交流学习 勿作商业用途 15算法初步 151 算法的含义与流程图 知识...b5E2RGbCAP 典型例题 [ 例 1]下列关于算法的说法正确的是 某算法可以无止境地运算下去 B 一 个 问 题 的 算法步骤可以是可逆的
  • C语言 1套 选择题.pdf

    2020-07-11 11:58:23
    1下列叙述中正确的是 A所谓算法就是计算方法 B程序可以作为算法的一种描述方法 C算法设计只需考虑得到计算结果 D算法设计可以忽略算法的运算时间 答案B 解析算法是指对解题方案的准确而完整的描述算法不等于数学上的...
  • 标准文案 2018 第一套 ( 算法部分 ) 23下列选项中关于算法的描述正确的是 A算法只能用自然语言描述 B算法必须在有限步骤内实现 算法就是一种高级程序设计语言 D算法可以有 0 个或多个输入但只能有一个输出 24下列...
  • 1.下列叙述中正确的是 A)所谓算法就是计算方法 B)程序可以作为算法的一种描述方法 C)算法设计只需考虑得到计算结果 D)算法设计可以忽略算法的运算时间 B【解析】算法是指对解题方案的准确而完整的描述,算法不...

    1.下列叙述中正确的是

    A)所谓算法就是计算方法

    B)程序可以作为算法的一种描述方法

    C)算法设计只需考虑得到计算结果

    D)算法设计可以忽略算法的运算时间

    B【解析】算法是指对解题方案的准确而完整的描述,算法不等于数学上的计算方法,也不等于程序。算法设计需要考虑可行性、确定性、有穷性与足够的情报,不能只考虑计算结果。算法设计有穷性是指操作步骤有限且能在有限时间内完成,如果一个算法执行耗费的时间太长,即使最终得出了正确结果,也是没有意义的,。算法在实现时需要用具体的程序设计语言描述,所以程序可以作为算法的一种描述方法。

    2.下列关于算法的描述中错误的是

    A)算法强调动态的执行过程,不同于静态的计算公式

    B)算法必须能在有限个步骤之后终止

    C)算法设计必须考虑算法的复杂度

    D)算法的优劣取决于运行算法程序的环境

    D【解析】算法设计不仅要考虑计算结果的正确性,还要考虑算法的时间复杂度和空间复杂度。

    3.下列叙述中正确的是

    A)算法的复杂度包括时间复杂度与空间复杂度

    B)算法的复杂度是指算法控制结构的复杂程度

    C)算法的复杂度是指算法程序中指令的数量

    D)算法的复杂度是指算法所处理的数据量

    A【解析】算法复杂度是指算法在编写成可执行程序后,运行时所需要的资源,资源包括时间资源和内存资源。算法的复杂度包括时间复杂度与空间复杂度。算法的时间复杂度是指执行算法所需要的计算工作量;算法的空间复杂度是指算法在执行过程中所需要的内存空间。

    4.下列叙述中正确的是

    A)算法的时间复杂度与计算机的运行速度有关

    B)算法的时间复杂度与运行算法时特定的输入有关

    C)算法的时间复杂度与算法程序中的语句条数成正比

    D)算法的时间复杂度与算法程序编制者的水平有关

    B【解析】为了能够比较客观地反映出一个算法的效率,在度量一个算法的工作量时,不仅应该与所使用的计算机、程序设计语言以及程序编制者无关,而且还应该与算法实现过程中的许多细节无关。为此,可以用算法在执行过程中所需基本运算的执行次数来度量算法的工作量。算法所执行的基本运算次数还与问题的规模有关;对应一个固定的规模,算法所执行的基本运算次数还可能与特定的输入有关。

    5.下列叙述中正确的是

    A)解决同一个问题的不同算法的时间复杂度一般是不同的

    B)解决同一个问题的不同算法的时间复杂度必定是相同的

    C)对同一批数据作同一种处理,如果数据存储结构不同,不同算法的时间复杂度肯定相同

    D)对同一批数据作不同的处理,如果数据存储结构相同,不同算法的时间复杂度肯定相同

    A【解析】解决同一个问题的不同算法的时间复杂度,可能相同也可能不相同。算法的时间复杂度与数据存储结构无关,对同一批数据作同一种处理或者不同处理,数据存储结构相同或者不同,算法的时间复杂度都可能相同或者不同。

    6.下列叙述中正确的是

    A)算法的空间复杂度是指算法程序中指令的条数

    B)压缩数据存储空间不会降低算法的空间复杂度

    C)算法的空间复杂度与算法所处理的数据存储空间有关

    D)算法的空间复杂度是指算法程序控制结构的复杂程度

    C【解析】算法的空间复杂度是指算法在执行过程中所需要的内存空间。算法执行期间所需的存储空间包括3个部分:输入数据所占的存储空间;程序本身所占的存储空间;算法执行过程中所需要的额外空间。

    7.为了降低算法的空间复杂度,要求算法尽量采用原地工作(in place)。所谓原地工作是指

    A)执行算法时不使用额外空间

    B)执行算法时不使用任何存储空间

    C)执行算法时所使用的额外空间随算法所处理的数据空间大小的变化而变化

    D)执行算法时所使用的额外空间固定(即不随算法所处理的数据空间大小的变化而变化)

    D【解析】对于算法的空间复杂度,如果额外空间量相对于问题规模(即输入数据所占的存储空间)来说是常数,即额外空间量不随问题规模的变化而变化,则称该算法是原地工作的。

    8.下列叙述中正确的是

    A)算法的复杂度与问题的规模无关

    B)算法的优化主要通过程序的编制技巧来实现

    C)对数据进行压缩存储会降低算法的空间复杂度

    D)数值型算法只需考虑计算结果的可靠性

    C【解析】在许多实际问题中,为了减少算法所占的存储空间,通产采用压缩存储技术,以便尽量减少不必要的额外空间。

    9.下列叙述中正确的是

    A)数据的存储结构会影响算法的效率

    B)算法设计只需考虑结果的可靠性

    C)算法复杂度是指算法控制结构的复杂程度

    D)算法复杂度是用算法中指令的条数来度量的

    A【解析】采用不同的存储结构,其数据处理的效率是不同的。因此,在进行数据处理时,选择合适的存储结构很重要。

    10.下列叙述中错误的是

    A)数据结构中的数据元素可以是另一数据结构

    B)数据结构中的数据元素不能是另一数据结构

    C)空数据结构可以是线性结构也可以是非线性结构

    D)非空数据结构可以没有根结点

    B【解析】数据元素是一个含义很广泛的概念,它是数据的“基本单位”,在计算机中通常作为一个整体进行考虑和处理。数据元素可以是一个数据也可以是被抽象出的具有一定结构数据集合,所以数据结构中的数据元素可以是另一数据结构。满足有且只有一个根结点并且每一个结点最多有一个前件,也最多有一个后件的非空的数据结构认为是线性结构,不满足条件的结构为非线性结构。空数据结构可以是线性结构也可以是非线性结构。非空数据结构可以没有根结点,如非性线结构“图”就没有根结点。

    11.下列叙述中正确的是

    A)非线性结构可以为空

    B)只有一个根结点和一个叶子结点的必定是线性结构

    C)只有一个根结点的必定是线性结构或二叉树

    D)没有根结点的一定是非线性结构

    A【解析】如果一个非空的数据结构满足下列两个条件:①有且只有一个根结点;②每一个结点最多有一个前件,也最多有一个后件。则称该数据结构为线性结构。如果一个数据结构不是线性结构,则称之为非线性结构。线性结构和非线性结构都可以是空的数据结构。树只有一个根结点,但不论有几个叶子结点,树都是非线性结构。

    12.下列叙述中错误的是

    A)向量是线性结构

    B)非空线性结构中只有一个结点没有前件

    C)非空线性结构中只有一个结点没有后件

    D)具有两个以上指针域的链式结构一定属于非线性结构

    D【解析】双向链表每个结点有两个指针,一个为左指针,用于指向其前件结点;一个为右指针,用于指向其后件结点,再加上头指针,具有两个以上的指针,但双向链表属于线性结构。非空线性结构中第一个结点没有前件,最后一个结点无后件,其余结点最多有一个前件,也最多有一个后件。向量也满足这个条件,属于线性结构。

    13.设数据结构B=(D, R),其中

    D={ a, b, c, d, e, f }
    R={ (f, a), (d, b), (e, d), (c, e), (a, c) }
    该数据结构为

    A)线性结构

    B)循环队列

    C)循环链表

    D)非线性结构

    A【解析】数据的逻辑结构有两个要素:一是数据元素的集合,通常记为D;二是D上的关系,它反映了D中各数据元素之间的前后件关系,通常记为R。即一个数据结构可以表示成B=D,R)。其中B表示数据结构。为了反映D中各数据元素之间的前后件关系,一般用二元组来表示。例如,假设abD中的两个数据,则二元组(a,b)表示ab的前件,ba的后件。本题中R中的根结点为f,元素顺序为facedb,满足线性结构的条件。

    14.设数据集合为D={ 1, 2, 3, 4, 5 }。下列数据结构 B=(D, R)中为非线性结构的是

    A)R={ (2,5), (5,4), (3,1), (4,3) }

    B)R={ (1,2), (2,3), (3,4), (4,5) }

    C)R={ (1,2), (2,3), (4,3), (3,5) }

    D)R={ (5,4), (4,3), (3,2), (2,1) }

    C【解析】A项中,R={(2,5),(5,4),(3,1),(4,3)}2为根结点,元素顺序为25431,属于线性结构;同理B1为根结点,元素顺序为12345D5为跟结点,元素顺序为54321,均为线性结构。C项中,元素3有两个前件,属于非线性结构。

    15.下列叙述中正确的是

    A)矩阵是非线性结构

    B)数组是长度固定的线性表

    C)对线性表只能作插入与删除运算

    D)线性表中各元素的数据类型可以不同

    B【解析】矩阵也是线性表,只不过是比较复杂的线性表。线性表中各元素的数据类型必须相同。在线性表中,不仅可以做插入与删除运算,还可以进行查找或对线性表进行排序等操作。

    16.在线性表的顺序存储结构中,其存储空间连续,各个元素所占的字节数

    A不同,但元素的存储顺序与逻辑顺序一致

    B)不同,且其元素的存储顺序可以与逻辑顺序不一致

    C)相同,元素的存储顺序与逻辑顺序一致

    D)相同,但其元素的存储顺序可以与逻辑顺序不一致

    C【解析】在线性表的顺序存储结构中,其存储空间连续,各个元素所占的字节数相同,在存储空间中是按逻辑顺序依次存放的。

    17.下列叙述中正确的是

    A)能采用顺序存储的必定是线性结构

    B)所有的线性结构都可以采用顺序存储结构

    C)具有两个以上指针的链表必定是非线性结构

    D)循环队列是队列的链式存储结构

    B【解析】所有的线性结构都可以用数组保存,即都可以采用顺序存储结构。而反过来不可以,完全二叉树也能用数组保存(按层次依次存放到数据元素中),但完全二叉树不属于非线性结构。双向链表具有两个以上的指针,但属于线性结构。循环队列是队列的顺序存储结构。

    18.下列叙述中正确的是

    A)在栈中,栈顶指针的动态变化决定栈中元素的个数

    B)在循环队列中,队尾指针的动态变化决定队列的长度

    C)在循环链表中,头指针和链尾指针的动态变化决定链表的长度

    D)在线性链表中,头指针和链尾指针的动态变化决定链表的长度

    A【解析】在栈中,通常用指针top来指示栈顶的位置,用指针bottom指向栈底。栈顶指针top动态反应了栈中元素的变化情况。在循环队列中,队头指针和队尾指针的动态变化决定队列的长度。链式存储结构中,各数据结点的存储序号是不连续的,并且各结点在存储空间中的位置关系与逻辑关系也不一致,故头指针和尾指针或栈顶指针无法决定链表长度。

    19.设栈的顺序存储空间为S(1:m),初始状态为top=0。现经过一系列正常的入栈与退栈操作后,top=m+1,则栈中的元素个数为

    A) 0

    B)m

    C)不可能

    D)m+1

    C【解析】栈为空时,栈顶指针top=0,经过入栈和退栈运算,指针始终指向栈顶元素。初始状态为top=0,当栈满时top=m,无法继续入栈,top值不可能为m+1

    20.设栈的存储空间为S(1:50),初始状态为top=-1。现经过一系列正常的入栈与退栈操作后,top=30,则栈中的元素个数为

    A)20

    B)19

    C)31

    D)30

    D【解析】栈的初始状态为top=-1表示栈为空(没有规定栈中栈底必须是0),经过一系列正常的入栈与退栈操作后top=30,则空间(1:30)中插入了元素,共30个。

    21.设栈的顺序存储空间为S(1:m),初始状态为top=m+1,则栈中的数据元素个数为

    A)top-m+1

    B)m-top+1

    C)m-top

    D)top-m

    B【解析】栈的初始状态top=m+1,说明栈空时top=m+1m在栈底,1是开口向上的),入栈时栈顶指针是减操作(top=top-1),退栈时栈顶指针是加操作(top=top+1)。本题可以假设栈中有x个元素,当x=0时,也就是栈中没有元素,则top=m+1;x=m时,也就是栈满,则top=1,由此可以得出top=m+1-x继而得出m-top+1

    22.设栈的顺序存储空间为S(1:m),初始状态为top=m+1。现经过一系列正常的入栈与退栈操作后,top=0,则栈中的元素个数为

    A)1

    B)m

    C)m+1

    D)不可能

    D【解析】栈的初始状态为top=m+1,说明栈空时top=m+1,入栈时栈顶指针是减操作(top=top-1),退栈时栈顶指针是加操作(top=top+1)。栈满时top=1,说明栈中不能再进行入栈操作,top=0的情况不会出现。

    23.设栈的存储空间为S(1:m),初始状态为top=m+1。经过一系列入栈与退栈操作后,top=1。现又要将一个元素进栈,栈顶指针top值变为

    A)0

    B)发生栈满的错误

    C)m

    D)2

    B【解析】栈的初始状态为top=m+1,说明栈空时top=m+1,入栈时栈顶指针是减操作(top=top-1),退栈时栈顶指针是加操作(top=top+1)。栈满时top=1,说明栈中不能再进行入栈操作(“上溢”错误)。

    24.设栈的存储空间为S(1:m),初始状态为top=m+1。经过一系列入栈与退栈操作后,top=m。现又在栈中退出一个元素后,栈顶指针top值为

    A)0

    B)m-1

    C)m+1

    D)产生栈空错误

    C【解析】栈的顺序存储空间为S(1: m),初始状态top=m+1,所以这个栈是m在栈底,1是开口向上的。经过一系列入栈与退栈操作后top=m,则栈中1个元素,若现在又退出一个元素,那么栈顶指针下移一位,回到m+1的位置。

    25.设栈的存储空间为S(1:50),初始状态为top=51。现经过一系列正常的入栈与退栈操作后,top=20,则栈中的元素个数为

    A)31

    B)30

    C)21

    D)20

    A【解析】栈的初始状态top=51,故本栈是51在栈底,入栈时栈顶指针是减操作(top=top-1),退栈时栈顶指针是加操作(top=top+1)。当top=20时,元素存储在(20:50)空间中,因此共有50-20+1=31个元素。

    26.下列处理中与队列有关的是

    A)二叉树的遍历

    B)操作系统中的作业调度

    C)执行程序中的过程调用

    D)执行程序中的循环控制

    B【解析】队列是指允许在一端进行插入,而在另一端进行删除的线性表。由于最先进入队列的元素将最先出队,所以队列具有“先进先出”的特性,体现了“先来先服务”的原则。操作系统中的作业调度是指根据一定信息,按照一定的算法,从外存的后备队列中选取某些作业调入内存分配资源并将新创建的进程插入就绪队列的过程。执行程序中的过程调用一般指函数调用,需要调用时候转入被调用函数地址执行程序,与队列无关。执行程序中的循环控制是指算法的基本控制结构,包括对循环条件的判定与执行循环体,与队列无关。二叉树是一个有限的结点集合,二叉树的遍历是指不重复地访问二叉树中的所有结点,与队列无关。

    27.设有栈S和队列Q,初始状态均为空。首先依次将A,B,C,D,E,F入栈,然后从栈中退出三个元素依次入队,再将X,Y,Z入栈后,将栈中所有元素退出并依次入队,最后将队列中所有元素退出,则退队元素的顺序为

    A)DEFXYZABC

    B)FEDZYXCBA

    C)FEDXYZCBA

    D)DEFZYXABC

    B【解析】栈是一种特殊的线性表,它所有的插入与删除都限定在表的同一端进行。队列是指允许在一端进行插入,而在另一端进行删除的线性表。将A,B,C,D,E,F入栈后,栈中元素为ABCDEF,退出三个元素入队,队列元素为FED,将X,Y,Z入栈后栈中元素为ABCXYZ,退栈全部入队后,队列元素为FEDZYXCBA

    28.下列叙述中正确的是

    A)循环队列是顺序存储结构

    B)循环队列是链式存储结构

    C)循环队列空的条件是队头指针与队尾指针相同

    D)循环队列的插入运算不会发生溢出现象

    A【解析】循环队列是队列的一种顺序存储结构。在循环队列中,在队列满和队列为空时,队头指针与队尾指针均相同;当需要插入的数据大于循环队列的存储长度,入队运算会覆盖前面的数据,发生溢出现象。

    29.下列叙述中正确的是

    A)在循环队列中,队尾指针的动态变化决定队列的长度

    B)在循环队列中,队头指针和队尾指针的动态变化决定队列的长度

    C)在带链的队列中,队头指针与队尾指针的动态变化决定队列的长度

    D)在带链的栈中,栈顶指针的动态变化决定栈中元素的个数

    B【解析】在循环队列中,队头指针和队尾指针的动态变化决定队列的长度。带链的栈和带链的队列均采用链式存储结构,而在这种结构中,各数据结点的存储序号是不连续的,并且各结点在存储空间中的位置关系与逻辑关系也不一致,故头指针和尾指针或栈顶指针无法决定链表长度。

    30.循环队列的存储空间为 Q(1:50),初始状态为 front=rear=50。经过一系列正常的入队与退队操作后,front=rear=25,此后又插入一个元素,则循环队列中的元素个数为

    A)1,或50且产生上溢错误

    B)51

    C)26

    D)2

    A【解析】循环队列长度为50,由初始状态为front=rear=50可知此时循环队列为空。入队运算时,首先队尾指针rear1(即rear+1),然后在队尾指针rear指向的位置插入新元素。当队尾指针rear=50+1时,置rear=1。退队运算时,排头指针front1(即front+1),然后删除front指针指向的位置上的元素,当排头指针front=50+1时,置front=1。当front=rear=25时可知队列空或者队列满,此后又插入了一个元素,如果之前队列为空,插入操作之后队列里只有一个元素;如果插入之前队列已满(50个元素),执行插入则会产生溢出错误。

    31.循环队列的存储空间为 Q(1:40),初始状态为 front=rear=40。经过一系列正常的入队与退队操作后,front=rear=15,此后又退出一个元素,则循环队列中的元素个数为

    A) 14

    B)15

    C)40

    D)39,或0且产生下溢错误

    D【解析】当front=rear=15时可知队列空或者队列满,此后又退出一个元素,如果之前队列为空,退出操作会产生错误,队列里有0个元素;如果退出之前队列已满(40个元素),执行退出后,队列里还有39个元素。

    32.设循环队列的存储空间为Q(1:50),初始状态为front=rear=50。现经过一系列入队与退队操作后,front=rear=1,此后又正常地插入了两个元素。最后该队列中的元素个数为

    A)3

    B)1

    C)2

    D)52

    C【解析】由front=rear=1可知队列空或者队列满,此后又可以正常地插入了两个元素说明插入前队列为空,则插入后队列元素个数为2

    33.设循环队列的存储空间为Q(1:m),初始状态为空。现经过一系列正常的入队与退队操作后,front=m,rear=m-1,此后从该循环队列中删除一个元素,则队列中的元素个数为

    A)m-1

    B)m-2

    C)0

    D)1

    B【解析】从排头指针front指向的后一个位置直到队尾指针rear指向的位置之间所有的元素均为队列中的元素。如果rear-front>0,则队列中的元素个数为rear-front个;如果rear-front<0,则队列中的元素个数为rear-front+m。该题中m-1<m,即rear-front<0,则该循环队列中的元素个数为(m-1-m+m=m-1此后从该循环队列中删除一个元素,则队列中的元素个数为m-1-1=m-2

    34.设循环队列的存储空间为Q(1:m),初始状态为空。现经过一系列正常的入队与退队操作后,front=m-1,rear=m,此后再向该循环队列中插入一个元素,则队列中的元素个数为

    A) m

    B)m-1

    C)1

    D)2

    D【解析】该题中m-1<m,即rear-front>0,则该循环队列中的元素个数为m-m-1=1此后从该循环队列中插入一个元素,则队列中的元素个数为1+1=2

    35.设循环队列为Q(1:m),其初始状态为front=rear=m。经过一系列入队与退队运算后,front=30,rear=10。现要在该循环队列中作顺序查找,最坏情况下需要比较的次数为

    A)19

    B)20

    C)m-19

    D)m-20

    D【解析】front=30rear=10front>rear,则队列中有10-30+m=m-20个元素,在作顺序查找时,最坏情况下(最后一个元素才是要找的元素或没有要查找的元素)比较次数为m-20次。

    36.设循环队列的存储空间为Q(1:m),初始状态为 front=rear=m。经过一系列正常的操作后,front=1,rear=m。为了在该队列中寻找值最大的元素,在最坏情况下需要的比较次数为

    A)0

    B)1

    C)m-2

    D)m-1

    C【解析】该题中1<m,即rear-front>0,则该循环队列中的元素个数为m-1此在该队列中寻找值最大的元素,在最坏情况下需要的比较次数为m-1-1=m-2

    37.设循环队列的存储空间为Q(1:50),初始状态为front=rear=50。经过一系列正常的操作后,front-1=rear。为了在该队列中寻找值最大的元素,在最坏情况下需要的比较次数为

    A)48

    B)49

    C)1

    D)0

    A【解析】该题中rear-front=front-1- front<0,则该循环队列中的元素个数为rear-front+50=front-1- front+50=49在该队列中寻找值最大的元素,在最坏情况下需要的比较次数为49-1=48

    38.设循环队列的存储空间为Q(1:50),初始状态为front=rear=50。经过一系列正常的操作后,front=rear-1。为了在该队列中寻找值最大的元素,在最坏情况下需要的比较次数为

    A)1

    B)0

    C)49

    D)50

    B【解析】该题中rear-front=rear-rear-1>0,则该循环队列中的元素个数为rear-front=rear-rear-1=1。因队列中只有1个元素,故寻找值最大的元素不需要进行比较,即比较次数为0

    39.线性表的链式存储结构与顺序存储结构相比,链式存储结构的优点有

    A)节省存储空间

    B)插入与删除运算效率高

    C)便于查找

    D)排序时减少元素的比较次数

    B【解析】线性表的顺序存储结构称为顺序表,线性表的链式存储结构称为链表,两者的优缺点如下表所示。

    类型

    优点

             缺点

    顺序表

    1)可以随机存取表中的任意结点

    2)无需为表示结点间的逻辑关系额外增加存储空间

    1)插入和删除运算效率低

    2)存储空间不便于扩充

    3)不便于对存储空间的动态分配

    链表

    1)在进行插入和删除运算时,只需要改变指针即可,不需要移动元素

    2)存储空间易于扩充并且方便空间的动态分配

    需要额外的空间(指针域)来表示数据元素之间的逻辑关系,存储密度比顺序表低

    40.下列结构中属于线性结构链式存储的是

    A)双向链表

    B)循环队列

    C)二叉链表

    D)二维数组

    A【解析】双向链表也叫双链表,是链表(采用链式存储结构)的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。循环队列是队列的一种顺序存储结构。二叉链表和二维数组属于非线性结构。

    41.在线性表的链式存储结构中,其存储空间一般是不连续的,并且

    A)前件结点的存储序号小于后件结点的存储序号

    B)前件结点的存储序号大于后件结点的存储序号

    C)前件结点的存储序号可以小于也可以大于后件结点的存储序号

    D)以上三种说法均不正确

    C【解析】在线性表的链式存储结构中,各数据结点的存储序号是不连续的,并且各结点在存储空间中的位置关系与逻辑关系也不一致,因此前件结点的存储序号后件结点的存储序号之间不存在大小关系。

    42.下列叙述中正确的是

    A)结点中具有两个指针域的链表一定是二叉链表

    B)结点中具有两个指针域的链表可以是线性结构,也可以是非线性结构

    C)循环链表是循环队列的链式存储结构

    D)循环链表是非线性结构

    B【解析】结点中具有两个指针域的链表既可以是双向链表也可以是二叉链表,双向链表是线性结构,二叉链表属于非线性结构。循环链表是线性链表的一种形式,属于线性结构,采用链式存储结构,而循环队列是队列的一种顺序存储结构。

    43.带链的栈与顺序存储的栈相比,其优点是

    A)入栈与退栈操作方便

    B)可以省略栈底指针

    C)入栈操作时不会受栈存储空间的限制而发生溢出

    D)所占存储空间相同

    C【解析】带链的栈就是用一个线性链表来表示的栈,线性链表不受存储空间大小的限制,因此入栈操作时不会受栈存储空间的限制而发生溢出(不需考虑栈满的问题)。

    44.下列叙述中正确的是

    A)带链栈的栈底指针是随栈的操作而动态变化的

    B)若带链队列的队头指针与队尾指针相同,则队列为空

    C)若带链队列的队头指针与队尾指针相同,则队列中至少有一个元素

    D)不管是顺序栈还是带链的栈,在操作过程中其栈底指针均是固定不变的

    A【解析】由于带链栈利用的是计算机存储空间中的所有空闲存储结点,因此随栈的操作栈顶栈底指针动态变化。带链的队列中若只有一个元素,则头指针与尾指针相同。

    45.带链栈空的条件是

    A)top=bottom=NULL

    B)top=-1  bottom=NULL

    C)top=NULL  bottom=-1

    D)top=bottom=-1

    A【解析】在带链的栈中,只会出现栈空和非空两种状态。当栈为空时,有top=bottom=NULL;当栈非空时,top指向链表的第一个结点(栈顶)。

    46.在带链栈中,经过一系列正常的操作后,如果top=bottom,则栈中的元素个数为

    A)0  1

    B)0

    C)1

    D)栈满

    A【解析】带链栈就是没有附加头结点、运算受限的单链表。栈顶指针就是链表的头指针。如果栈底指针指向的存储单元中存有一个元素,则当top=bottom时,栈中的元素个数为1;如果栈底指针指向的存储单元中没有元素,则当top=bottom时,栈中的元素个数为0

    47.某带链栈的初始状态为top=bottom=NULL,经过一系列正常的入栈与退栈操作后,top=bottom=20。该栈中的元素个数为

    A)0

    B)1

    C)20

    D)不确定

    B【解析】带链的栈就是用一个单链表来表示的栈,栈中的每一个元素对应链表中的一个结点。栈为空时,头指针和尾指针都为NULL;栈中只有一个元素时,头指针和尾指针都指向这个元素。

    48.某带链栈的初始状态为top=bottom=NULL,经过一系列正常的入栈与退栈操作后,top=10,bottom=20。该栈中的元素个数为

    A)0

    B)1

    C)10

    D)不确定

    D【解析】带链的栈使用了链表来表示栈,而链表中的元素存储在不连续的地址中,因此当top=10bottom=20时,不能确定栈中元素的个数。

    49.带链队列空的条件是

    A)front=rear=NULL

    B)front=-1  rear=NULL

    C)front=NULL  rear=-1

    D)front=rear=-1

    A【解析】带链的队列就是用一个单链表来表示的队列,队列中的每一个元素对应链表中的一个结点。队列空时,头指针和尾指针都为NULL。

    50.在带链队列中,经过一系列正常的操作后,如果front=rear,则队列中的元素个数为

    A)0

    B)1

    C)0  1

    D)队列满

    C【解析】带链队列空时,头指针和尾指针都为NULL;队列中只有一个元素时,头指针和尾指针都指向这个元素。

    51.某带链的队列初始状态为front=rear=NULL。经过一系列正常的入队与退队操作后,front=rear=10。该队列中的元素个数为

    A)0

    B)1

    C)10

    D)不确定

    B【解析】带链队列空时,头指针和尾指针都为null;队列中只有一个元素时,头指针和尾指针都指向这个元素。

    52.某带链的队列初始状态为front=rear=NULL。经过一系列正常的入队与退队操作后,front=10, rear=5。该队列中的元素个数为

    A)4

    B)5

    C)6

    D)不确定

    D【解析】带链的队列使用了链表来表示队列,而链表中的元素存储在不连续的地址中,因此当front=10,rear=5时,不能确定队列中元素的个数。

    53.下列叙述中错误的是

    A)循环链表中有一个表头结点

    B)循环链表是循环队列的存储结构

    C)循环链表的表头指针与循环链表中最后一个结点的指针均指向表头结点

    D)循环链表实现了空表与非空表运算的统一

    B【解析】循环链表是指在单链表的第一个结点前增加一个表头结点,队头指针指向表头结点,最后一个结点的指针域的值由NULL改为指向表头结点。循环链表是线性表的一种链式存储结构,循环队列是队列的一种顺序存储结构。

    54.从表中任何一个结点位置出发就可以不重复地访问到表中其他所有结点的链表是

    A)循环链表

    B)双向链表

    C)单向链表

    D)二叉链表

    A【解析】在循环链表中,所有结点的指针构成了一个环状链,只要指出表中任何一个结点的位置,就可以从它出发不重复地访问到表中其他所有结点

    55.非空循环链表所表示的数据结构

    A)有根结点也有叶子结点

    B)没有根结点但有叶子结点

    C)有根结点但没有叶子结点

    D)没有根结点也没有叶子结点

    A【解析】循环链表表头结点为根结点,链表的最后一个结点为叶子节点,虽然它含有一个指向表头结点的指针,但是表头结点并不是它的一个后件。

    56.下列结构中为非线性结构的是

    A)

    B)向量

    C)二维表

    D)矩阵

    A【解析】由定义可以知道,树为一种简单的非线性结构。在数这种数据结构中,所有数据元素之间的关系具有明显的层次特性。

    57.某棵树中共有25个结点,且只有度为3的结点和叶子结点,其中叶子结点有7个,则该树中度为3的结点数为

    A)6

    B)7

    C)8

    D)不存在这样的树

    D【解析】根据题意,树中只有度为3的结点和叶子结点7个),则度为3的结点有25-7=18;又根据树中的结点数=树中所有结点的度之和+1,设度为3的结点数为n,3n+1=25,n=8。两种方式得到的度为3的结点数不同不存在这样的树。

    58.某棵树的度为4,且度为4、3、2、1的结点个数分别为1、2、3、4,则该树中的叶子结点数为

    A)11

    B)9

    C)10

    D)8

    A【解析】设叶子结点数为n,根据树中的结点数=树中所有结点的度之和+1,4×1+2+3+4+n×0+1=21,n=21-1-2-3-4=11

    59.设一棵树的度为3,共有27个结点,其中度为3,2,0的结点数分别为4,1,10。该树中度为1的结点数为

    A) 11

    B) 12

    C) 13

    D)不可能有这样的树

    B【解析】设度为1的结点数为n,根据树中的结点数=树中所有结点的度之和+1,得3×4+2×1+1×n+0×10+1=27,n=12。

    60.设一棵度为3的树,其中度为2,1,0的结点数分别为3,1,6。该树中度为3的结点数为

    A)1

    B)2

    C)3

    D)不可能有这样的树

    A【解析】设树的结点数为n,则度为3的结点数为n-3-1-6=n-10,根据树中的结点数=树中所有结点的度之和+1,得3×(n-10+2×3+1×1+0×6+1=n,解得n=11,则度为3的结点数为n-10=11-10=1。

    61.设一棵树的度为3,其中没有度为2的结点,且叶子结点数为5。该树中度为3的结点数为

    A) 3

    B)1

    C) 2

    D)不可能有这样的树

    C【解析】设树的结点数为m,度为3的结点数为n,则度为1的结点数为m-n-5, 根据树中的结点数=树中所有结点的度之和+1,得3×n+1×(m-n-5+5×0+1=m,n=2。

    62.度为3的一棵树共有30个结点,其中度为3,1的结点个数分别为3,4。则该树中的叶子结点数为

    A) 14

    B) 15

    C) 16

    D)不可能有这样的树

    B【解析】设叶子结点数为n,则度为2的结点数为30-3-4-n=23-n,根据树中的结点数=树中所有结点的度之和+1,得3×3+2×(23-n+1×4+0×n+1=30,则n=15。

    63.设某棵树的度为3,其中度为2,1,0的结点个数分别为3,4,15。则该树中总结点数为

    A)不可能有这样的树

    B)30

    C)22

    D)35

    A【解析】设树的总结点数为n,则度为3的结点数为n-3-4-15=n-22,根据树中的结点数=树中所有结点的度之和+1,得3×(n-22+2×3+1×4+0×15+1=n,则n=27.5,求出的结点数不为整数,故不可能有这样的树存在。

    64.某二叉树共有845个结点,其中叶子结点有45个,则度为1的结点数为

    A)400

    B)754

    C)756

    D)不确定

    C【解析】叶子结点有45个,根据在二叉树中度为0的结点(叶子结点)总比度为2的结点多一个,则度为2的结点数为44个,因此度为1的结点数为845-45-44=756个。

    65.某二叉树中有15个度为1的结点,16个度为2的结点,则该二叉树中总的结点数为

    A)32

    B)46

    C)48

    D)49

    C【解析】根据在二叉树中度为0的结点(叶子结点)总比度为2的结点多一个,得度为0的结点数为16+1=17个,故总的结点数=17+15+16=48个。

    66.某二叉树共有730个结点,其中度为1的结点有30个,则叶子结点个数为

    A) 1

    B)351

    C) 350

    D)不存在这样的二叉树

    D【解析】设叶子结点数为n,根据在二叉树中度为0的结点(叶子结点)总比度为2的结点多一个,则度为2的结点数为n-1,n+n-1+30=730,n=350.5。由于结点数只能为整数,所以不存在这样的二叉树。

    67.某二叉树中共有350个结点,其中200个为叶子结点,则该二叉树中度为2的结点数为

    A)不可能有这样的二叉树

    B)150

    C)199

    D)149

    A【解析】叶子结点数为200,根据在二叉树中度为0的结点(叶子结点)总比度为2的结点多一个,则度为2的结点数为199,199+200>350,故不存在这样的二叉树。

    68.某二叉树的深度为7,其中有64个叶子结点,则该二叉树中度为1的结点数为

    A)0

    B)1

    C)2

    D)63

    A【解析】叶子结点有64个,根据在二叉树中度为0的结点(叶子结点)总比度为2的结点多一个,则度为2的结点数为63个;又深度为m的二叉树最多有2m-1个结点,则该二叉树最多有27-1=127个结点64+63=127,因此该树不存在度为1的结点。

    69.深度为7的二叉树共有127个结点,则下列说法中错误的是

    A)该二叉树是满二叉树

    B)该二叉树有一个度为1的结点

    C)该二叉树是完全二叉树

    D)该二叉树有64个叶子结点

    B【解析】满二叉树满足深度为m的二叉树最多有2m-1个结点,本题中二叉树深度为7且有127个结点,满足27-1=127,达到最大值,故此二叉树为满二叉树,也是完全二叉树。满二叉树第k层上有2k-1结点,则该二叉树的叶子结点数为27-1=64个。满二叉树不存在度为1的结点。

    70.深度为5的完全二叉树的结点数不可能是

    A)15

    B)16

    C)17

    D)18

    A【解析】设完全二叉树的结点数为n,根据深度为k的二叉树至多有2k-1个结点,再根据完全二叉树的定义可知,2k-1-1<n≤2k-1。本题中完全二叉树的深度为5,则25-1-1<n≤25-1,15<n≤31。因此,结点数不能为15。

    71.某完全二叉树共有256个结点,则该完全二叉树的深度为

    A)7

    B)8

    C)9

    D)10

    C【解析】根据完全二叉树的性质:具有n个结点的完全二叉树的深度为[log2n]+1。本题中完全二叉树共有256个结点,则深度为[log2256]+1=8+1=9。

    72.深度为7的完全二叉树中共有125个结点,则该完全二叉树中的叶子结点数为

    A)62

    B)63

    C)64

    D)65

    B【解析】在满二叉树的第k层上有2k-1个结点、且深度为m的满二叉树有2m-1个结点,则深度为6的满二叉树共有26-1=63个结点,第6层上有26-1=32个结点。本题是深度为7的完全二叉树,则前6层共有63个结点,第7层的结点数为125-63=62个且全为叶子结点。由于第6层上有32个结点,第7层上有62个结点,则第6层上有1个结点无左右子树(该结点为叶子结点)。因此,该完全二叉树中共有叶子结点62+1=63个。

    73.在具有2n个结点的完全二叉树中,叶子结点个数为

    A)n

    B)n+1

    C)n-1

    D)n/2

    A【解析】由二叉树的定义可知,树中必定存在度为0的结点和度为2的结点,设度为0结点有a个,根据度为0的结点(即叶子结点)总比度为2的结点多一个,得度为2的结点有a-1个。再根据完全二叉树的定义,度为1的结点有0个或1个,假设度1结点为0个,a+0+a-1=2n,得2a=2n-1,由于结点个数必须为整数,假设不成立;当度为1的结点为1个时,a+1+a-1=2n,得a=n,即叶子结点个数为n。

    74.下列数据结构中为非线性结构的是

    A)二叉链表

    B)循环队列

    C)循环链表

    D)双向链表

    A【解析】二叉树的链式存储结构也称为二叉链表,二叉树是树的一种,属于非线性结构。

    75.下列叙述中正确的是

    A)非完全二叉树可以采用顺序存储结构

    B)有两个指针域的链表就是二叉链表

    C)有的二叉树也能用顺序存储结构表示

    D)顺序存储结构一定是线性结构

    C【解析】在计算机中,二叉树通常采用链式存储结构,但对于满二叉树和完全二叉树来说,可以按层进行顺序存储。因此A项错误,C项正确。虽然满二叉树和完全二叉树可以采用顺序存储结构,但仍是一种非线性结构,因此D项错误。双向链表也有两个指针域,因此B项错误。

    76.有二叉树如下图所示:

     

     

    则前序序列为

    A)ABDEGCFH

    B)DBGEAFHC

    C)DGEBHFCA

    D)ABCDEFGH

    A【解析】前序遍历首先访问根结点,然后遍历左子树,最后遍历右子树;在遍历左、右子树时,仍然先访问根结点,然后遍历左子树,最后遍历右子树。故本题前序序列是ABDEGCFH。

    中序遍历首先遍历左子树,然后访问跟结点,最后遍历右子树;在遍历左、右子树时,仍然先遍历左子树,然后访问跟结点,最后遍历右子树。故本题的中序序列是DBGEAFHC。

    后序遍历首先遍历左子树,然后遍历右子树,最后访问根结点;在遍历左、右子树时,仍然先遍历左子树,然后遍历右子树,最后访问根结点。故本题的后序序列是DGEBHFCA。

    77.设二叉树的前序序列为ABDEGHCFIJ,中序序列为DBGEHACIFJ。则后序序列为

    A)JIHGFEDCBA

    B)DGHEBIJFCA

    C)GHIJDEFBCA

    D)ABCDEFGHIJ

    B【解析】二叉树的前序序列为ABDEGHCFIJ,由于前序遍历首先访问根结点,可以确定该二叉树的根结点是A。再由中序序列为DBGEHACIFJ,可以得到结点D、B、G、E、H位于根结点的左子树上,结点C、I、F、J位于根结点的右子树上。由于中序遍历和后序遍历都是先遍历左子树,故本题后序遍历首先访问D结点;再由后序遍历是最后访问根结点,故本题后序遍历最后访问的结点是根结点A。采用排除法可知,后续序列为DGHEBIJFCA。

    78.某二叉树的中序遍历序列为CBADE,后序遍历序列为CBEDA,则前序遍历序列为

    A)CBADE

    B)CBEDA

    C)ABCDE

    D)EDCBA

    C【解析】二叉树的后序遍历序列为CBEDA,由于后序遍历最后访问根结点,可以确定该二叉树的根结点是A。再由中序遍历序列为CBADE,可以得到子序列(CB)一定在左子树中,子序列(DE)一定在右子树中。结点C、B在中序序列和后序序列中顺序未变,说明结点B是结点C的父结点;结点D、E在中序序列和后序序列中顺序相反,说明结点D是结点E的父结点。因此该二叉树的前序遍历序列为ABCDE。

    79. 某二叉树的前序序列为ABCDEFG,中序序列为DCBAEFG,则该二叉树的深度(根结点在第1层)为

    A)2

    B)3

    C)4

    D)5

    C【解析】二叉树的前序序列为ABCDEFG,则A为根结点;中序序列为DCBAEFG,可知结点D、C、B位于根结点的左子树上,结点E、F、G位于根结点的右子树上。另外,结点B、C、D在前序序列和中序序列中顺序相反,则说明这三个结点依次位于前一个结点的左子树上;结点E、F、G顺序未变,则说明这三个结点依次位于前一个结点的右子树上。故二叉树深度为4。

    80.设二叉树的前序序列与中序序列均为ABCDEFGH,则该二叉树的后序序列为

    A)ABCDHGFE

    B)DCBAHGFE

    C)EFGHABCD

    D)HGFEDCBA

    D【解析】二叉树的前序序列与中序序列均为ABCDEFGH,可知二叉树根结点为A,且根结点A只有右子树,没有左子树。同理,可以推出结点B只有右子树无左子树。依此类推,该二叉树除叶子结点外,每个结点只有右子树无左子树。因此该二叉树的后序序列为HGFEDCBA。

    81.某二叉树的后序遍历序列与中序遍历序列相同,均为ABCDEF,则按层次输出(同一层从左到右)的序列为

    A)CBAFED

    B)FEDCBA

    C)DEFCBA

    D)ABCDEF

    B【解析】该二叉树的后序遍历序列与中序遍历序列均为ABCDEF,则根结点为F;根结点F只有左子树,右子树为空。即ABCDE是根结点F的右子树集合。这样问题就转化为就后序遍历序列与中序遍历序列均为ABCDE的子树,同理可得左子树集合的根结点为E,且根结点只有左子树右子树。依次类推,该二叉树除叶子结点外,每个结点只有左子树无右子树,结构如下:

     

     

    按层次输出(同一层从左到右)的序列为FEDCBA。

    82.某二叉树的前序序列为ABDFHCEG,中序序列为HFDBACEG。该二叉树按层次输出(同一层从左到右)的序列为

    A)HGFEDCBA

    B)HFDBGECA

    C)ABCDEFGH

    D)ACEGBDFH

    C【解析】二叉树的前序序列为ABDFHCEG,可以确定这个二叉树的根结点是A;再由中序序列HFDBACEG,可以得到HFDB为根结点A的左子树,CEG为根结点A的右子树。同理依次对左子树HFDB和右子树CEG进行同样的推理,得到该二叉树的结构如下:

     

     

    该二叉树按层次输出(同一层从左到右)的序列为ABCDEFGH。

    83.某完全二叉树按层次输出(同一层从左到右)的序列为ABCDEFGH。该完全二叉树的前序序列为

    A)ABCDEFGH

    B)ABDHECFG

    C)HDBEAFCG

    D)HDEBFGCA

    B【解析】完全二叉树的特点是除最后一层外,每一层上的结点数均达到最大值;在最后一层上只缺少右边的若干结点。根据这一特点,再根据题意输出序列为ABCDEFGH,可以得到该二叉树的结构如下:

     

     

    故此完全二叉树的前序序列为ABDHECFG。

    84.设非空二叉树的所有子树中,其左子树上的结点值均小于根结点值,而右子树上的结点值均不小于根结点值,则称该二叉树为排序二叉树。对排序二叉树的遍历结果为有序序列的是

    A)前序序列

    B)中序序列

    C)后序序列

    D)前序序列或后序序列

    B【解析】中序遍历的次序是先遍历左子树,再遍历根结点,最后遍历右子树。而在排序二叉树中,左子树结点值<根结点值≤右子树结点值,要使对排序二叉树的遍历结果为有序序列,只能采用中序遍历。

    85.设二叉树中共有15个结点,其中的结点值互不相同。如果该二叉树的前序序列与中序序列相同,则该二叉树的深度为

    A)4

    B)6

    C)15

    D)不存在这样的二叉树

    C【解析】在具有n个结点的二叉树中,如果各结点值互不相同,若该二叉树的前序序列与中序序列相同,则说明该二叉树只有右子树,左子树为空,二叉树的深度为n;若该二叉树的后序序列与中序序列相同,则说明该二叉树只有左子树,右子树为空,二叉树的深度为n。故本题中二叉树的深度为15。

    86.在长度为n的顺序表中查找一个元素,假设需要查找的元素一定在表中,并且元素出现在表中每个位置上的可能性是相同的,则在平均情况下需要比较的次数为

    A)n/4

    B)n

    C)3n/4

    D)(n+1)/2

    D【解析】在顺序表中查找,最好情况下第一个元素就是要查找的元素,则比较次数为1;在最坏情况下,最后一个元素才是要找的元素,则比较次数为n。则平均比较次数:(1+2+┉+n)/n=(n(n+1)/2)/n=(n+1)/2。

    87.在长度为n的顺序表中查找一个元素,假设需要查找的元素有一半的机会在表中,并且如果元素在表中,则出现在表中每个位置上的可能性是相同的。则在平均情况下需要比较的次数大约为

    A)n

    B)3n/4

    C)n/2

    D)n/4

    B【解析】在顺序表中查找,最好情况下第一个元素就是要查找的元素,则比较次数为1;在最坏情况下,最后一个元素才是要找的元素,则比较次数为n。这是找到元素的情况。如果没有找到元素,则要比较n次。因此,平均需要比较:找到元素的情况×+未找到元素的情况×=(1+2+┉+n)/n×+n×=,大约为。

    88.下列算法中均以比较作为基本运算,则平均情况与最坏情况下的时间复杂度相同的是

    A)在顺序存储的线性表中寻找最大项

    B)在顺序存储的线性表中进行顺序查找

    C)在顺序存储的有序表中进行对分查找

    D)在链式存储的有序表中进行查找

    A【解析】寻找最大项,无论如何都要查看所有的数据,与数据原始排列顺序没有多大关系,无所谓最坏情况和最好情况,或者说平均情况与最坏情况下的时间复杂度是相同的。而查找无论是对分查找还是顺序查找,都与要找的数据和原始的数据排列情况有关,最好情况是第1次查看的一个数据恰好是要找的数据,只需要比较1次;如果没有找到再查看下一个数据,直到找到为止,最坏情况下是最后一次查看的数据才是要找的,顺序查找和对分查找在最坏情况下比较次数分别是n和log2n,平均情况则是1~最坏情况的平均,因而是不同的。

    89.线性表的长度为n。在最坏情况下,比较次数为n-1的算法是

    A)顺序查找

    B)同时寻找最大项与最小项

    C)寻找最大项

    D)有序表的插入

    C【解析】顺序查找要逐个查看所有元素,会比较n次。在最坏情况下,寻找最大项无论如何需要查看表中的所有元素,n个元素比较次数为n-1。同时寻找最大项和最小项,需要为判断较大值和较小值分别进行比较,会有更多的比较次数。有序表的插入最坏情况下是插入到表中的最后一个元素的后面位置,则会比较n次。

    90.下列叙述中正确的是

    A)二分查找法只适用于顺序存储的有序线性表

    B)二分查找法适用于任何存储结构的有序线性表

    C)二分查找法适用于有序循环链表

    D)二分查找法适用于有序双向链表

    A【解析】二分查找法(又称对分查找法)只适用于顺序存储的有序表。在此所说的有序表是指线性表的中元素按值非递减排列(即从小到大,但允许相邻元素值相等)。

    91.设有序线性表的长度为n,则在有序线性表中进行二分查找,最坏情况下的比较次数为

    A)n(n-1)/2

    B)n

    C)nlog2n

    D)log2n

    D【解析】有序线性表的长度为n,设被查找元素为x,则二分查找的方法如下:将x与线性表的中间项比较:若中间项的值等于x,则说明查到,查找结束;若x小于中间项的值,则在线性表的前半部分(即中间项以前的部分)以相同的方法进行查找;若x大于中间项的值,则在线性表的后半部分(即中间项以后的部分)以相同的方法进行查找。这个过程一直进行到查找成功或子表长度为0(说明线性表中没有这个元素)为止。对于长度为n的有序线性表,在最坏情况下,二分查找只需要比较log2n次。

    92.在长度为97的顺序有序表中作二分查找,最多需要的比较次数为

    A)48

    B)96

    C)7

    D)6

    C【解析】对于长度为n的有序线性表,在最坏情况下,二分查找只需要比较log2n次。本题中n=97,最多需要的比较次数为log297,6<log297<7,故需要比较7次。

    93.设表的长度为n。下列查找算法中,在最坏情况下,比较次数最少的是

    A)顺序查找

    B)寻找最大项

    C)寻找最小项

    D)有序表的二分查找

    D【解析】在最坏情况下的比较次数:顺序查找为n,寻找最大项和最小项均为n-1,有序表的二分查找为log2n。

    94.设顺序表的长度为40,对该表进行冒泡排序。在最坏情况下需要的比较次数为

    A)40

    B)41

    C)780

    D)820

    C【解析】对长度为n的线性表排序,在最坏情况下,冒泡排序需要经过n/2遍的从前住后的扫描和n/2遍的从后住前的扫描,需要比较的次数为n(n-1)/2。本题中n=40,故比较次数为40×(40-1)÷2=780。

    95.在快速排序法中,每经过一次数据交换(或移动)后

    A)只能消除一个逆序

    B)能消除多个逆序

    C)不会产生新的逆序

    D)消除的逆序个数一定比新产生的逆序个数多

    B【解析】在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那么它们就称为一个逆序。快速排序的思想是:从线性表中选取一个元素,设为T,将线性表中后面小于T的元素移到前面,而前面大于T的元素移到后面,结果就将线性表分成两部分(称两个子表),T插入到其分割线的位置处,这个过程称为线性表的分割,然后再用同样的方法对分割出的子表再进行同样的分割。快速排序不是对两个相邻元素进行比较,可以实线通过一次交换而消除多个逆序,但由于均与T(基准元素)比较,也可能会产生新的逆序。

    96.设表的长度为15。则在最坏情况下,快速排序所需要的比较次数为

    A)75

    B)55

    C)15

    D)105

    D【解析】快速排序在最坏情况下需要进行n(n-1)/2次比较,但实际的排序效率要比冒泡排序高得多。本题中n=15,15×(15-1)÷2=105。

    97.设顺序表的长度为16,对该表进行简单插入排序。在最坏情况下需要的比较次数为

    A)120

    B)60

    C)30

    D)15

    A【解析】简单插入排序在最坏情况下,即初始排序序列是逆序的情况下,比较次数为n(n-1)/2,移动次数为n(n-1)/2。本题中n=16,16×(16-1)÷2=8×15=120。

    98.在希尔排序法中,每经过一次数据交换后

    A)不会产生新的逆序

    B)只能消除一个逆序

    C)能消除多个逆序

    D)消除的逆序个数一定比新产生的逆序个数多

    C【解析】希尔排序法的基本思想是:将整个无序序列分割成若干小的子序列分别进行插入排序。在子序列中每进行一次比较就有可能移去整个线性表中的多个逆序,从而改善整个排序过程的性能。

    99.下列序列中不满足堆条件的是

    A)98959394899076805549

    B)98959394898576645549

    C)98959394899076645549

    D)98959396898576645549

    D【解析】根据堆的定义,n个元素的序列(h1,h2,…hn),当且仅当hi≤h2ihi≤h2i+1时为小顶堆,当且仅当hi≥h2ihi≥h2i+1时为大顶堆。D项中,h2=95,h4=96,h2<h4,但h5=89,h2>h5,不满足小顶堆和大顶堆条件。

    100.在最坏情况下,堆排序的时间复杂度是

    A)O(log2n)

    B)O(nlog2n)

    C)O(n2)

    D)O(n1.5)

    B【解析】堆排序的方法对于规模较小的线性表并不合适,但对于较大规模的线性表来说是很有效的。在最坏情况下,堆排序需要比较次数为nlog2n,时间复杂度为O(nlog2n)。

    101.设顺序表的长度为n。下列算法中,最坏情况下比较次数等于n(n-1)/2的是

    A)快速排序

    B)堆排序

    C)顺序查找

    D)寻找最大项

    A【解析】对于长度为n的线性表,最坏情况下查找或排序的次数如下表:

    类型

    最坏情况下查找或比较次数

    时间复杂度

    顺序查找

    n

    O(n)

    需找最大项或最小项

    n-1

    O(n-1)

    二分查找法

    log2n

    O(log2n)

    冒泡排序法

    n(n-1)/2

    O(n(n-1)/2)

    快速排序法

    n(n-1)/2

    O(n(n-1)/2)

    简单插入排序法

    n(n-1)/2

    O(n(n-1)/2)

    希尔排序法

    nr(1<r<2)

    O(n1.5))

    简单选择排序法

    n(n-1)/2

    O(n(n-1)/2)

    堆排序

    nlog2n

    O(nlog2n)

     

    102.下列各组排序法中,最坏情况下比较次数相同的是

    A)简单选择排序与堆排序

    B)简单插入排序与希尔排序

    C)冒泡排序与快速排序

    D)希尔排序与堆排序

    C【解析】最坏情况下比较次数:简单选择排序为n(n-1)/2,堆排序为nlog2n,简单插入排序为n(n-1)/2,希尔排序nr(1<r<2),冒泡排序为n(n-1)/2,快速排序为n(n-1)/2。故比较次数相同的是冒泡排序与快速排序。

    103.下列排序方法中,最坏情况下时间复杂度(即比较次数)最低的是

    A)快速排序

    B)希尔排序

    C)简单插入排序

    D)冒泡排序

    B【解析】最坏情况下,希尔排序需要比较nr(1<r<2)次,快速排序、简单插入排序、冒泡排序均需要比较n(n-1)/2次,故希尔排序时间复杂度最低。

    104.下列各排序法中,最坏情况下的时间复杂度最低的是

    A)堆排序

    B)快速排序

    C)希尔排序

    D)冒泡排序

    A【解析】最坏情况下,堆排序需要比较nlog2n次,希尔排序需要比较nr(1<r<2)次,快速排序、冒泡排序均需要比较n(n-1)/2次。故堆排序时间复杂度最低。

    105.下面属于良好程序设计风格的是

    A)源程序文档化

    B)程序效率第一

    C)随意使用无条件转移语句

    D)程序输入输出的随意性

    A【解析】要形成良好的程序设计风格,主要应注意和考虑:源程序文档化;数据说明的次序规范化,说明语句中变量安排有序化,使用注释来说明复杂数据的结构;程序编写要做到清晰第一、效率第二,先保证程序正确再要求提高速度,避免不必要的转移;对所有的输入数据都要进行检验,确保输入数据的合法性。

    106.下面不属于结构化程序设计原则的是

    A)逐步求精

    B)自顶向下

    C)模块化

    D)可继承性

    D【解析】结构化程序设计方法的原则包括:自顶向下、逐步求精、模块化、限制使用goto语句。可继承性是面向对象方法的特点。

    107.结构化程序设计风格强调的是

    A)程序的执行效率

    B)程序的易读性

    C)不考虑goto语句的限制使用

    D)程序的可移植性

    B【解析】按结构化程序设计方法设计出的程序清晰易读,可理解性好,程序员能够进行逐步求精、程序证明和测试,以确保程序的正确性,程序容易阅读并被人理解,便于用户使用和维护。可见结构化程序设计风格强调的是易读性。

    108.结构化程序的三种基本控制结构是

    A)顺序、选择和调用

    B)过程、子程序和分程序

    C)顺序、选择和重复(循环)

    D)调用、返回和转移

    C【解析】1966年Boehm和Jacopini证明了程序设计语言仅仅使用顺序、选择和重复三种基本控制结构就足以表达出各种其他形式结构的程序设计方法。

    109.不属于对象构成成份的是

    A)规则

    B)属性

    C)方法(或操作)

    D)标识

    A【解析】对象由一组表示其静态特征的属性和它执行的一组操作组成,对象名唯一标识一个对象。

    110.下面对“对象”概念描述正确的是

    A)属性就是对象

    B)操作是对象的动态属性

    C)任何对象都必须有继承性

    D)对象是对象名和方法的封装体

    B【解析】对象是由描述该对象属性的数据以及可以对这些数据施加的所有操作封装在一起构成的统一体。对象可以做的操作表示它的动态行为,通常也称为方法或服务,属性即对象所包含的信息。对象可以有继承性,但并不是任何对象都必须有继承性。

    111.下面不属于对象主要特征的是

    A)对象唯一性

    B)对象分类性

    C)对象多态性

    D)对象可移植性

    D【解析】对象有如下一些基本特点:

    ①标识唯一性:指对象是可区分的,并且由对象的内在本质来区分,而不是通过描述来区分。

    ②分类性:指可以将具有相同属性和操作的对象抽象成类。

    ③多态性:指同一个操作可以是不同对象的行为,不同对象执行同一类操作产生不同的结果。

    ④封装性:从外面看只能看到对象的外部特征,对象的内部对外是不可见的。

    ⑤模块独立性好。

    112.将自然数集设为整数类I,则下面属于类I实例的是

    A)-518

    B)5.18

    C)518

    D)518E-2

    C【解析】类是具有共同属性、共同方法的对象的集合。类是对象的抽象,它描述了属于该对象类型的所有对象的性质,而一个对象则是其对应类的一个实例。自然数集是全体非负整数组成的集合A项是负数实例,B项是浮点数实例,D项是用科学计数法表示的浮点数实例。

    113.下面叙述中正确的是

    A)软件是程序、数据及相关文档的集合

    B)软件中的程序和文档是可执行的

    C)软件中的程序和数据是不可执行的

    D)软件是程序和数据的集合

    A【解析】计算机软件是计算机系统中与硬件相互依存的另一部分,是包括程序、数据及相关文档的完成集合。程序、数据和相关文档又称为软件的三要素。

    114.下面对软件描述错误的是

    A)文档是不可执行的

    B)程序和数据是可执行的

    C)软件文档是与程序开发、维护和应用无关的资料

    D)软件是程序、数据及相关文档的集合

    C【解析】软件是程序、数据及相关文档的集合。其中,程序是软件开发人员根据用户需求开发的、用程序设计语言描述的、适合计算机执行的指令(语句)序列;数据是使程序能正常操纵信息的数据结构;文档是与程序开发、维护和使用有关的图文资料。可见,软件有两部分组成:一是机器可执行的程序和数据;二是机器不可执行的文档。

    115.下面对软件特点描述正确的是

    A)软件具有明显的制作过程

    B)软件在使用中存在磨损、老化问题

    C)软件复制不涉及知识产权

    D)软件是一种逻辑实体,具有抽象性

    D【解析】软件具有以下特点:软件是一种逻辑实体,而不是物理实体,具有抽象性;软件的生产与硬件不同,它没有明显的制作过程;软件在运行、使用期间不存在磨损、老化问题;软件的开发、运行对硬件和环境具有依赖性;软件复杂性高,成本昂贵;软件开发涉及诸多的社会因素(包括软件知识产权及法律等问题)。

    116.下面属于系统软件的是

    A)UNIX系统

    B)ERP系统

    C)办公自动化系统

    D)学生成绩管理系统

    A【解析】软件按功能可以分为应用软件、系统软件和支撑软件(或工具软件)。系统软件是管理计算机的资源,提高计算机使用效率并服务于其他程序的软件,如操作系统,编译程序,汇编程序,数据库管理系统和网络软件等。UNIX系统属于操作系统,故属于系统软件。ERP系统、办公自动化系统、学生成绩管理系统属于应用软件。

    117.下面属于应用软件的是

    A)编译程序

    B)Android操作系统

    C)汇编程序

    D)财务报表统计软件

    D【解析】应用软件是为解决特定领域的应用而开发的软件。例如,事务处理软件,工程与科学计算软件,实时处理软件,嵌入式软件,人工智能软件等应用性质不同的各种软件。编译程序、Android操作系统、汇编程序属于系统软件,财务报表统计属于应用软件。

    118.下面属于工具(支撑)软件的是

    A)IOS系统

    B)数据库管理系统

    C)财务管理系统

    D)Studio.NET

    D【解析】支撑软件是介于系统软件和应用软件之间,协助用户开发的工具性软件,包括辅助和支持开发和维护应用软件的工具软件,如需求分析软件,设计工具软件,编码工具软件,测试工具软件,维护工具软件等,也包括辅助管理人员控制开发进程和项目管理的工具软件,如计划进度管理工具软件,过程控制工具软件,质量管理及配置管理工具软件等。IOS系统、数据库管理系统属于系统软件,财务管理系统属于应用软件,Studio.NET属于支撑软件。

    119.下列叙述中正确的是

    A)软件工程是为了解决软件生产率问题

    B)软件工程的三要素是方法、工具和进程

    C)软件工程是用于软件的定义、开发和维护的方法

    D)软件工程是用工程、科学和数学的原则与方法研制、维护计算机软件的有关技术及管理方法

    D【解析】软件工程是试图用工程、科学和数学的原理与方法研制、维护计算机软件的有关技术及管理方法,是应用于计算机软件的定义、开发和维护的一整套方法、工具、文档、实践标准和工序。软件工程的目标是在给定成本、进度的前提下,开发出具有有效性、可靠性、可理解性、可维护性、可重用性、可适应性、可移植性、可追踪性和可互操作性且满足用户需求的产品,追求这些目标有助于提高软件产品的质量和开发效率,减少维护的困难。软件工程包含3个要素:方法、工具和过程。

    120.下列叙述中正确的是

    A)软件过程是软件开发过程

    B)软件过程是软件维护过程

    C)软件过程是软件开发过程和软件维护过程

    D)软件过程是把输入转化为输出的一组彼此相关的资源和活动

    D【解析】软件过程是把输入转化为输出的一组彼此相关的资源和活动。软件过程是为了获得高质量软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。软件过程所进行的基本活动主要有软件规格说明、软件开发或软件设计与实线、软件确认、软件演进。在过程结束时,将输入(用户要求)转化为输出(软件产品)。

    121.软件生命周期是指

    A)软件的运行和维护

    B)软件的需求分析、设计与实现

    C)软件的实现和维护

    D)软件产品从提出、实现、使用维护到停止使用退役的过程

    D【解析】通常,将软件产品从提出、实现、使用维护到停止使用退役的过程称为软件生命周期。也就是说,软件产品从考虑其概念开始,到该软件产品不能使用为止的整个时期都属于软件生命周期。

    122.软件生命周期可分为定义阶段、开发阶段和维护阶段,下面属于定义阶段任务的是

    A)软件设计

    B)软件测试

    C)可行性研究

    D)数据库设计

    C【解析】软件生命周期可分为定义阶段、开发阶段和维护阶段。

    软件定义阶段的任务是:确定软件开发工作必须完成的目标;确定工程的可行性。

    软件开发阶段的任务是:具体完成设计和实现定义阶段所定义的软件,通常包括总体设计、详细设计、编码和测试。其中总体设计和详细设计又称为系统设计,编码和测试又称为系统实现。

    软件维护阶段的任务是:使软件在运行中持久地满足用户的需要。

    123.软件生存周期中,解决软件“做什么”的阶段是

    A)需求分析

    B)软件设计

    C)软件实现

    D)可行性研究

    A【解析】软工生命周期可细化为可行性研究和计划制定、需求分析、软件设计(总体设计和详细设计)、编码、软件测试、运行和维护等阶段。需求分析是对待开发软件提出的需求进行分析并给出详细定义,是解决软件“做什么”的阶段。

    124.软件生命周期中,确定软件系统"怎么做"的阶段是

    A)软件测试

    B)软件设计

    C)系统维护

    D)需求分析

    B【解析】软件设计是系统设计人员和程序设计人员在反复理解软件需求的基础上,给出软件的结构、模块的划分、功能的分配以及处理流程,是解决软件“怎么做”的阶段。

    125.软件需求分析阶段的主要任务是

    A)确定软件开发方法

    B)确定软件开发工具

    C)确定软件开发计划

    D)确定软件系统的功能

    D【解析】软件需求是指用户对目标软件系统在功能、行为、性能、设计约束等方面的期望。需求分析的任务是发现需求、求精、建模和定义需求的过程。

    126.下面描述中不属于软件需求分析阶段任务的是

    A)撰写软件需求规格说明书

    B)软件的总体结构设计

    C)软件的需求分析

    D)软件的需求评审

    B【解析】需求分析阶段的工作可以分为4个方面:需求获取、需求分析、编写需求规格说明书和需求评审。软件的总体结构设计属于软件设计阶段的任务。

    127.下面不属于软件需求规格说明书内容的是

    A)软件的可验证性

    B)软件的功能需求

    C)软件的性能需求

    D)软件的外部接口

    A【解析】软件需求规格说明应重点描述软件的目的,软件的功能需求、性能需求、外部接口、属性及约束条件等。

    128.下面可以作为软件需求分析工具的是

    A)N-S

    B)程序流程图

    C)PAD

    D)数据流程图(DFD)

    D【解析】常见的需求分析方法有结构化分析方法和面向对象的分析方法。结构化分析方法工具包括数据流图(DFD)、数据字典(DD)、判定表和判定树等。程序流程图、N-S图、PAD图属于软件设计阶段使用的工具。

    129.数据流图(DFD)中的有向箭头(→)表示

    A)控制流

    B)数据流 

    C)输入流 

    D)输出流

    B【解析】数据流图中的主要图形元素与说明如下:

     

    加工(转换):输入数据经加工变换产生输出。

     

    数据流:沿箭头方向传送数据的通道,一般在旁边标注数据流名。

     

    存储文件:表示处理过程中存放各种数据的文件。

     

    数据的原点和终点:表示系统和环境的接口,属系统之外的实体。

    130.下列数据流图(DFD)构造规则中正确的是

    A)子图的输入输出数据流与父图中相关加工的输入输出数据流必须一致

    B)“数据存储间应有数据流

    C)“数据流可不带有数据流名 

    D)父图子图是指任意上下层的两个数据流图

    A【解析】数据流图应遵循以下构造规则和注意事项:

    ①对加工处理建立唯一、层次性的编号,且每个加工处理通常要求既有输入又有输出。

    ②数据存储之间不应有数据流。

    ③数据流图的一致性。即输入输出、读写的对应。

    ④父图、子图关系与平衡规则。相邻两层DFD之间具有父子关系,子图代表了父图中某个加式的详细描述,父图表示了子图间的接口。子图个数不大于父图中的处理个数。所有子图的输入输出数据流和父图中相应处理的输入输出数据流必须一致。

    131.软件设计一般划分为两个阶段,两个阶段依次是

    A)数据设计和接口设计

    B)算法设计和数据设计

    C)界面设计和结构设计

    D)总体设计(概要设计)和详细设计

    D【解析】从工程管理角度来看,软件设计分两步完成:概要设计和详细设计。

    从技术观点来看,软件设计包括软件结构设计、数据设计、接口设计和过程设计。

    132.对软件设计中应遵循的准则描述正确的是

    A)高耦合低内聚

    B)高内聚低耦合

    C)模块独立性仅与内聚度相关

    D)内聚与耦合无关

    B【解析】软件设计应遵循的准则有抽象、逐步求精和模块化、信息隐蔽和局部化、模块独立性(高内聚低耦合)。

    133.下面描述错误的是

    A)模块的独立性与模块的信息隐蔽和局部化无关

    B)内聚性和耦合性是模块独立程度的定性度量标准

    C)一个模块的内聚性越高则该模块的独立性越强

    D)一个模块的耦合性越高则该模块的独立性越弱

    A【解析】模块独立性的概念是抽象、模块化、信息隐蔽和局部化的直接结果。

    模块的独立性程度是评价设计好坏的重要程度标准,有两个定性标准度量,即模块间的耦合性和模块内的内聚性。                                                       

    耦合性是模块间互相连接的紧密程度的度量。一个模块的耦合性越高则该模块的独立性越弱。内聚性是指一个模块内部各个元素间彼此结合的紧密程度。一个模块的内聚性越高则该模块的独立性越强。好的软件设计,应尽量做到高内聚、低耦合。

    134.软件系统总体结构图的作用是

    A)描述软件系统结构的图形工具

    B)描述软件系统的控制流 

    C)描述软件系统的数据流 

    D)描述软件系统的数据结构

    A【解析】结构图是描述软件系统结构的图形工具,描述了软件系统的层次和分块结构关系,它反映了整个系统的功能实现以及模块与模块之间的联系与通信,是未来程序中的控制层次体系。

    135.对软件系统总体结构图,下面描述中错误的是

    A)深度等于控制的层数

    B)扇入是一个模块直接调用的其他模块数

    C)扇出是一个模块直接调用的其他模块数

    D)原子模块一定是结构图中位于叶子节点的模块

    B【解析】与结构图有关的术语如下:

    深度:表示控制的层数。

    上级模块、从属模块:上、下两层模块a和b,且有a调用b,则a是上级模块,b是从属模块。

    宽度:整体控制跨度(最大模块数的层)的表示。

    扇入:调用一个给定模块的模块个数。

    扇出:由一个模块直接调用的其他模块数。

    原子模块:树中位于叶子结点的模块。

    136.某系统总体结构如下图所示

    该系统结构图是

    A)层次结构

    B)网状结构   

    C)分支结构  

    D)循环结构

    A【解析】软件设计中使用结构图描述软件系统的层次和分块结构关系,故结构图也称为层次结构图。

    137.某系统结构图如下图所示

     

     

    该系统结构图的深度是

    A)1

    B)2

    C)3

    D)4

    D【解析】深度表示控制的层数。本题中,“某系统”为第1层,“功能1、功能2…功能n”为第二层,“功能2.1、功能2.2、功能2.3、功能n.1、功能n.2”为第3层,“功能2.2.1、功能2.2.2”为第4层,共4层,故深度为4。

    138.某系统总体结构如下图所示

     

    该系统结构图的宽度是

    A)2

    B)3

    C)4

    D)5

    D【解析】宽度指整体控制跨度(横向最大模块数)的表示。本题中第1层有1个模块,第二层有3个模块,第3层有5个模块,第4层有2个模块,故宽度为5。

    139.某系统结构图如下图所示(图中n≥5)

     

     

    该系统结构图的宽度是

    A)n

    B)3

    C)2

    D)1

    A【解析】宽度指整体控制跨度(横向最大模块数)的表示。本题中第1层有1个模块,第二层有n个模块(注意n≥5),第3层有5个模块,故宽度为n。

    140.某系统结构图如下图所示:

     

     

    该系统结构图的最大扇入数是

    A)0

    B)1

    C)2

    D)3

    C【解析】扇入是指调用一个给定模块的模块个数。本题中,模块“功能3.1”被“功能2.3”和“功能3”2个上级模块调用,其余模块都是被一个上级模块调用,故最大扇入数是2。

    141.某系统结构图如下图所示。该系统结构图的最大扇入数是

     

     

    A)4

    B)3

    C)2

    D)1

    B【解析】扇入是指调用一个给定模块的模块个数。本题中,模块“功能n.1”被“功能1”、“功能2”和“功能n”3个上级模块调用,故最大扇入数是3。本题需要注意的是,第二层中有省略号,表示第二层有n个模块,但只有3个模块调用“功能n.1”。

    142.某系统结构图如下图所示,该系统结构图的最大扇入数是

     

     

    A)1

    B)2

    C)3

    D)n

    D【解析】扇入是指调用一个给定模块的模块个数。本题中需要注意的是两个省略号的位置,第一个省略号表示第二层有n个模块,第二个省略号表示模块“功能n.1”被第二层的n个模块调用,故最大扇入数是n。

    143.某系统总体结构如下图所示

     

    该系统结构图的最大扇出数是

    A)2

    B)5

    C)3

    D)1

    C【解析】扇出指一个模块直接调用的其他模块数。本题中,模块“某系统”调用“功能1”“功能2”“功能3”3个模块,扇出数为3;模块“功能2”调用“功能2.1”“功能2.2”“功能2.3”3个模块,扇出数为3;其余模块调用少于3个模块,故最大扇出数为3。

    144.某系统结构图如下图所示(n≥5)

     

     

    该系统结构图的最大扇出数是

    A)3

    B)n

    C)2

    D)n+1

    B【解析】扇出指一个模块直接调用的其他模块数。本题中第二层有n(n≥5)个模块,模块“某系统”直接调用这n个模块,故最大扇出数是n。

    145.某系统总体结构如下图所示

     

    该系统结构图的最大扇出数、最大扇入数的总和是

    A)4

    B)5

    C)7

    D)8

    B【解析】本题中最大扇出数是3(模块“某系统”调用“功能1”“功能2”“功能3”3个模块),最大扇入数是2(模块“功能2.2.2被“功能2.2”“功能2.3”2个模块调用),故二者总和是5。

    146.下面属于软件设计阶段产生的文档是

    A)详细设计规格说明书

    B)数据流程图和数据字典

    C)软件确认测试计划

    D)软件需求规格说明书

    A【解析】软件设计阶段产生的文档有概要设计说明书、详细设计说明书和测试计划初稿;数据流程图、数据字典和需求规格说明书是需求分析阶段产生的;软件确认测试计划属于软件测试阶段的文档。

    147.下面不能作为软件设计工具的是

    A)PAD

    B)程序流程图

    C)数据流程图(DFD)

    D)总体结构图

    C【解析】软件设计可以使用的工具有总体结构图、程序流程图、N-S图、PAD图、PDL数据流程图(DFD)是需求分析使用的工具。

    148.软件测试的目的是

    A)发现程序中的错误

    B)发现并改正程序中的错误

    C)执行测试用例

    D)诊断和改正程序中的错误

    A【解析】软件测试是为了发现错误而执行程序的过程,只发现错误而不改正错误。

    149.下面对软件测试描述错误的是

    A)严格执行测试计划,排除测试的随意性

    B)随机地选取测试数据

    C)软件测试的目的是发现错误

    D)软件测试是保证软件质量的重要手段

    B【解析】软件测试的准则如下:

    ①所有测试都应追溯到需求。

    ②严格执行测试计划,排除测试的随意性。

    ③充分注意测试中的群集现象。

    ④程序员应避免检查自己的程序。

    ⑤穷举测试不可能。

    ⑥妥善保存测试计划、测试用例、出错统计和最终分析报告,为维护提供方便。

    150.软件测试用例包括

    A)被测程序和测试规程

    B)测试计划和测试数据

    C)输入数据和预期输出结果

    D)输入数据和输出数据

    C【解析】测试用例(Test Case)是为测试设计的数据,由测试输入数据和与之对应的预期输出结构两部分组成。测试用例的格式为:

    [(输入值集),(输出值集)]

    151.使用白盒测试方法时,设计测试用例应根据

    A)程序的内部逻辑

    B)程序的复杂结构

    C)程序的功能

    D)使用说明书

    A【解析】白盒测试又称为结构测试或逻辑驱动测试,它允许测试人员利用程序内部的逻辑结构及有关信息来设计或选择测试用例,对程序所有的逻辑路径进行测试。

    152.下面属于白盒测试方法的是

    A)等价类划分法

    B)判定-条件覆盖

    C)因果图法

    D)错误推测法(猜错法)

    B【解析】白盒测试法主要有逻辑覆盖、基本路径测试等。其中,逻辑覆盖又包括语句覆盖、路径覆盖、判定覆盖、条件覆盖、判断-条件覆盖

    153.在黑盒测试方法中,设计测试用例的根据是

    A)数据结构

    B)模块间的逻辑关系

    C)程序调用规则

    D)软件要完成的功能

    D【解析】黑盒测试方法也称功能测试或数据驱动测试。黑盒测试是对软件已经实现的功能是否满足需求进行测试和验证。它完全不考虑程序内部的逻辑结构和内部特征,只依据程序的需求和功能规格说明,检查程序的功能是否符合它的功能要求。

    154.下面属于黑盒测试方法的是

    A)边界值分析法

    B)路径测试

    C)条件覆盖

    D)语句覆盖

    A【解析】黑盒测试方法主要有等价类划分法、边界值分析法、错误推测法和因果图等。

    155.通常软件测试实施的步骤是

    A)集成测试、确认测试、系统测试

    B)单元测试、集成测试、确认测试

    C)确认测试、集成测试、单元测试

    D)单元测试、集成测试、回归测试

    B【解析】软件测试的实施过程主要有4个步骤:单元测试、集成测试、确认测试(验收测试)和系统测试。

    156.单元测试主要涉及的文档是

    A)编码和详细设计说明书

    B)确认测试计划

    C)需求规格说明书

    D)总体设计说明书

    A【解析】单元测试是对软件设计的最小单位——模块(程序单元)进行正确性检验的测试。单元测试的依据是详细设计说明书和源程序(编码);集成测试的依据是概要设计说明书;确认测试的依据是需求规格说明书。

    157.软件集成测试不采用

    A)一次性组装

    B)自顶向下增量组装 

    C)自底向上增量组装

    D)迭代式组装

    D【解析】集成测试是测试和组装软件的过程。集成测试时将模块组装成程序通常采用两种方式:非增量方式组装和增量方式组装。非增量方式也称为一次性组装方式。增量方式包括自顶向下、自底向上、自顶向下与自底向上相结合的混合增量方法。

    158.程序调试的任务是

    A)发现并改正程序中的错误

    B)诊断和改正程序中的错误

    C)发现程序中的错误

    D)设计和运行测试用例

    B【解析】程序调试的任务是诊断和改正程序中的错误;而软件测试是尽可能多的发现软件中的错误。软件测试贯穿整个软件生命周期,程序调试主要在开发阶段。

    159.数据库(DB)、数据库系统(DBS)和数据库管理系统(DBMS)之间的关系是

    A)DBS就是DB,也就是DBMS

    B)DBS包括DBDBMS

    C)DB包括DBSDBMS

    D)DBMS包括DBDBS

    B【解析】数据库DB)是存放数据的仓库;数据库管理系统DBMS)是用来管理数据及数据库的系统;数据库系统DBS)是由数据库、数据库管理系统、数据库管理员、硬件等在一起的总称。因此DBS包括DB和DBMS。

    160.数据库系统中,存储在计算机内有结构的数据集合称为

    A)数据库

    B)数据模型

    C)数据库管理系统

    D)数据结构

    A【解析】数据库是指长期存储在计算机内的、有组织的、可共享的数据集合。

    161.下列叙述中正确的是

    A)数据库的数据项之间无联系

    B)数据库中任意两个表之间一定不存在联系

    C)数据库的数据项之间存在联系

    D)数据库的数据项之间以及两个表之间都不存在联系

    C【解析】数据库的数据项之间以及表之间都存在联系。

    162.能够减少相同数据重复存储的是

    A)记录

    B)字段

    C)文件

    D)数据库

    D【解析】数据库表的一行称为一个记录,一列称一个字段。文件管理阶段不能保证相同数据重复存储。在数据库系统阶段使用数据库管理数据,可大大减少相同数据重复存储。

    163.数据库管理系统是

    A)一种操作系统在

    B)操作系统的一部分

    C)一种编译程序

    D)操作系统支持下的系统软件

    D【解析】数据库管理系统是数据库系统的核心,它位于用户和操作系统之间,从软件分类的角度来说,属于系统软件。

    164.数据库管理系统的基本功能不包括

    A)数据库定义

    B)数据库和网络中其他系统的通信

    C)数据库的建立和维护

    D)数据库访问 

    B【解析】数据库管理系统的功能包括数据模式定义、数据存取的物理构建、数据操纵、数据完整性安全性的定义与检查、数据库的并发控制与故障恢复、数据的服务。

    165.数据库系统中完成查询操作使用的语言是

    A)数据操纵语言

    B)数据定义语言

    C)数据控制语言

    D)数据并发语言

    A【解析】数据库管理系统提供了相应的数据语言:

    数据定义语言(DDL):该语言负责数据的模式定义与数据的物理存取构建。

    数据操纵语言(DML):该语言负责数据的操纵,包括查询与增、删、改等操作。

    数据控制语言(DCL):该语言负责数据完整性、安全性的定义与检查以及并发控制、故障恢复等功能。

    166.在数据库管理技术发展的三个阶段中,没有专门的软件对数据进行管理的是

    A)文件系统阶段

    B)人工管理阶段

    C)文件系统阶段和数据库阶段

    D)人工管理阶段和文件系统阶段

    B【解析】数据库管理技术的三个阶段是人工管理阶段、文件系统阶段和数据库系统阶段。人工管理阶段没有专门的软件对数据进行管理。

    167.关于数据库管理阶段的特点,下列说法中错误的是

    A)数据独立性差

    B)数据的共享性高,冗余度低,易扩充

    C)数据真正实现了结构化

    D)数据由DBMS统一管理和控制

    A【解析】数据库管理阶段具有高度的物理独立性和一定的逻辑独立性,是数据管理三级阶段中对立性最高的阶段。

    168.按照传统的数据模型分类,数据库系统可分为

    A)大型、中型和小型

    B)数据、图形和多媒体

    C)西文、中文和兼容

    D)层次、网状和关系

    D【解析】数据库系统已经发展了三个阶段:第一代的网状、层次型数据库系统,第二代的关系型数据库系统,第三代的面向对象的数据库系统。

    169.下列叙述中正确的是

    A)数据库系统避免了一切冗余

    B)数据库系统减少了数据冗余

    C)数据库系统中数据的一致性是指数据类型一致

    D)数据库系统比文件系统能管理更多的数据

    B【解析】数据库系统共享性大,冗余度小,但只是减少了冗余,并不是避免一切冗余。数据的一致性是指在系统中同一数据在不同位置的出现应保持相同的值,而不是数据类型的一致。数据库系统比文件系统有更强的管理控制能力,而不是管理更多的数据。

    170.数据库系统的数据独立性是指

    A)不会因为存储策略的变化而影响存储结构

    B)不会因为数据的变化而影响应用程序

    C)不会因为系统数据存储结构与数据逻辑结构的变化而影响应用程序

    D)不会因为某些存储结构的变化而影响其他的存储结构

    C【解析】数据库系统的数据独立性,是指数据库中数据独立于应用程序且不依赖于应用程序,即数据的逻辑结构、存储结构与存取方式的改变不会影响应用程序。数据独立性一般分为物理独立性和逻辑独立性两级。

    171.在关系数据库中,描述全局数据逻辑结构的是

    A)概念模式

    B)用户模式

    C)内模式

    D)物理模式

    A【解析】数据库系统在其内部分为三级模式及两级映射,三级模式即概念模式、内模式和外模式。

    概念模式是数据库系统中全局数据逻辑结构的描述,是全体用户公共数据视图。

    外模式也称子模式或者用户模式,是用户的数据视图,也就是用户所能够看见和使用的局部数据的逻辑结构和特征的描述,是与某一应用有关的数据的逻辑表示。

    内模式又称物理模式,是数据物理结构和存储方式的描述,是数据在数据库内部的表示方式。

    172.数据库中对概念模式内容进行说明的语言是

    A)数据控制语言

    B)数据操纵语言

    C)数据定义语言

    D)数据并发语言

    C【解析】概念模式主要描述数据的概念记录类型以及它们间的关系,它还包括一些数据间的语义约束,对它的描述可用DDL语言(数据定义语言)定义。

    173.将数据库的结构划分成多个层次,是为了提高数据库的

    A)管理规范性

    B)数据处理并发性

    C)逻辑独立性和物理独立性

    D)数据共享

    C【解析】数据库系统通常采用三级模式结构并且提供两级映射功能,其中的外模式/模式映射保证了数据库系统具有较高的逻辑独立性,而模式/内模式映射保证了数据库系统具有较高的物理独立性。

    174.在数据库的三级模式中,外模式(用户模式或子模式)有

    A)3

    B)2

    C)1

    D)任意多个

    D【解析】一个数据库可以有多个外模式(因为用户可有多个),但概念模式和内模式只能有一个。

    175.数据模型的三个要素是

    A)外模式、概念模式、内模式

    B)实体完整性、参照完整性、用户自定义完整性

    C)数据增加、数据修改、数据查询

    D)数据结构、数据操作、数据约束

    D【解析】数据模型是数据特征的抽象,所描述的内容有三个部分:数据结构、数据操作、数据约束。

    数据结构主要描述数据的类型、内容、性质以及数据间的联系等。

    数据操作主要描述在相应数据结构上的操作类型与操作方式。

    数据约束主要描述数据结构内数据间的语法、语义联系,它们之间的制约与依存关系,以及数据动态变化的规则,以保证数据的正确、有效与相容。

    176.在数据库系统中,数据模型包括概念模型、逻辑模型和

    A)物理模型

    B)空间模型

    C)时间模型

    D)谓词模型

    A【解析】数据模型按照不同的应用层次分为3种类型:概念数据模型、逻辑数据模型、物理数据模型。

    概念数据模型简称概念模型,它是一种面向客观世界、面向用户的模型;它与具体的数据库管理系统无关,与具体的计算机平台无关。

    逻辑数据模型又称逻辑模型,它是一种面向数据库系统的模型,该模型着重于在数据库系统一级的实现。

    物理数据模型又称物理模型,它是一种面向计算机物理表示的模型,此模型给出了数据模型在计算机上物理结构的表示。

    177.下面模型中为概念模型的是

    A)关系模型 

    B)层次模型

    C)实体-联系模型

    D)网状模型 

    C【解析】较为有名的概念数据模型有实体联系模型(E-R模型)、面向对象模型及谓词模型;逻辑数据模型有层次模型、网状模型、关系模型和面向对象模型。

    178.建立表示学生选修课程活动的实体联系模型,其中的两个实体分别是

    A)学生和学号

    B)课程和课程号

    C)课程和成绩

    D)学生和课程

    D【解析】实体是概念世界中的基本单位,是客观存在并可以相互区别的事物。要建立表示学生选修课程活动的实体联系模型,能互相区别并可以联系起来的实体是学生和课程。

    179.每所学校都有一名校长,而每个校长只在一所学校任职,则实体学校和实体校长之间的联系是

    A)一对一

    B)一对多

    C)多对一

    D)多对多

    A【解析】每所学校只有一名校长,每个校长只在一所学校任职,则实体学校和实体校长之间是一对一的联系。

    180.在学校每间宿舍住1到6名学生,每个学生只在一间宿舍居住,则实体宿舍与实体学生间的联系是

    A)一对一

    B)一对多

    C)多对一

    D)多对多

    B【解析】一间宿舍可以住多名学生,一个学生只能在一个宿舍,则实体宿舍与实体学生间的联系是一对多。宿舍是一的一方,学生是多的一方。

    181.每个学校有一名校长,且不同学校的校长可以是同一人,则实体学校和实体校长间的联系是

    A)一对一

    B)多对多

    C)多对一

    D)一对多

    C【解析】由于每个学校只对应一个校长,而一个校长可以对应多个学校,所以学校和校长之间是多对一关系。学校是多的一方,校长是一的一方。

    182.在学校里,教师可以讲授不同的课程,同一课程也可由不同教师讲授,则实体教师与实体课程间的联系是

    A)一对多

    B)一对一

    C)多对一

    D)多对多

    D【解析】一个教师可以讲授不同的课程,同一课程也可由不同教师讲授,则实体教师与实体课程间的联系是多对多。

    183.若实体A和B是一对一的联系,实体B和C是多对一的联系,则实体A和C的联系是

    A)一对一

    B)多对一

    C)多对多

    D)一对多

    B【解析】实体之间的联系具有传递性,实体A和B是一对一的联系,实体B和C是多对一的联系,明显实体A和C为多对一的联系。

    184.E-R图中用来表示实体的图形是

    A)菱形

    B)三角形

    C)矩形

    D)椭圆形

    C【解析】在E-R图中实体集用矩形表示,矩形框内写实体名;属性用椭圆表示,并用无向边将其与相应的“实体”或“联系”连接起来;联系用菱形表示,在菱形框内写联系名,并用无向边将其与有关实体连接起来,在无向边旁标上联系的类型(1:1、1:n或n:n)。

    185.用树型结构表示实体之间联系的模型是

    A)层次模型

    B)关系模型

    C)网状模型

    D)运算模型

    A【解析】层次模型的基本结构是树型结构,是一对多的;网状模型类似于图的结构,是多对多的。

    186.关系数据模型的三个组成部分中不包括

    A)关系的数据操纵

    B)关系的并发控制

    C)关系的数据结构

    D)关系的完整性约束

    B【解析】关系数据模型的三个组成部分:关系的数据结构(用二维表表示),关系操纵(查询、删除、插入、修改),关系的数据约束(实体完整性约束、参照完整性约束、用户定义的完整性约束)。

    187.在关系数据库设计中,关系模式是用来记录用户数据的

    A)实体

    B)视图

    C)属性

    D)二维表

    D【解析】关系模式采用二维表来表示关系,简称表。

    188.下面选项中不是关系数据库基本特征的是

    A)不同的列应有不同的列名

    B)不同的列应有不同的数据类型

    C)与行的次序无关

    D)与列的次序无关

    B【解析】关系数据库中的二维表一般满足7个性质:

    ①元组(行)个数是有限的——元组个数有限性。

    ②元组(行)均不相同——元组的唯一性。

    ③元组(行)的次序可以任意交换——元组的次序无关性。

    ④元组(行)的分量是不可分割的基本特征——元组分量的原子性。

    ⑤属性(列)名各不相同——属性名唯一性。

    ⑥属性(列)与次序无关,可以任意交换——属性的次序无关性。

    ⑦属性(列)的分量具有与该属性相同的值域——分量值域的统一性。

    189.下列关于关系模型中键(码)的描述中正确的是

    A)至多由一个属性组成

    B)由一个或多个属性组成,其值能够惟一标识关系中一个元组

    C)可以由关系中任意个属性组成

    D)关系中可以不存在键

    B【解析】键由一个或多个属性组成,其值能够惟一标识关系中一个元组(表中的一行)。

    190.在关系表中,属性值必须是另一个表主键的有效值或空值,这样的属性是

    A)主键

    B)候选键

    C)外键

    D)次键

    C【解析】一个属性(即一列),在某张表中不是主键(主码),但在其他表中是主键(主码),则它是第一张表的外键(外码)。

    191.下列叙述中正确的是

    A)关系模式的候选关键字只能有1

    B)关系模式的候选关键字可以有1个或多个

    C)关系模式可以没有候选关键字

    D)关系模式必须有2个以上的候选关键字

    B【解析】在关系模式中凡能唯一标识元组的最小属性集称为该关系的键或码。关系模式中可能有若干个键,它们称为该表的候选码或候选键。关系模式中不能没有候选键。

    192.学生关系模式中有D(D#,Dn,Dl,DAddr)(其属性分别为系编号、系名称、系主任和系地址)和S(S#,Sn,SG,Date,Maj,D#)(其属性分别为学号、姓名、性别、入学日期、专业和系编号)两个关系,关系S的主键(码)是S#,关系S的外键(码)是

    A)Dl

    B)Maj

    C)D#

    D)Dn  

    C【解析】D#在关系D中为主键,但在关系S中不是主键,因此D#是关系S的外键(码)。

    193.学校的数据库中有表示系和学生的关系:系(系编号,系名称,系主任,电话,地点),学生(学号,姓名,性别,入学日期,专业,系编号),则关系学生中的主键和外键分别是

    A)学号,无

    B)学号,专业

    C)学号,姓名

    D)学号,系编号

    D【解析】在“系”表中,“系编号”为主键;在“学生”表中,“学号”是主键,“系编号”不是主键,则“系编号”是表“学生”的外键。

    194.图书馆数据库系统中有下列模式:

    (书号, 类别, 书名,出版社,年份,作者,价格,总藏书量,现有库存) 

    借书卡(卡号,姓名,单位,类别)

    借书记录 (卡号,书号,借期,还期)

    其中关系书和关系借书卡的主键分别为书号和卡号,关系借书记录的主键为

    A)卡号,书号

    B)书号,借期

    C)卡号,书号,借期

    D)卡号,借期

    A【解析】在关系借书记录对应的二维表中,想要唯一确定一行,需要卡号、书号。因此,关系借书记录的主键(卡号,书号)。

    195.关系的实体完整性要求关系中不能为空的属性是

    A)主键属性

    B)外键属性

    C)全部属性

    D)候选键属性

    A【解析】关系模型中可以有3类完整性约束:实体完整性约束、参照完整性约束和用户定义的完整性约束。实体完整性约束是指若属性M是关系的主键,则属性M中的属性值不能为空值。

    196.有两个关系R和T如下图所示:

     

     

    则由关系R得到关系T的运算是

    A)

    B)

    C)选择

    D)投影

    D【解析】从关系模式中指定若干属性组成新的关系称为投影。对关系R进行投影运算的结果记为πA(R),其中,A为R中的属性列。本题中关系T中的两列与关系R中的两列相同,故为投影运算。

    197.关系R经过运算σA=B∧C>4∧D>3(R)的结果为

     

     

    A) (a,a,2,4)

    B)(e,e,6,1)

    C) (c,c,11,4)

    D)(a,a,2,4)(e,e,6,1)

    C【解析】选择运算是在二维表中选出符合条件的行,形成新的关系的过程。设关系的逻辑条件为F,则关系R满足F的选择运算可写成σF(R)。本题中条件为 “A=B∧C>4∧D>3”(∧为并且的意思),只有(c,c,11,4)满足。

    198.大学生学籍管理系统中有关系模式 S(S#,Sn,Sg,Sd,Sa),其中属性S#、Sn、Sg、Sd、Sa分别是学生学号、姓名、性别、系别和年龄,关键字是S#。检索全部男生姓名的表达式为

    A)

     

    B)

     

    C)

     

    D)

     

    B【解析】检索全部男生是选择行,用σ操作;检索姓名是选列(投影)用π操作。先从表S中检索出性别是“男的”行σSg=‘男’(S),然后对结果进行投影,只取“姓名”列πSnSg=‘男’(S))。

    199.表示学生选修课程的关系模式是SC(S#,C#,G),其中S#为学号,C#为课程号,G为成绩,检索选修了课程号为2的课且成绩不及格的学生学号的表达式是

    A)  

     

    B)

     

    C)

     

    D)

     

    C【解析】按“课程号为2”(C#=2)和“成绩不及格”(G<60)的条件在SC表中做检索(σ操作,σC#=2∧G<60(SC)),两个条件是“且”的关系(∧)。因为最后结果只需要“学号”,所以在筛选后再做投影操作只取“学号”列πS# (σC#=2∧G<60(SC))。

    200.有三个关系R、S和T如下,

     

     

    则关系T由关系RS通过( )得到。

    A)

    B)

    C)选择

    D)

    A【解析】关系R与S经交运算后所得到的关系是由那些既在R内又在S内的有序组所组成,记为R∩S。本题中,关系T中的行既属于关系R又属于关系S,故为交运算。

    201.有三个关系R,S和T如下图所示:

     

     

    则由关系R和S得到关系T的运算是

    A)     B)投影         C)           D)选择

    C【解析】关系R与S经并运算后所得到的关系由属于R或属于S的元组构成,记R∪S。本题中,关系T中的行要么属于关系R,要么属于关系S,故为并运算。

    202.有三个关系R、S和T如下,

     

     

    则由关系R和关系S得到关系T的操作是

    A)选择

    B)

    C)

    D)

    B【解析】关系R和关系S经过差运算后得到的关系由属于关系R而且不属于关系S的元组构成,记为R-S。观察题干可知,关系T中的行属于关系R,但不属于关系S,故为差运算。

    203.有三个关系R,S和T如下图所示:

     

     

    则由关系R和S得到关系T的运算是

    A)     B)         C)投影          D)自然连接

    D【解析】自然连接要求两个关系中进行比较的是相同的属性,并且进行等值连接,在结果中还要把重复的属性列去掉。本题属于自然连接,隐含条件是R.A=S.A。

    204.由关系R1和R2得到关系R3的操作是


     

     

    A)笛卡尔积

    B)

    C)等值连接

    D)

    C【解析】关系R1和关系R2没有同名列,但关系R1中的B列与关系R2中的D列有相等值,因此属于等值连接。

    205.学生选课成绩表的关系模式是SC(S#,C#,G),其中S#为学号,C#为课程号,G为成绩,关系T=πS#,C#(SC)/C表示

     

     

    A)全部学生的学号

    B)选修了表C中全部课程的学生学号

    C)选修了课程C1C2的学生学号

    D)所选课程成绩及格的学生学号

    B【解析】πS#,C#(SC)表示从关系SC中取出S#、C#两列,得到的结果与关系C进行除运算,表示选修了表C中全部课程的学生学号。

    206.设有表示学生选课的关系学生S、课程C和选课SC:

    S(学号,姓名,年龄,性别,籍贯),

    C(课程号,课程名,教师,办公室),

    SC(学号,课程号,成绩)。

    则检索籍贯为上海的学生姓名、学号和选修的课程号的表达式是

    A)

     

    B)

     

    C)

     

    D)

     

    C【解析】检索籍贯为“上海”是选择行,用σ操作;检索姓名、学号和选修的课程号是选列(投影),用π操作。因此,表达式中必须同时既有σ也有π,且π的操纵要包含“姓名”“学号”“课程号”三列。另外,做上述σ操作和π操作的表应是S和SC进行自然连接的结果表,而不能仅对表S做上述操作,因为S表中没有“课程号”列。

    207.定义学生选修课程的关系模式如下:

    S (S#,Sn,Sd,Sa)(其属性分别为学号、姓名、所在系、年龄);

    C(C#,Cn,P#)(其属性分别为课程号、课程名、先选课);

    SC(S#,C#,G)(其属性分别学号、课程号和成绩)。

    检索选修了课程号为2且成绩不及格的学生的姓名的表达式是

    A)

     

    B)

     

    C)

     

    D)

     

    C【解析】学生的“姓名”要在表S中进行查找,按成绩查找课程号应在表SC中进行,因为“课程号”和“成绩”列同时存在于表SC中,故应对以上两个表进行连接操作。首先在表SC中选出“课程号为2且成绩不及格”的行σC#=2∧G<60(SC),但只要“学号”列πS#C#=2∧G<60(SC)),得到查询结果的一个小表。将这个小表与表S进行连接再从结果中只取“姓名”列πSnS#C#=2∧G<60(SC))⋈S)。

    208.现有表示患者和医疗的关系如下:P(P#,Pn,Pg,By),其中P#为患者编号,Pn为患者姓名,Pg为性别,By为出生日期, Tr(P#,D#,Date,Rt),其中D#为医生编号,Date为就诊日期,Rt为诊断结果。检索在1号医生处就诊的男性病人姓名的表达式是

    A)

     

    B)

     

    C)

     

    D)

     

    B【解析】检索病人姓名需要涉及P表的Pn列,而医生编号需要从Tr表的D#处获得,所以必须将P表和Tr表进行连接后再进行操作。在连接操作之前,先从Tr表中筛选出D#=1的行(σ操作,σD#=1(Tr)),并仅筛选出P#π操作,πP#D#=1(Tr))),得到筛选结果的一个小表;再从P表中筛选出性别为“男”(Pg=’男’)的行(σ操作,σPg=(Tr)),得到第二张小表。将两个小表进行连接(πP#D#=1(Tr))⋈σPg=(Tr)),连接后还要从连接结果中只保留“姓名”Pn列,故再做一个π操作(πPnπP#D#=1(Tr))⋈σPg=(Tr)))。

    209.定义学生选修课程的关系模式如下:

    S (S#,Sn,Sd, Sa)(其属性分别为学号、姓名、所在系、年龄);

    C(C#,Cn,P#)(其属性分别为课程号、课程名、先选课);

    SC(S#,C#,G)(其属性分别学号、课号和成绩)。

    检索选修课程名为“操作系统”的成绩在90分以上(含90分)的学生姓名的表达式是

    A)

     

    B)

     

    C)

     

    D)

     

    A【解析】课程名“操作系统”需要在C表中进行查找,成绩在“90分以上(含90分)”需要在SC表中查找,“学生姓名”需要在S表中查找,所以必须对上述三个表进行连接后再进行操作。具体操作是:先从C表中选出课程名是“操作系统”的行σCn=操作系统(C),但是只要“课程”列πC# (σCn=操作系统(C)),得到筛选结果的一个小表;在SC表中找出“90分以上(含90分)”的行σG>=90(SC),得到第二个小表;两个小表进行连接操作并从结果中取“学号”列πS#C# (σCn=操作系统(C)) ⋈σG>=90(SC));这样得到的结果再与S表连接并从结果中只取“姓名”列πSnS#C#Cn=操作系统(C))⋈σG>=90(SC))⋈S)。

    210.在关系数据库设计中,关系模式设计属于

    A)物理设计

    B)需求分析

    C)概念设计

    D)逻辑设计

    D【解析】关系数据库设计有需求分析、概念设计、逻辑设计、物理设计、编码、测试、运行、进一步修改等几个阶段。在需求分析阶段形成需求说明书,概念设计阶段形成概念数据模型(E-R模型,作为进一步设计数据库的依据),逻辑设计阶段形成逻辑数据模型(从E-R图向关系模式转换、关系视图设计、模式规范化),物理设计阶段形成数据库内部模型(此时涉及具体软件硬件环境)。

    211.在进行逻辑设计时,将E-R图中实体之间联系转换为关系数据库的

    A)元组

    B)关系

    C)属性

    D)属性的值域

    B【解析】E-R模型与关系模型间的转换关系如下表所示。

    E-R模型

    关系模型

    属性

    属性

    实体

    元组

    实体集

    关系

    联系

    关系

     

    212.关系数据库规范化的目的是为了解决关系数据库中的

    A)数据操作复杂的问题

    B)查询速度低的问题

    C)插入、删除异常及数据冗余问题

    D)数据安全性和完整性保障的问题

    C【解析】关系模式进行规范化的目的是使关系结构更加合理,消除存储异常,使数据冗余尽量小,便于插入、删除和更新等操作。

    213.关系模型中的关系模式至少应是  

    A)1NF

    B)2NF

    C)3NF

    D)BCNF

    A【解析】关系数据库中的关系是要满足一定要求的,满足不同程度要求的为不同的范式。满足最低要求的叫第一范式,简称1NF。在满足第一范式的基础上,进一步满足更多要求规范则是第二范式。然后在满足第二范式的基础上,还可以再满足第三范式,以此类推。

    对于关系模式,若其中的每个属性都已不能再分为简单项,则它属于第一范式。

    若某个关系R为第一范式,并且R中每一个非主属性完全依赖于R的某个候选键,则称其为第二范式。第二范式消除了非主属性对主键的部分依赖。

    如果关系R是第二范式,并且每个非主属性都不传递依赖于R的候选键,则称R为第三范式。(传递依赖:在关系模式中,如果Y→X,X→A,且X不决定Y和A不属于X,那么Y→A是传递依赖。)

    比第三范式更高级的BCF范式,它要求所有属性都不传递依赖于关系的任何候选键。

    214.定义部门关系模式如下:


    部门(部门号,部门名,部门成员,部门总经理),
    使它不满足第一范式的属性是

    A)部门名

    B)部门成员

    C)部门总经理

    D)部门号

    B【解析】对于关系模式,若其中的每个属性都已不能再分为简单项,则它属于第一范式。本题中“部门成员”可进一步分解(成员编号、姓名等),因此不满足第一范式。

    215.定义学生选修课程的关系模式如下:

    SC(S#,Sn,C#,Cn,G)(其属性分别为学号、姓名、课程号、课程名、成绩)
    该关系的范式最高达到

    A)1NF

    B)2NF

    C)3NF

    D)BCNF

    A【解析】本题中关系SC的主键是(学号,课程号),但仅“学号”就能决定“”“姓名”,仅“课程号”就能决定“课程名”,因此不满足第二范式。

    216.定义学生、教师和课程的关系模式S (S#,Sn,Sd,Dc,Sa)(其属性分别为学号、姓名、所在系、所在系的系主任、年龄); C(C#,Cn,P#)(其属性分别为课程号、课程名、先修课);SC(S#,C#,G)(其属性分别为学号、课程号和成绩),则该关系为

    A)第一范式

    B)第二范式

    C)第三范式

    D)BCNF范式

    B【解析】本题中关系S中的“学号”列可决定“所在系”列,“所在系”列又可决定“所在系的系主任”,存在传递函数依赖,不满足第三范式。

    217.定义学生、教师和课程的关系模式:S (S#,Sn,Sd, Sa)(属性分别为学号、姓名、所在系、年龄);C(C#,Cn,P#)(属性分别为课程号、课程名、先修课);SC(S#,C#,G)(属性分别为学号、课程号和成绩)。则该关系为

    A)BCNF范式

    B)第一范式

    C)第二范式

    D)第三范式

    D【解析】本题每个关系中每个非主属性既不部分依赖于主键也不传递依赖于主键,满足第三范式。关系C的主键既可以是“课程号”,也可以是“课程名”,“课程号”和“课程名”也可相互决定,所以不满足BCF范式。

    218.某图书集团数据库中有关系模式R(书店编号,书籍编号,库存数量,部门编号,部门负责人),其中要求(1)每个书店的每种书籍只在该书店的一个部门销售;(2)每个书店的每个部门只有一个负责人;(3)每个书店的每种书籍只有一个库存数量。则关系模式R最高是

    A)1NF

    B)2NF

    C)3NF

    D)BCNF

    B【解析】由题可知关系模式R有三个函数依赖:

    (书店编号,书籍编号→部门编号

    (书店编号,部门编号)→负责人

    (书店编号,书籍编号→库存数量

    由此可知,(书店编号,书籍编号)可以唯一标识关系模式R中的每个元组,因此属于关系模式的主键。在此关系模式中,每个属性都是不可再分的,R属于1NF,且“书店编号”和“书籍编号”单独之一都不能决定其他非主属性,所以R属于2NF;但(书店编号,书籍编号)可以决定“部门编号”,“部门编号”又可决定“部门负责人”,存在传递依赖,所以不属于3NF,更不是BCNF。

    219.学生和课程的关系模式定义为:

    S (S#,Sn,Sd,Dc,Sa)(其属性分别为学号、姓名、所在系、所在系的系主任、年龄);

    C(C#,Cn,P#)(其属性分别为课程号、课程名、先选课);

    SC(S#,C#,G)(其属性分别学号、课程号和成绩)。

    关系中包含对主属性传递依赖的是

    A)S#→Sd

    B)S#→Sd,(S#,C#)→G

    C)S#→Sd,Sd→Dc 

    D)C#→P#,(S#,C#)→G

    C【解析】关系SC的主属性为(S#、C#),但在SC中S#(学号)单独就可以决定Sd(所在系),Sd(所在系)可决定Dc(所在系的系主任),故对主属性传递依赖的是S#→Sd,Sd→Dc。

    220.设有课程关系模式如下:

    R(C#,Cn,T,Ta)(其中C#为课程号,Cn为课程名,T为教师名,Ta为教师地址)并且假定不同课程号可以有相同的课程名,每个课程号下只有一位任课教师,但每位教师可以有多门课程。该关系模式可进一步规范化为

    A)R1(C#,Cn,T),R2(T,Ta) 

    B)R1(C#,Cn),R2(T,Ta)

    C)R1(C#,Cn,Ta),R2(T,Ta)

    D)R1(C#,T),R2(T,Ta)

    A【解析】本题的码为课程号,由于每门课程只有一位任课教师,课程号就可以决定教师名、教师地址。课程号可决定教师名,教师名又决定教师地址,这里有对主属性的传递依赖。可将该关系模式拆分为两个关系模式R1和R2,其中R1包含课程号、课程名、教师名,R2包含教师名、教师地址。其中R1的主码是课程号,R2的主码为教师名。这样两个表都不会出现对主属性的传递依赖。

    221.下列叙述中正确的是 )。

    A)算法的时间复杂度是指算法在执行过程中基本运算的次数

    B)算法的时间复杂度是指算法执行所需要的时间

    C)算法的时间复杂度是指算法执行的速度

    D)算法复杂度是指算法控制结构的复杂程度

    A【解析】算法的时间复杂度是指执行算法所需要的计算工作量,其计算工作量是用算法所执行的基本运算次数来度量的。

    222.下列叙述中正确的是 )。

    A)循环队列是队列的一种链式存储结构

    B)循环队列是队列的一种顺序存储结构

    C)循环队列中的队尾指针一定大于队头指针

    D)循环队列中的队尾指针一定小于队头指针

    B【解析】在实际应用中,队列的顺序存储结构一般采用循环队列的形式。当循环队列满或者为空时:队尾指针=队头指针。

    223.某完全二叉树有256个结点,则该二叉树的深度为 )。

    A)7

    B)8

    C)9

    D)10

    C【解析】根据完全二叉树的性质:具有n个结点的完全二叉树的深度为[log2n]+1。本题中完全二叉树共有256个结点,则深度为[log2256]+1=8+1=9。

    224.下列叙述中错误的是 )。

    A)线性结构也能采用链式存储结构

    B)线性结构一定能采用顺序存储结构

    C)有的非线性结构也能采用顺序存储结构

    D)非线性结构一定不能采用顺序存储结构

    D【解析】满二叉树与完全二叉树均为非线性结构,但可以按照层次进行顺序存储。

    225.需求分析的主要任务是 )。

    A)确定软件系统的功能

    B)确定软件开发方法

    C)确定软件开发工具

    D)确定软件开发人员 

    A【解析】需求分析是软件开发之前必须要做的准备工作之一。需求是指用户对目标软件系统在功能、行为、性能、设计约束等方面的期望。故需求分析的主要任务是确定软件系统的功能。

    226.一个模块直接调用的下层模块的数目称为模块的 )。 

    A)扇入数

    B)扇出数

    C)宽度

    D)作用域

    B【解析】扇入数指调用一个给定模块的模块个数。扇出数是指由一个模块直接调用的其他模块数,即一个模块直接调用的下层模块的数目。

    227.将数据和操作置于对象统一体中的实现方式是 )。

    A)隐藏

    B)抽象

    C)封装

    D)结合

    C【解析】对象具有封装性,从外面看只能看到对象的外部特性,对象的内部对外是封闭的。即封装实现了将数据和操作置于对象统一体中。

    228.采用表结构来表示数据及数据间联系的模型是 )。

    A)层次模型

    B)概念模型

    C)网状模型

    D)关系模型

    D【解析】关系模型采用二维表来表示,简称表。

    229.在供应关系中,实体供应商和实体零件之间的联系是 )。 

    A)多对多

    B)一对一

    C)多对一

    D)一对多

    A【解析】一家供应商可提供多种零件,一种零件也可被多家供应商提供。所以实体供应商和实体零件之间的联系是多对多。

    230.如果定义班级关系如下:

    班级(班级号,总人数,所属学院,班级学生)

    则使它不满足第一范式的属性是 )。

    A)班级号

    B)班级学生

    C)总人数

    D)所属学院

    B【解析】对于关系模式,若其中的每个属性都已不能再分为简单项,则它属于第一范式模式。题目中“班级”关系的“班级学生”属性,还可以进行再分,如学号、姓名、性别、出生日期等,因此不满足第一范式。

    231.下列叙述中正确的是 )。

    A)链表可以是线性结构也可以是非线性结构

    B)链表只能是非线性结构

    C)快速排序也适用于线性链表

    D)对分查找也适用于有序链表

    A【解析】线性表的链式存储结构称为线性链表,线性链表可以是线性结构也可以是非线性结构。快速排序和对分查找是适用于顺序存储的线性表。

    232.循环队列的存储空间为Q(1:50)。经过一系列正常的入队与退队操作后,front=rear=25。后又成功地将一个元素退队,此时队列中的元素个数为 )。

    A)24

    B)49

    C)26

    D)0

    B【解析】front=rear时可知队列要么为空要么队列满,题目又成功地将一个元素退队,说明之前队列为满(为空时队列中无元素),退出一个元素后队列中还有50-1=49个元素。

    233.设二叉树中有20个叶子结点,5个度为1的结点,则该二叉树中总的结点数为 )。

    A)46

    B)45

    C)44

    D)不可能有这样的二叉树

    C【解析】二叉树中只存在度为0、1、2的结点,根据在二叉树中度为0的结点(叶子结点)总比度为2的结点多一个,可知本题中度为2的结点有20-1=19个。故该二叉树中总的结点数为20+5+19=44个。

    234.设栈与队列初始状态为空。首先A,B,C,D,E依次入栈,再F,G,H,I,J依次入队;然后依次出队至队空,再依次出栈至栈空。则输出序列为 )。

    A)E,D,C,B,A,F,G,H,I,J

    B)E,D,C,B,A,J,I,H,G,F

    C)F,G,H,I,J,A,B,C,D,E,

    D)F,G,H,I,J,E,D,C,B,A

    D【解析】栈称为“后进先出”表或“先进后出”的线性表;队列称为“先进先出”或“后进后出”的线性表。F,G,H,I,J依次入队,则依次出队顺序为F,G,H,I,J;A,B,C,D,E依次入栈,则依次出栈顺序为E,D,C,B,A。故输出顺序为F,G,H,I,J,E,D,C,B,A。

    235.下面不属于软件工程三要素的是 )。

    A)环境

    B)工具

    C)过程

    D)方法

    A【解析】软件工程包含3个要素:方法、工具和过程。

    236.程序流程图是 )。

    A)总体设计阶段使用的表达工具

    B)详细设计阶段使用的表达工具

    C)编码阶段使用的表达工具

    D)测试阶段使用的表达工具

    B【解析】详细设计阶段常见的工具有程序流程图、N-S图、PAD图、HIPO图、判定表等。

    237.下面属于“对象”成份之一的是 )。

    A)封装   B)规则       C)属性       D)继承

    C【解析】面向对象方法中的对象由两部分组成:①数据,也称为属性,即对象所包含的信息,表示对象的状态;②方法,也称为操作,即对象所能执行的功能、所能具有的行为。

    238.数据库管理系统能实现对数据库中数据的查询、插入、修改和删除,这类功能称为 )。

    A)数据控制功能

    B)数据定义功能

    C)数据存储功能 

    D)数据操纵功能

    D【解析】数据定义功能:负责数据的模式定义与数据的物理存取构建。

    数据操纵功能:负责数据的操纵,包括查询与增、删、改等操作。

    数据控制功能:负责数据完整性、安全性的定义与检查以及并发控制、故障恢复等功能。

    239.实体电影和实体演员之间的联系是 )。

    A)一对一         B)多对多

    C)多对一         D)一对多

    B【解析】一部电影可由多名演员参演,一名演员可以参演多部电影,因此实体电影和实体演员之间的联系是多对多。

    240.定义学生的关系模式如下:

    S(S#,Sn,Sex,Age,D#,Da)(其属性分别为学号、姓名、性别、年龄、所属学院、院长)

    该关系的范式最高是 )。

    A)1NF      B)2NF       C)3NF         D)BCNF

    B【解析】关系数据库中的关系是要满足一定要求的,满足不同程度要求的为不同的范式。满足最低要求的叫第一范式,简称1NF。在满足第一范式的基础上,进一步满足更多要求规范则是第二范式。然后在满足第二范式的基础上,还可以再满足第三范式,以此类推。

    对于关系模式,若其中的每个属性都已不能再分为简单项,则它属于第一范式。

    若某个关系R为第一范式,并且R中每一个非主属性完全依赖于R的某个候选键,则称其为第二范式。第二范式消除了非主属性对主键的部分依赖。

    如果关系R是第二范式,并且每个非主属性都不传递依赖于R的候选键,则称R为第三范式。(传递依赖:在关系模式中,如果Y→X,X→A,且X不决定Y和A不属于X,那么Y→A是传递依赖。)

    本题中,关系S满足第一范式和第二范式,但是S#→D#,D#→Da,存在传递依赖,因此不满足第三范式。该关系的范式最高是2NF。

    241.下列叙述中正确的是 )。

    A)快速排序法适用于顺序存储的线性表

    B)快速排序适用于链式存储的线性表

    C)链式存储的线性表不可能排序

    D)堆排序适用于非线性结构

    A【解析】排序可以在不同的存储结构上实现,但快速排序法适用于顺序存储的线性表,不适用于链式存储的线性表。堆排序适用于线性结构,不适用于非线性结构。

    242.循环队列的存储空间为Q(1:50)。经过一系列正常的入队与退队操作后,front=rear=25。后又成功地将一个元素入队,此时队列中的元素个数为 )。 

    A)50   B)1         C)26         D)2

    答案:B

    【解析】front=rear=25时可知队列要么为空要么队列满,题目中又成功地将一个元素入队,说明之前队列为空(为满时队列中无法入队元素),为空的队列入队一个元素后队列中元素个数为1。

    243.树的度为3,且有9个度为3的结点,5个度为1的结点,但没有度为2的结点。则该树总的结点数为 )。

    A)32

    B)14

    C)33

    D)19

    C【解析】在树中,树中的节点数等于树中所有节点的度之和再加1。题干中树的度为3,有9个度为3的结点,5个度为1的结点,无度为2的结点,设有n个度为0的结点,则总结点数=9×3+5×1+0×2+n×0+1=33个。

    244.设栈与队列初始状态为空。首先A,B,C,D,E依次入栈,再F,G,H,I,J依次入队;然后依次出栈至栈空,再依次出队至队空。则输出序列为 )。

    A)F,G,H,I,J,A,B,C,D,E

    B)F,G,H,I,J,E,D,C,B,A

    C)E,D,C,B,A,J,I,H,G,F

    D)E,D,C,B,A,F,G,H,I,J

    D【解析】栈称为“后进先出”表或“先进后出”的线性表;队列称为“先进先出”或“后进后出”的线性表。A,B,C,D,E依次入栈,则依次出栈顺序为E,D,C,B,A;F,G,H,I,J依次入队,则依次出队顺序为F,G,H,I,J。故输出顺序为E,D,C,B,A,F,G,H,I,J。

    245.属于结构化程序设计原则的是 )。

    A)模块化

    B)可继承性

    C)可封装性 

    D)多态性

    A【解析】结构化程序设计方法的原则包括:自顶向下、逐步求精、模块化、限制使用goto语句。B、C、D三项属于面向对象方法的特点。

    246.确定软件项目是否进行开发的文档是 )。

    A)需求分析规格说明书

    B)可行性报告

    C)软件开发计划

    D)测试报告

    B【解析】可行性报告产生于软件定义阶段,用于确定软件项目是否进行开发。

    247.基本路径测试是属于 )。 

    A)黑盒测试方法且是静态测试

    B)黑盒测试方法且是动态测试

    C)白盒测试方法且是动态测试

    D)白盒测试方法且是静态测试

    C【解析】白盒测试法主要有逻辑覆盖、基本路径测试等。黑盒测试方法主要有等价类划分法、边界值分析法、错误推测法和因果图等。基本路径测试根据软件过程性描述中的控制流确定程序的环路复杂性度量,用此度量定义基本路径集合,并由此导出一组测试用例对每一条独立执行路径进行测试。因此基本路径测试属于动态测试。

    248.关系数据库中的键是指 )。

    A)关系的所有属性

    B)关系的名称

    C)关系的专用保留字 

    D)能唯一标识元组的属性或属性集合

    D【解析】在关系(二维表)中凡是能唯一标识元组的最小属性集称为该关系的键或者码。

    转载于:https://www.cnblogs.com/chengtou/p/8593809.html

    展开全文
  • (1)下列叙述中正确的是 A)所谓算法就是计算方法 B)程序可以作为算法的一种描述方法 C)算法设计只需考虑得到计算结果 D)算法设计可以忽略算法的运算时间 答案:B 【解析】算法是指对解题方案的准确而完整的描述...

    (1)下列叙述中正确的是

    A)所谓算法就是计算方法

    B)程序可以作为算法的一种描述方法

    C)算法设计只需考虑得到计算结果

    D)算法设计可以忽略算法的运算时间

    答案:B

    【解析】算法是指对解题方案的准确而完整的描述,算法不等于数学上的计算方法,也不等于程序,A选项错误。算法设计需要考虑可行性、确定性、有穷性与足够的情报,不能只考虑计算结果,C选项错误。算法设计有穷性是指操作步骤有限且能在有限时间内完成,如果一个算法执行耗费的时间太长,即使最终得出了正确结果,也是没有意义的,D选项错误。算法在实现时需要用具体的程序设计语言描述,所以程序可以作为算法的一种描述方法,B选项正确。

    (2)下列叙述中正确的是

    A)一个算法的空间复杂度大,则其时间复杂度也必定大

    B)一个算法的空间复杂度大,则其时间复杂度必定小

    C)一个算法的时间复杂度大,则其空间复杂度必定小

    D)算法的时间复杂度与空间复杂度没有直接关系

    答案:D

    【解析】算法的空间复杂度是指算法在执行过程中所需要的内存空间,算法的时间复杂度,是指执行算法所需要的计算工作量,两者之间并没有直接关系,答案为D。

    (3)下列叙述中错误的是

    A)数据结构中的数据元素不能是另一数据结构

    B)数据结构中的数据元素可以是另一数据结构

    C)空数据结构可以是线性结构也可以是非线性结构

    D)非空数据结构可以没有根结点

    【答案】A

    【解析】数据元素是一个含义很广泛的概念,它是数据的“基本单位”,在计算机中通常作为一个整体进行考虑和处理。数据元素可以是一个数据也可以是被抽象出的具有一定结构数据集合,所以数据结构中的数据元素可以是另一数据结构。

    满足有且只有一个根结点并且每一个结点最多有一个前件,也最多有一个后件的非空的数据结构认为是线性结构,不满足条件的结构为非线性结构。

    空数据结构可以是线性结构也可以是非线性结构。非空数据结构可以没有根结点,如非性线结构“图”就没有根结点。故选A选项

    (4)结构化程序设计的基本原则不包括(  )。

    A)多态性

    B)自顶向下

    C)模块化

    D)逐步求精

    答案:A

    【解析】结构化程序设计的思想包括:自顶向下、逐步求精、模块化、限制使用goto语句,所以选择A)。

    (5)结构化程序设计中,下面对goto语句使用描述正确的是

    A)禁止使用goto语句

    B)使用goto语句程序效率高

    C)应避免滥用goto语句

    D)以上说法均错误

    答案:C

    【解析】结构化程序设计中,要注意尽量避免goto语句的使用,故选C。

    (6)下列叙述中正确的是

    A)软件是程序、数据和文档

    B)软件是程序和数据

    C)软件是算法和数据结构

    D)软件是算法和程序

    答案:A

    【解析】计算机软件由两部分组成:一是机器可执行的程序和数据;二是机器不可执行的,与软件开发、运行、维护、使用等有关的文档。故选A选项

    (7) 软件生命周期是指(  )。

    A)软件产品从提出、实现、使用维护到停止使用退役的过程

    B)软件从需求分析、设计、实现到测试完成的过程

    C)软件的开发过程

    D)软件的运行维护过程

    答案:A

    【解析】通常,将软件产品从提出、实现、使用维护到停止使用退役的过程称为软件生命周期。也就是说,软件产品从考虑其概念开始,到该软件产品不能使用为止的整个时期都属于软件生命周期

    (8)下面能作为软件需求分析工具的是

    A)PAD图

    B)程序流程图

    C)甘特图

    D)数据流程图(DFD图)

    答案:D

    【解析】软件需求分析方法包括结构化分析方法和面向对象的分析方法两大类,前者常用工具为数据流图(DFD)、数据字典(DD)、判定表、判定树等。故D选项正确。

    (9)在数据库管理系统提供的数据语言中,负责数据的查询、增加、删除和修改等操作的是

    A)数据定义语言

    B)数据管理语言

    C)数据操纵语言

    D)数据控制语言

    答案:C

    【解析】数据库管理系统提供了相应的数据语言,它们是:数据定义语言,该语言负责数据的模式定义与数据的物理存取构建;数据操纵语言,该语言负责数据的操纵,包括查询与增、删、改等操作;数据控制语言,该语言负责数据完整性、安全性的定义与检查以及并发控制、故障恢复等功能。C选项正确。

    (10)在数据库系统中,考虑数据库实现的数据模型是

    A)概念数据模型

    B)逻辑数据模型

    C)物理数据模型

    D)关系数据模型

    答案:B

    【解析】数据模型按照不同的应用层次分为以下3种类型:概念数据模型,它是一种面向客观世界、面向用户的模型,它与具体的数据库管理系统和具体的计算机平台无关;逻辑数据模型,是面向数据库系统的模型,着重于在数据库系统一级的实现;物理数据模型,是面向计算机物理实现的模型,此模型给出了数据模型在计算机上物理结构的表示。B选项正确。

    (11)以下叙述中错误的是(  )。

    A) 使用三种基本结构构成的程序只能解决简单问题

    B) 结构化程序由顺序、分支、循环三种基本结构组成

    C) C语言是一种结构化程序设计语言

    D) 结构化程序设计提倡模块化的设计方法

    答案:A

    【解析】使用顺序,选择(分支),循环三种基本结构构成的程序可以解决所有问题,而不只是解决简单问题,所以A)错误。

    (12)以下选项中叙述正确的是

    A) 函数体必须由 { 开始

    B) C程序必须由main语句开始

    C) C程序中的注释可以嵌套

    D) C程序中的注释必须在一行完成

    答案:A

    【解析】函数体是函数首部下面的花括号内的部分,所以函数体必须由{开始,A选项正确。一个源程序文件可以包括预处理命令、全局声明、函数定义,程序总是从main函数开始执行的,不是main语句,B选项错误。C程序中的允许两种注释,以//开头的单行注释;以/开始,以/结束的块式注释,D选项错误。函数可以嵌套,注释不能嵌套,C选项错误。

    (13)以下叙述正确的是

    A) C编译程序把文件后缀为.c的源程序文件编译成文件后缀为.obj的二进制文件

    B) C编译程序把文件后缀为.c的源程序文件编译成文件后缀为.exe的可执行文件

    C) C编译程序把文件后缀为.obj的二进制文件编译成文件后缀为.exe的可执行文件

    D) 链接程序把文件后缀为.c的源程序文件链接成文件后缀为.exe的可执行文件

    答案:A

    【解析】C编译程序把文件后缀为.c的源程序文件编译成文件后缀为.obj的二进制文件,链接将一个或多个目标文件与程序用到的库文件连接起来,形成一个可以在操作系统直接运行的执行程序.exe,故排除B,C,D选项,答案选A选项。

    (14)按照C语言规定的用户标识符命名规则,不能出现在标识符中的是(  )。

    A) 大写字母

    B) 下划线

    C) 数字字符

    D) 连接符

    答案:D

    【解析】C语言中标识符由字母、下划线、数字组成,且开头必须是字母或下划线。所以D)选项中的连接符不合法。

    (15)下列定义变量的语句中错误的是

    A) int _int;

    B) double int_;

    C) char For;

    D) float US$;

    答案:D

    【解析】C语言规定,变量命名必须符合标识符的命名规则。D选项中包含了非法字符”$”,所以错误。标识符由字母、数字或下划线组成,且第一个字符必须是大小写英文字母或者下划线,而不能是数字。大写字符与小写字符被认为是两个不同的字符,所以For不是关键字for。

    (16)C语言中的标识符分为关键字、预定义标识符和用户标识符,以下叙述正确的是

    A) 关键字可用作用户标识符,但失去原有含义

    B) 预定义标识符可用作用户标识符,但失去原有含义

    C) 在标识符中大写字母和小写字母被认为是相同的字符

    D) 用户标识符可以由字母和数字任意顺序组成

    答案:B

    【解析】关键字不可用作C语言的标识符,所以A错误。在标识符中大写字母与小写字母作为不同字符处理,所以C错误。标识符由下划线、字母、数字组成,且必须以下划线和字母开始,所以D错误。

    (17)以下选项中合法的常量是

    A) 9 9 9

    B) 2.7e

    C) 0Xab

    D) 123E 0.2

    答案:C

    【解析】A选项中含有非法的空格,所以错误。C语言中十六进制常量以0x开头,所以C正确。实型常量中e的前后必须均有数据,且其后必须为整数,所以B和D错误。

    (17)有以下程序

    #include <stdio.h>

    main()

    { int k=33;

    printf(“%d,%o,%x\n”, k, k, k);

    }程序的运行结果是

    A) 33,41,21

    B) 33,33,33

    C) 41,33,21

    D) 33,21,41

    答案:A

    【解析】整型常量有3种表示方法,分别是十进制数表示法、八进制数表示法和十六进制数表示法。十进制整型常量没有前缀,输出格式控制符为%d;八进制整型常量以0作为前缀,输出格式控制符为%o;十六进制整型常量以0X或0x作为前缀,输出格式控制符为%x。整型33用八进制表示为41,十六进制表示为21,A选项正确。

    (18)以下选项中,合法的一组C语言数值常量是(  )。

    A) 12. 0Xa23 4.5e0

    B) 028 .5e-3 -0xf

    C) .177 4e1.5 0abc

    D) 0x8A 10,000 3.e5

    答案:A

    【解析】C语言中八进制整型常量的开头是数字0,十六进制整型常量的开头数字是0x。C语言中的实型常量有两种表示形式:小数形式,小数形式表示的实型常量必须要有小数点;指数形式,以”e”或”E”后跟一个整数来表示以10为底数的幂数,且规定字母e或E之前必须要有数字,且e或E后面的指数必须为整数。B)选项中 028错误,八进制中没有数字8。C)选项中4e1.5中e后面的指数不是整数。D)选项中数字“10,000”不能用逗号。

    (19)已知大写字母A的ASCII码是65,小写字母a的ASCII码是97。以下不能将变量c中的大写字母转换为对应小写字母的语句是()。

    A) c=(‘A’+c)%26-‘a’

    B) c=c+32

    C) c=c-‘A’+’a’

    D) c=(c-‘A’)%26 +’a’

    答案:A

    【解析】根据题意可知,小写字母比与之对应的大写字母的ASCII码大32。A选项中字符A加上c表示的大写字符再对字母个数26取余,本身这个表达式没有任何含义所以选择A选项。

    (20)若有定义:double a, b, c; 能正确给a,b,c输入数据的语句是()。

    A) scanf(” %lf %lf %lf” &a, &b, &c )

    B) scanf(” %f %f %f”,&a, &b, &c );

    C) scanf(” %lf %lf %lf”,a, b, c );

    D) scanf(” %lf %lf %lf”,&a, &b, &c );

    答案:D

    【解析】%lf,%le是针对double的,如果仅用%f,输入的数据可能不完全接收,数据的精度可能不足。%f主要针对float类型的变量的输入,因此选项B错误。根据题目格式可知A,C错误。故答案为D选项。

    (21)若有以下程序段

    double x=5.16894;
    
    printf(“%f\n”,  (int)(x*1000+0.5)/(double)1000  );
    

    则程序段的输出结果是

    A) 5.170000

    B) 5.175000

    C) 5.169000

    D) 5.168000

    答案:C

    【解析】%f的输出格式是以带小数点的数学形式输出浮点数。首先计算x*1000,结果为5168.94然后+0.5,结果为5169.44,然后进行强制类型转换,转换成整型为5169,然后除以双精度数据1000,结果也为双精度数据5.169,输出时按照%f的格式输出,所以输出结果为5.169000。

    (22)若变量已正确定义,在if (W) printf(“%d\n” ,k ); 中,以下不可替代W的是(  )。

    A) a<>b+c

    B) ch=getchar()

    C) a==b+c

    D) a++

    答案:A

    【解析】选项A)是非法的表达式,C语言中没有<>运算符。

    (23) #include <stdio.h>

    main()

    { int x, y, z;

    x=y=1;

    z=x++,y++,++y;

    printf(“%d,%d,%d\n”,x,y,z);

    }

    程序运行后的输出结果是(  )。

    A) 2,3,3

    B) 2,3,2

    C) 2,3,1

    D) 2,2,1

    答案:C

    【解析】z=x++,y++,++y;因为赋值运算符的优先级高于逗号运算符的优先级,所以可以将上式表示成(z=x++),(y++),(++y)。然后从左向右先计算表达式z=x++,因为x++先使用后自增,所以z的值为1,x的值为2。再计算逗号表达式第二个表达式y++,此时y的值为2,最后计算第三个表达式++y,y的值为3。

    (24)有如下程序

    #include <stdio.h>

    main()

    {

    int a = 0, b = 1;
    
    if (a++ && b++)
    
        printf(“T”);
    
    else
    
        printf(“F”);
    
    printf(“a=%d,b=%d\n”, a, b);
    

    }

    程序运行后的输出结果是

    A) Ta=1,b=2

    B) Fa=0,b=2

    C) Fa=1,b=1

    D) Ta=0,b=1

    答案:C

    【解析】题目中判断if条件是否成立,a++先取值为0,则(a++ && b++)为0,且不计算b++,而后a自增得a=1,if条件不成立执行else函数体,输出F。最后执行语句printf(“a=%d,b=%d\n”, a, b);按照格式输出a=1,b=1。C选项正确。

    (25)有以下程序

    #include <stdio.h>
    
    main()
    
    {  char *s=”120119110″;
    
       int n0,n1,n2,nn,i;
    
       n0=n1=n2=nn=i=0;
    
       do{
    
            switch(s[i++])
    
            {  default   : nn++;
    
               case  ‘0’ : n0++;
    
               case  ‘1’ : n1++;
    
               case  ‘2’ : n2++;
    
             }
    
           } while(s[i]);
    
      printf(“n0=%d,n1=%d,n2=%d,nn=%d\n”,n0,n1,n2,nn);
    
    }
    

    程序的运行结果是()。

    A) n0=3,n1=8,n2=9,nn=1

    B) n0=2,n1=5,n2=1,nn=1

    C) n0=2,n1=7,n2=10,nn=1

    D) n0=4,n1=8,n2=9,nn=1

    答案:A

    【解析】本题执行过程为,s[0]=’1’,匹配case’1’,n1=1,n2=1;s[1]=’2’,匹配case’2’, n2=2;s[2]=’0’,匹配case’0’,n0=1,n1=2,n2=3;s[3]=’1’,匹配case’1’,n1=3,n2=4;s[4]=’1’,匹配case’1’,n1=4,n2=5;s[5]=’9’,匹配default,nn=1,n0=2,n1=5,n2=6;s[6]=’1’,匹配case’1’,n1=6,n2=7;s[7]=’1’,匹配case’1’,n1=7,n2=8;s[8]=’0’,匹配case’0’,n0=3,n1=8,n2=9;s[9]=’\0’,退出循环。输出n0,n1,n2,nn为3,8,9,1,A选项正确。

    (26)有以下程序

    #include <stdio.h>

    main( )

    { int i,j = 0;

    char a[] = “How are you”, b[10] = {0};

    for (i=0; a[i]; i++)

     if (a[i] == ‘ ‘)
    
        b[j++] = a[i+1];
    

    printf(“%s\n”,b);

    }

    程序运行后的输出结果是()。

    A) Hay

    B) Howareyou

    C) we

    D) ay

    答案:D

    【解析】for语句循环体执行功能是,每次当a[i]元素为’ ‘时,自动将a[i]下一个元素赋值给b[j],赋值完成后,j值加1,因此a[i]的’a’和’y’分别赋值给b[0],b[1],答案为D选项。

    (27)有以下程序

    #include <stdio.h>

    main()

    { char a=3, b=6, c;

    c=(a^b)<<2;

    printf(“%d \n”, c );

    }

    程序运行后的输出结果是()。

    A) 5

    B) 1

    C) 20

    D) 18

    答案:C

    【解析】运算符为按位异或运算符,即01=1,10=1,11=0,00=0,因此ab=101在进行<<操作,变为101002=2010,因此答案为C选项。

    (28)有如下程序

    #include <stdio.h>

    main()

    {

    int i, *ptr;
    
    int array[5] = {5,3,1};
    
    for (ptr=array, i=0; i<5; i++, ptr++)
    
    {
    
        if (*ptr == 0)
    
            putchar(‘X’);
    
        else
    
            putchar(‘A’ + *ptr);
    
    }
    
    printf(“\n”);
    

    }

    程序运行后的输出结果是

    A) FDBXX

    B) FFFXX

    C) FDBBB

    D) ABCDE

    答案:A

    【解析】在对数组进行初始化时,如果对数组的全部元素赋以初值,定义时可以不指定数组长度,如果被定义数组的长度与初值个数不同,则数组长度不能省略;如果在说明数组时给出了长度,但没有给所有的元素赋予初始值,而只依次给前面的几个数组元素赋予初值,那么C语言将自动对余下的元素赋初值,则array={5,3,1,0,0}。程序执行过程为:执行for循环,将数组首地址赋给指针ptr,依次遍历每一个元素,如果数组元素为0则输出‘X’,如果不为0则按照字母表输出字符‘A’后第array[i]个字符。程序运行后的输出结果为:FDBXX,A选项正确。

    (29)有以下程序

    #include <stdio.h>

    main()

    {

    char  *s=”12134″;
    
    int  k=0, a=0 ;
    
    while( s[ k +1 ] )
    
    { 
    
        k++;
    
        if ( k % 2 ==0 )
    
        {
    
             a = a + ( s[ k ] – ‘0’ +1 ) ;
    
             continue;
    
        }
    
        a = a + ( s[ k ] – ‘0’ );
    
    }
    
    printf (” k=%d a=%d\n”, k, a );
    

    }

    程序运行后的输出结果是()。

    A) k=5 a=15

    B) k=4 a=12

    C) k=6 a=11

    D) k=3 a=14

    答案:B

    【解析】当k=0时,执行while一次,得到k=1,a为2;当k=1时,执行while一次,得到k=2,a为4;当k=2时,执行while一次,得到k=3,a为7;当k=3时,执行while一次,得到k=4,a为12;所以答案为B选项。

    (30)有以下程序

    #include <stdio.h>
    
    main()
    
    {  int  a, b;    
    
       for( a=1,b=1; a<=100; a++ )
    
       {  if(b>=20) break;
    
          if(b % 3==1) {  b=b+3; continue; }
    
          b=b-5;
    
       }
    
       printf(“%d\n”,a);
    
    }
    

    程序的输出结果是()。

    A) 10

    B) 9

    C) 8

    D) 7

    答案:C

    【解析】首先注意for循环的控制条件当b>=20或者a>100则跳出for循环也即b<20且a<=100时执行for循环;第一次进入循环a=1,b=1均满足循环条件,但b%31条件满足,故执行b=b+3,得到b=4,注意有continue,所以后面语句不执行,直接跳转到a++这个语句,所以第一次循环完之后a=2,b=4;进入第二轮循环,b%31也是满足的,故再次b=b+3,此轮循环执行之后a=3,b=7,进入下一轮。此后和前面循环同理,都是b%3==1满足,因为每次都是加3,而之后又去模3,且都跳过for后面语句直接执行a++,所以,一直循环到b=22跳出for循环。此时a为8. 综合起来就是,每次循环b增加3,a增加1,且当b>22时跳出循环,结束程序。所以b从1增加到22,有(22-1)/3=7,所以a=1+7=8. 因此C选项正确。

    (31)设有一个M*N的矩阵已经存放在一个M行N列的数组x中,且有以下程序段

       sum=0;
    
       for(i=0;i<M;i++)  sum+=x[i][0]+x[i][N-1];
    
       for(j=1;j<N-1;j++) sum+=x[0][j]+x[M-1][j];
    

    以上程序段计算的是

    A) 矩阵两条对角线元素之和

    B) 矩阵所有不靠边元素之和

    C) 矩阵所有元素之和

    D) 矩阵所有靠边元素之和

    答案:D

    【解析】程序执行过程为:第一个for循环实现对第一列和第N列求和。第二个for循环在上一个for循环结果上实现对第一行和第M行从第二个元素到第N-1个元素的求和,总体来说,就是矩阵所有靠边元素之和,D选项正确。

    (32)若有以下程序

     #include <stdio.h>
    
     void fun(int  a[ ], int  n)
    
     {  int  t, i, j;
    
        for ( i=0;  i<n;  i+=2 )
    
           for ( j=i+2;  j<n;  j+=2 )
    
             if ( a[i] > a[j] ) {  t=a[i];  a[i]=a[j];  a[j]=t; }
    
     }
    
     main()
    
     {  int  c[10]={10,9,8,7,6,5,4,3,2,1},i;
    
        fun(c, 10);
    
        for ( i=0; i<10;  i++ )  printf(“%d,”, c[i]);
    
        printf(“\n”);
    
     }
    

    则程序的输出结果是()。

    A) 1,10,3,8,5,6,7,4,9,2,

    B) 10,9,8,7,6,5,4,3,2,1,

    C) 10,1,8,3,6,5,4,7,2,9,

    D) 2,9,4,7,6,5,8,3,10,1,

    答案:D

    【解析】该题首先对一维数组进行初始化,c[0]到c[9]依次赋值为10到1;fun(c, 10);语句调用fun函数,fun函数的功能是将一维数组奇数位元素的数值由小到大排序;最后将排好序的新的一维数组进行输出。因此D选项正确。

    (33)若有以下程序

     #include <stdio.h>
    
     #define  N  4
    
     void fun( int  a[][N], int  b[], int  flag )
    
     {  int  i,j;
    
        for( i=0; i<N; i++ )
    
        {  b[i] = a[0][i];
    
           for( j=1; j<N; j++ )
    
              if (flag ? (b[i] > a[j][i]) : (b[i] < a[j][i]))       b[i] = a[j][i];
    
        }
    
     }
    
     main()
    
     {  int  x[N][N]={1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15,16}, y[N],i;
    
        fun(x, y, 1);
    
        for (i=0;i<N; i++)   printf(“%d,”, y[i]);
    
        fun(x, y, 0);
    
        for (i=0;i<N; i++)   printf(“%d,”, y[i]);
    
        printf(“\n”);
    
     }
    

    则程序的输出结果是

    A) 4,8,12,16,1,5,9,13,

    B) 1,2,3,4,13,14,15,16,

    C) 1,5,9,13,4,8,12,16,

    D) 13,14,15,16,1,2,3,4,

    答案:B

    【解析】该题首先初始化二维数组,if (flag ? (b[i] > a[i][j]) : (b[i] < a[i][j]))条件语句的条件表达式使用了条件运算符构成的选择结构,即flag为真时,以(b[i] > a[i][j])作为条件表达式的值,否则以(b[i] < a[i][j])作为条件表达式的值,fun函数功能是给一维数组赋值。fun(x, y, 1);该函数调用后,即当flag为真时,使一维数组获得二维数组第1行的数值;fun(x, y, 0);该函数调用后,即当flag为假时,使一维数组获得二维数组第4行的数值;因此B选项正确。

    (34)有以下程序

    #include <stdio.h>

    void fun1(char *p)

    {

    char  *q;
    
    q=p;
    
    while(*q!=’\0′)
    
    { 
    
        (*q)++; 
    
        q++; 
    
    }
    

    }

    main()

    {

    char  a[]={“Program”}, *p;
    
    p=&a[3]; 
    
    fun1(p); 
    
    printf(“%s\n”,a);
    

    }

    程序执行后的输出结果是()。

    A) Prphsbn

    B) Prohsbn

    C) Progsbn

    D) Program

    答案:B

    【解析】(*q)++是q所指的字符加1,q++就是指针移到下一个字符。因此B选项正确。

    (35)有以下程序

    #include <stdio.h>

    #include <string.h>

    void fun( char *s, int m1, int m2 )

    { char t, *p;

    p=s + m1; s= s+m2;

    while( s<p )

    { t=*s; *s=*p; *p=t;

      s++;   p–;
    

    }

    }

    main()

    { char ss[10]=”012345678″;

    int  n=6;
    
    fun( ss,0,n-1 );
    
    fun( ss,9,n );
    
    fun( ss,0,9 );
    
    printf(“%s\n”, ss );
    

    }

    程序运行后的输出结果是()。

    A) 012345

    B) 876543210

    C) 876543

    D) 012345678

    答案:A

    【解析】fun(*ss, m1, m2 )的作用是,如果m1>m2交换数组元素ss[m1],ss[m2]。因此,fun(ss,0,5)后ss的0,1,2,3,4,5,6,7,8,\0。fun(ss,9,6) 后ss的0,1,2,3,4,5, \0,8,7,6。fun(ss,0,9)后ss的0,1,2,3,4,5,\0,8,7,6。因此打印结果012345。故答案为A选项

    (36)有以下程序

    #include <stdio.h>

    typedef struct stu {

                       char  name[10];
    
                       char  gender;
    
                       int  score;
    
                     } STU;
    

    void f( STU a, STU *b, STU c )

    { *b = c =a;

    printf( “%s,%c,%d,”, b->name, b->gender, b->score );

    printf( “%s,%c,%d,”, c.name, c.gender, c.score );

    }

    main( )

    { STU a={“Zhao”, ‘m’, 290}, b={“Qian”, ‘f’, 350}, c={“Sun”, ‘m’, 370};

    f( a, &b, c );

    printf( “%s,%c,%d,”, b.name, b.gender, b.score );

    printf( “%s,%c,%d\n”, c.name, c.gender, c.score );

    }

    程序运行后的输出结果是()。

    A) Zhao,m,290,Zhao,m,290,Zhao,m,290,Sun,m,370

    B) Zhao,m,290,Zhao,m,290,Zhao,m,290,Zhao,m,290

    C) Zhao,m,290,Zhao,m,290,Qian,f,350,Sun,m,370

    D) Zhao,m,290,Zhao,m,290,Qian,f,350,Zhao,m,290

    答案:A

    【解析】C语言函数参数传递分为:1、值传递过程中,被调函数的形参作为被调函数的局部变量处理,即在内存的堆栈中开辟空间以存放由主调函数放进来的实参的值,从而成为了实参的一个拷贝。值传递的特点是被调函数对形参的任何操作都是作为局部变量进行,不会影响主调函数的实参变量的值。

    2、地址传递过程中,被调函数的形参虽然也作为局部变量在堆栈中开辟了内存空间,但是这时存放的是由主调函数放进来的实参变量的地址。被调函数对形参的任何操作都被处理成间接寻址,即通过堆栈中存放的地址访问主调函数中的实参变量。正因为如此,被调函数对形参做的任何操作都影响了主调函数中的实参变量。题设中,参数b是地址传递,因此会直接影响实参变量。a,c是值传递,传递是a,c的拷贝,不会a,c实参产生影响,因此,调用函数返回,c没有被修改,b被修改了。故答案为A选项。

    (37)有以下程序:

    #include <stdio.h>

    #include <stdlib.h>

    int fun(int n)

    {  int *p;

    p = (int*)malloc(sizeof(int));

    *p=n; return *p;

    }

    main()

    {  int a;

    a = fun(10); printf(“%d\n”,a+fun(10));

    }

    程序的运行结果是(  )。

    A) 0

    B) 10

    C) 20

    D) 出错

    答案:C

    【解析】malloc(sizeof(int))的作用是开辟一个长度为sizeof(int)存储空间,并通过强制类型转换(int*)将此存储空间的地址赋给了一个整型的指针变量p。然后执行语句p=n,使得p的值为10,并通过return返回此值,即a的值为10。然后在主函数中输出a+fun(10)=10+10=20。

    (38)有以下程序

    #include <stdio.h>

    #define f(x) xxx

    main()

    {

    int a=3,s,t ;
    
    s=f(a+1);
    
    t=f((a+1));
    
    printf(“%d,%d\n”,s,t);
    

    }程序运行后的输出结果是()。

    A) 10,64

    B) 10,10

    C) 64,10

    D) 64,64

    答案:A

    【解析】本题考查宏定义的用法,宏定义只是做个简单的替换,所以本题中执行f(a+1)=a+1a+1a+1=3a+1=10,f((a+1))=(a+1)(a+1)*(a+1)=64,所以答案为A选项。

    (39)有以下程序

    #include <stdio.h>

    main( )

    {

    int  i;
    
    FILE*  fp;
    
    for (i=0; i<3; i++)
    
    {
    
        fp = fopen(“res.txt”, “w”);
    
        fputc(‘K’ + i, fp);
    
        fclose(fp);
    
    }
    

    }

    程序运行后,在当前目录下会生成一个res.txt文件,其内容是()。

    A) EOF

    B) M

    C) KLM

    D) L

    答案:B

    【解析】for循环中,每次都执行打开文件res.txt、写入文件、再关闭文件的操作,由于fopen函数使用’w’模式写文件,所以每次打开res.txt后,都删除文件中的原有数据,再重新写入新数据。所以文件最终的内容只与最后一次for循环有关,最后一次for循环是向文件res.txt写入’K’+2, 即M,正确答案是B选项。

    (40)有以下程序

    #include <stdio.h>

    main( )

    { FILE *fp;

    int i, a[6] = {1,2,3,4,5,6}, k;

    fp = fopen(“data.dat”, “w+”);

    fprintf(fp, “%d\n”, a[0]);

    for (i=1; i<6; i++)

    { rewind(fp);

       fprintf(fp, “%d\n”, a[i]);
    

    }

    rewind(fp);

    fscanf(fp, “%d”, &k);

    fclose(fp);

    printf(“%d\n”, k);

    }

    程序运行后的输出结果是()。

    A) 6

    B) 21

    C) 123456

    D) 654321

    答案:A

    【解析】本题首先定义文件指针变量fp和一个数组a[],再打开一个文件”data.dat”,随后先给文件写入数据a[0],由于rewind函数是将文件指针从当前位置重新指向文件开始位置,所以for循环依次将数组a中的数据写入文件开始位置,退出循环后,文件中的数据顺序为:654321,重新使指针指向文件开始位置,将此时fp指向的数据(即文件中第一个数据6)写入变量k中,关闭文件,输出k值,答案为A选项。

    展开全文
  • (24) 对建立良好的程序设计风格,下面描述正确的是(A) 注:P48 A. 程序应简单、清晰、可读性好 B. 符号名的命名要符合语法 C. 充分考虑程序的执行效率 D. 程序的注释可有可无 (25) 下面对对象概念描述错误的是(A) 注...
  • (24) 对建立良好的程序设计风格,下面描述正确的是______。(A) A. 程序应简单、清晰、可读性好 B. 符号名的命名要符合语法 C. 充分考虑程序的执行效率 D. 程序的注释可有可无 (25) 下面对对象概念描述错误的是______...
  • 下列属于面向对象开发方法的是(A B C D)。 A) Booch B) UML C) Coad D) OMT 6. 软件危机的主要表现是(B D)。 A) 软件成本太高 B) 软件产品的质量低劣 C) 软件开发人员明显不足 D) 软件生产率低下 7...
  • 语音识别MATLAB实现

    热门讨论 2009-03-03 21:39:18
    为了使路径不至于过分倾斜,可以约束斜率在0.5-2范围内,如果路径已经通过了格点( ),那么下一个通过格点( )只能是下列三种情况之一: 搜索最佳路径方法如下: 搜索从( )开始,网格中任意一点只可能有一条路径...
  • 软件测试规范

    2018-04-23 09:16:12
    软件测试目标 .................................................................................................................................. 2 三.软件测试流程 .......................................
  • C) 抽象类与接口的用法几乎都相同,具体用哪一个方法,只是在于程序设计人员的编程习惯而已。 D) 在Java中,最多使用的是抽象类,因为应用抽象类也可以实现多继承。而接口已经被限制使用。 题目21:d 程序如下: ...
  • 例如:火车进遂道,最先进遂道的是火车头,最后是火车尾,而火车出遂道的时候也是火车头先出,最后出的是火车尾。若有队列: Q =(q1,q2,…,qn) 那么,q1为队头元素(排头元素),qn为队尾元素。队列中的元素是按照q1...
  • DBX260中文说明书

    2013-04-24 11:07:35
    使用程序选择中分频器编辑参数,简单地按下列步骤操作:从程序模式,按下X-OVER键,到达分模器模块时,通过连续按“Next 260ge”或“Prev 260ge”键领航,选择分频器模块页面直至达到需的的页面。 *连续按...
  • flash shiti

    2014-03-14 10:32:41
    16. 下面的语句说法正确的是: □ A. 目前Flash 最新的创作平台是Flash MX,播放插件是Flash MX Player。 □ B. 目前Flash 最新的创作平台是Flash MX,播放插件是Flash 6.0 Player。 □ C. 目前Flash 最新的创作平台...
  • C语言程序设计是本科工科类各专业重要基础课,主要学习程序设计的基本概念和方法,通过本门课程学习,使学生掌握C语言基本原理,熟练掌握程序设计的基础知识、基本概念;掌握程序设计的思想和编程技巧。 实训是...
  • Visual C++ 2005 入门经典 详细书签版

    热门讨论 2013-02-02 16:39:43
    2.1.8 自动生成控制台程序 41 2.2 定义变量 42 2.2.1 命名变量 43 2.2.2 C++中关键字 43 2.2.3 声明变量 44 2.2.4 变量初值 44 2.3 基本数据类型 45 2.3.1 整型变量 45 2.3.2 字符数据类型 ...
  • 2.1.8 自动生成控制台程序 41 2.2 定义变量 42 2.2.1 命名变量 43 2.2.2 C++中关键字 43 2.2.3 声明变量 44 2.2.4 变量初值 44 2.3 基本数据类型 45 2.3.1 整型变量 45 2.3.2 字符数据类型 ...
  • 19、对于开发和测试环境,下列说法正确的是:开发和测试环境必须能反映生产环境 /生产环境同开发和测试环境必须分离/应按照开发和测试计划中设置的标准配置来建立环境 /为了实现对项目的控制,需要注意同步开发和...

空空如也

空空如也

1 2 3
收藏数 46
精华内容 18
关键字:

下列程序设计步骤正确的是