1、软件水平考试(中级)软件设计师上午(基础知识)试题章节练习试卷 7 及答案解析(总分:54.00,做题时间:90 分钟)一、选择题(总题数:5,分数:38.00)1.选择题()下列各题 A、B、C、D 四个选项中,只有一个选项是正确的,请将此选项涂写在答题卡相应位置上,答在试卷上不得分。_某网络的拓扑结构如图 5-16 所示,网络 A 中 A2 主机的 IP 地址可以为(40)。如果网络 B 中有 1000 台主机,那么需要为网络 B 分配(41)个 C 类网络地址,其中 B1 主机的 IP 地址可以为(42),网络 B 的子网掩码应为(43)。 (分数:8.00)A.192.60.80.0B
2、.192.60.80.2C.192.60.80.3D.192.60.80.4A.1B.2C.3D.4A.192.60.16.1B.192.60.16.2C.192.60.16.5D.192.60.16.255A.255.255.255.0B.255.255.254.0C.255.255.253.0D.255.255.252.0在软件开发过程中常用图作为描述工具。DFD 就是面向(46)分析方法的描述工具。在一套分层 DFD 中,如果某一张图中有 N 个加工(Process),则这张图允许有(47)张子图。在一张 DFD 图中,任意两个加工之间(48)。在画分层 DFD 时,应注意保持(49)之
3、间的平衡。 DFD 中从系统的输入流到系统的输出流的一连串连续变换形成一种信息流,这种信息流可分为(50)两大类。(分数:10.00)A.数据结构B.数据流C.对象D.构件(Component)A.0B.1C.IND.0NA.有且仅有一条数据流B.至少有一条数据流C.可以有 0 或多条名字互不相同的数据流D.可以有 0 或多条数据流,但允许其中有若干条名字相同的数据流A.父图与厂图B.同一父图的所有子图C.不同父图的所有子图D.同一子图的所有直接父图A.控制流和变换流B.变换流和事务流C.事务流和事件流D.事件流和控制流软件设计中划分模块的一个准则是(60)。两个模块之间的耦合方式中,(61)
4、耦合的耦合度最高,(62)耦合的耦合度最低。一个模块内部的内聚种类中(63)内聚的内聚度最高,(64)内聚的内聚度最低。(分数:10.00)A.低内聚低耦合B.低内聚高耦合C.高内聚低耦合D.高内聚高耦合A.数据B.非直接C.控制D.内容A.数据B.非直接C.控制D.内容A.偶然B.逻辑C.功能D.过程A.偶然B.逻辑C.功能D.过程软件的易维护性是指理解、改正、改进软件的难易度。通常影响软件易维护性的因素有易理解性、易修改性和(86)。在软件的开发过程中往往采取各种措施来提高软件的易维护性,如采用(87)有助于提高软件的易理解性,(88)有助于提高软件的易修改性。在软件质量特性中,(89)是
5、指在规定的一段时间和条件下,与软件维持其性能水平的能力有关的一组属性:(90)是指防止对程序及数据的非授权访问的能力。(分数:10.00)A.易使用性B.易恢复性C.易替换性D.易测试性A.增强健壮性B.信息隐蔽原则C.良好的编程风格D.高效的算法A.高效的算法B.信息隐蔽原则C.增强健壮性D.身份认证A.正确性B.准确性C.可靠性D.易使用性A.安全性B.适应性C.灵活性D.容错性二、主观题(总题数:3,分数:16.00)2.阅读以下说明和流程图,从供选择的答案中选出应填入流程图(n)处的字句写在对应栏内。 【说明】 一个印刷电路板的布线区域可分成 nm 个方格,如图 4-1(a)所示,现在
6、需要确定电路板中给定的两个方格的中心点之间的最短布线方案。电路只能沿水平或垂直方向布线,如图 4-1 (b)中虚线所示。为了避免线路相交,应将已布过线的方格做成封锁标记,其他线路不允许穿过被封锁的方格。 设给定印刷电路板的起始方格 x 与目的方格 y 尚未布线,求这两个方格间最短布线方案的基本思路是:从起始方格 x 开始,考查与起始方格距离为 k 的某一个可达方格是目标方格 y 时为止,或者由于不存在从 x 到 y 的布线方案而终止。布线区域中的每一个方格与其相邻的上、下、左、右 4 个方格之间的距离为 1,依次沿下、右、上、左这 4 个方向考查,并用一个队列记录可达方格的位置。表 4-1 给
7、出了沿这 4 个方向前进 1 步时相对于当前方格的相对偏移量。 例如,设印刷电路板的布线区域可划分为一个 68 的方格阵列,如图4-2(a)所示,其中阴影表示已封锁方格。从起始方格 x(位置3,2,标记为 0)出发,按照下、右、上、左的方向依次考查,所标记的可达方格如图 4-2(a)所示,目标方格为 y)位置4,7,标记为 10),相应的最短布线路径如图 4-2(b)虚线所示。 如图 4-3 和图 4-4 所示的流程图即利用上述思路,在电路板方格阵列中进行标记,图中使用的主要符号如表 4-2 所示。在图 4-4 中,设置电路板初始格局,即将可布线方格置为数值-1、已布线方格(即封锁方格)置为-
8、9。设置方格阵列“围墙”的目的是省略方格位置的边界条件判定,方法是在四周附加格,并将其标记为-9(与封锁标记相同)。 供选择的答案: aFoundtrue bFound=true cT=EndPos dQ.insert(T) eTQ.delete() fCurPos=EndPos gi(分数:2.00)_读下列算法说明和图 4-5,回答问题 1 至问题 3。 【算法说明】 某旅馆共有 N 间客房。每间客房的房间号、房间等级、床位数及占用状态分别存放在数组 ROOM、RANK、NBED 和 STATUS 中。房间等级值为 1、2或 3。房间的状态值为 0(空闲)或 1(占用)。客房是以房间(不是
9、床位)为单位出租的。 本算法根据几个散客的要求预订一间空房。程序的输入为:人数 M,房间等级要求 R(R=0 表示任意等级都可以)。程序的输出为:所有可供选择的房间号。 图 4-5 描述了该算法。(分数:6.00)(1).假设当前该旅馆各个房间的情况如表 4-3 所示。 (分数:2.00)_(2).如果等级为 R 的房间每人每天的住宿费为 RATE(R),RATE 为数组。为使该算法在输出每个候选的房间号 RM(J)后,再输出这批散客每天所需的总住宿费 DAYRENT(J),图 4-5 的 所指框中的最后处应增加什么处理?(分数:2.00)_(3).如果限制该算法最多输出 K 个可供选择的房间
10、号,则在图 4-5 的 所指的判断框应改成什么处理?(分数:2.00)_阅读以下说明和图 4-6,回答问题 1 至问题 4。【说明】 本流程图(如图 4-6 所示)是将中缀表示的算术表达式转换成后缀表示。如中缀表达式 (A-(B*C+D)*E)/(F+G)的后缀表示为 ABC*D+E*-FG+/。为了方便,假定变量名为单个英文字母,运算符只有+、-、*、/(均为双目运算符,左结合),并假定所提供的算术表达式非空且语法是正确的。另外,中缀表示形式中无空格符,但整个算术表达式以空格符结束。流程图中使用的符号的意义如下。 . 数组 IN存储中缀表达式。 . 数组 POLISH存储其后缀表示。 . 数
11、组 S是一个后进先出栈。 函数 PRIOR(CHAR)返回符号 CHAR 的优先级,各符号的优先级如表 4-4 所示。(分数:8.00)(1).填充流程图中的判断条件。(分数:2.00)_(2).写出子程序 A 的功能,并顺序写出实现该功能的操作。(分数:2.00)_(3).写出子程序 B 的功能,并顺序写出实现该功能的操作。(分数:2.00)_(4).中缀表达式(A+B-C*D)*(E-F)/G 经该流程图处理后的输出是什么? (分数:2.00)_软件水平考试(中级)软件设计师上午(基础知识)试题章节练习试卷 7 答案解析(总分:54.00,做题时间:90 分钟)一、选择题(总题数:5,分数
12、:38.00)1.选择题()下列各题 A、B、C、D 四个选项中,只有一个选项是正确的,请将此选项涂写在答题卡相应位置上,答在试卷上不得分。_解析:某网络的拓扑结构如图 5-16 所示,网络 A 中 A2 主机的 IP 地址可以为(40)。如果网络 B 中有 1000 台主机,那么需要为网络 B 分配(41)个 C 类网络地址,其中 B1 主机的 IP 地址可以为(42),网络 B 的子网掩码应为(43)。 (分数:8.00)A.192.60.80.0B.192.60.80.2C.192.60.80.3D.192.60.80.4 解析:A.1B.2C.3D.4 解析:A.192.60.16.1
13、B.192.60.16.2C.192.60.16.5 D.192.60.16.255解析:A.255.255.255.0B.255.255.254.0C.255.255.253.0D.255.255.252.0 解析:解析:IP 地址是一个 4 字节的数字,被分为 4 段,每段 8 位,段与段之间用句点分隔。为了便于表达和识别,IP 地址是以十进制数形式表示的,每段表示的十进制数最大不超过 255。IP 地址由两部分组成,即网络号和主机号。网络号标识的是 Internet 上的一个子网,而主机号标识的是子网中的某台主机。IP 地址根据网络号和主机号的数量而分为 A,B,C 三类。 A 类 IP
14、 地址:最前面一位为 0,然后用 7位来标识网络号,24 位标识主机号。A 类地址通常为大型网络而提供,全世界总共只有 126 个可能的 A 类网络,每个 A 类网络最多可以连接 2 24 -2 台主机。 B 类 IP 地址:最前面两位是 10,然后用 14 位来标识网络号,16 位标识主机号。B 类地址适用于中等规模的网络,全世界大约有 16000 个 B 类网络,每个 B类网络最多可以连接 2 16 -2 台主机。 C 类 IP 地址:最前面三位是 110,然后用 21 位来标识网络号,8位标识主机号。C 类地址适用于校园网等小型网络,每个 C 类网络最多可以有 2 8 -2 台主机。 有
15、以下几个特殊情况。主机号全为 1 的网间网地址用于广播,叫做广播地址。当 32 位地址全为 1 时,该地址用于本网广播,称为有限广播。网络号为全 0,后面的主机号表示本网地址。主机号全 0,此时的网络号就是本网的地址。保留的地址有网络号全 1 和 32 位全为 0 的特例。 由以上规定可以看出,网络号为全 1 或全0,主机号为全 1 或全 0,都是不能随意分配的。 本题中的 IP 地址都是 C 类地址,所以可以推出 A2,B1的地址。 因为每个 C 类网络最多可以有 254 台主机,而网络 B 有 1000 台主机,所以需要为其分配 1000/254=4 个 C 类网络地址。 根据子网掩码的计
16、算方式可以得到网络 B 的子网掩码为 255.255.252.0。在软件开发过程中常用图作为描述工具。DFD 就是面向(46)分析方法的描述工具。在一套分层 DFD 中,如果某一张图中有 N 个加工(Process),则这张图允许有(47)张子图。在一张 DFD 图中,任意两个加工之间(48)。在画分层 DFD 时,应注意保持(49)之间的平衡。 DFD 中从系统的输入流到系统的输出流的一连串连续变换形成一种信息流,这种信息流可分为(50)两大类。(分数:10.00)A.数据结构B.数据流 C.对象D.构件(Component)解析:A.0B.1C.IND.0N 解析:A.有且仅有一条数据流B
17、.至少有一条数据流C.可以有 0 或多条名字互不相同的数据流 D.可以有 0 或多条数据流,但允许其中有若干条名字相同的数据流解析:A.父图与厂图 B.同一父图的所有子图C.不同父图的所有子图D.同一子图的所有直接父图解析:A.控制流和变换流B.变换流和事务流 C.事务流和事件流D.事件流和控制流解析:解析:数据流图是一种常用的结构化工具,它从数据传递和加上的角度,以图形方式描述数据流从输入到输出的变换过程。往往一个软件系统的数据流图有多层结构。对应的法则是:父图有 N 个加工,该父图可以有 0N 张子图,但是每张子图只能对应于一张父图。在一张 DFD 图中,任意两个加工之间可以有 0 条或多
18、条名字互不相同的数据流。平衡原则:在数据流图中,父图、子图是平衡的,即父图中某加工的输入/输出数据流必须与其子图的输入/输出流在数量和名字上相同。DFD 的信息流入体可分为两种类型,一种是变换流,另一种是事务流。软件设计中划分模块的一个准则是(60)。两个模块之间的耦合方式中,(61)耦合的耦合度最高,(62)耦合的耦合度最低。一个模块内部的内聚种类中(63)内聚的内聚度最高,(64)内聚的内聚度最低。(分数:10.00)A.低内聚低耦合B.低内聚高耦合C.高内聚低耦合 D.高内聚高耦合解析:A.数据B.非直接C.控制D.内容 解析:A.数据 B.非直接C.控制D.内容解析:A.偶然B.逻辑C
19、.功能 D.过程解析:A.偶然 B.逻辑C.功能D.过程解析:解析:软件设计中划分模块的一个准则是追求更高的内聚度和更低的耦合度。耦合度是对一个软件结构内不同模块之间互连程度的度量。数据耦合的耦合程度最低、控制耦合次之,适当分解模块可以用数据耦合代替控制耦合。公共耦合的复杂程度随耦合模块的个数和耦合模块对公共数据环境的操作而变化。内容耦合是程度最高的耦合。内聚标识着一个模块内各个元素彼此结合的紧密程度,它是信息隐蔽和局部化概念的自然扩展。按内聚程度从低到高的排列是:偶然内聚、逻辑内聚、瞬时内聚、过程内聚、通信内聚、顺序内聚、功能内聚。软件的易维护性是指理解、改正、改进软件的难易度。通常影响软件
20、易维护性的因素有易理解性、易修改性和(86)。在软件的开发过程中往往采取各种措施来提高软件的易维护性,如采用(87)有助于提高软件的易理解性,(88)有助于提高软件的易修改性。在软件质量特性中,(89)是指在规定的一段时间和条件下,与软件维持其性能水平的能力有关的一组属性:(90)是指防止对程序及数据的非授权访问的能力。(分数:10.00)A.易使用性B.易恢复性C.易替换性D.易测试性 解析:A.增强健壮性B.信息隐蔽原则C.良好的编程风格 D.高效的算法解析:A.高效的算法B.信息隐蔽原则 C.增强健壮性D.身份认证解析:A.正确性B.准确性C.可靠性 D.易使用性解析:A.安全性 B.适
21、应性C.灵活性D.容错性解析:解析:软件的可维护性是指理解、改正、改动、改进软件的难易程度。根据 Boehm 质量模型,通常影响软件可维护性的因素有可理解性、可测试性和可修改性。具有良好的程序设计风格有助于提高软件的可理解性。信息隐蔽技术有助于提高软件的可修改性。在软件质量特性中,可靠性是指在规定的一段时间和条件下,与软件维持其性能水平的能力有关的一组属性;安全性是指防止对程序及数据的非授权访问的能力。二、主观题(总题数:3,分数:16.00)2.阅读以下说明和流程图,从供选择的答案中选出应填入流程图(n)处的字句写在对应栏内。 【说明】 一个印刷电路板的布线区域可分成 nm 个方格,如图 4
22、-1(a)所示,现在需要确定电路板中给定的两个方格的中心点之间的最短布线方案。电路只能沿水平或垂直方向布线,如图 4-1 (b)中虚线所示。为了避免线路相交,应将已布过线的方格做成封锁标记,其他线路不允许穿过被封锁的方格。 设给定印刷电路板的起始方格 x 与目的方格 y 尚未布线,求这两个方格间最短布线方案的基本思路是:从起始方格 x 开始,考查与起始方格距离为 k 的某一个可达方格是目标方格 y 时为止,或者由于不存在从 x 到 y 的布线方案而终止。布线区域中的每一个方格与其相邻的上、下、左、右 4 个方格之间的距离为 1,依次沿下、右、上、左这 4 个方向考查,并用一个队列记录可达方格的
23、位置。表 4-1 给出了沿这 4 个方向前进 1 步时相对于当前方格的相对偏移量。 例如,设印刷电路板的布线区域可划分为一个 68 的方格阵列,如图4-2(a)所示,其中阴影表示已封锁方格。从起始方格 x(位置3,2,标记为 0)出发,按照下、右、上、左的方向依次考查,所标记的可达方格如图 4-2(a)所示,目标方格为 y)位置4,7,标记为 10),相应的最短布线路径如图 4-2(b)虚线所示。 如图 4-3 和图 4-4 所示的流程图即利用上述思路,在电路板方格阵列中进行标记,图中使用的主要符号如表 4-2 所示。在图 4-4 中,设置电路板初始格局,即将可布线方格置为数值-1、已布线方格
24、(即封锁方格)置为-9。设置方格阵列“围墙”的目的是省略方格位置的边界条件判定,方法是在四周附加格,并将其标记为-9(与封锁标记相同)。 供选择的答案: aFoundtrue bFound=true cT=EndPos dQ.insert(T) eTQ.delete() fCurPos=EndPos gi(分数:2.00)_正确答案:(正确答案:(1)i或 i (2)c或 c (3)d或 d (4)a或 a (5)h或 h)解析:解析:该流程实现的功能是为印刷电路板选择布线路径,路经中的每一小步都只能走垂直线或水平线,而且要求得到的路径是最短路径。 图 4-3 是该算法的整体流程,包含了变量的
25、初始化及输入输出,以及调用了子过程 findPath。findPath 子过程才是关键的处理(如图 4-4 所示)。 findPath 中,先设置offset 数组的元素值,并创建空队列。然后将当前位置 CurPos 置为起始位置 StartPos,并将标记 Found置为 false,表示当前还没找到路径,接着将当前方格置为 0 (Grid 数组中的对应元素),表示起始点。进入循环,将 i 赋初值为 0,从接着的判定的条件 i 4 及 offseti.r 可以断定,变量 i 就是表 4-1 中的“搜索顺序 i”,所以紧接着的语句“T.rowCurPos.row+offseti.r”和“T.c
26、olCurPos.col+offseti.c”就是求下一个要走的单元格(临时方格 T)的行坐标和列坐标。然后是判定(1),若不成立,则直接将 i 加 1,向另一个方向继续搜索,意味着临时方格 T 不能布线(值为-9)或已经判断过(值大于等于 0);若成立,则将临时方格置为当前方格值加 1,表示到起始方格的距离增加1,亦即可以布线且尚未判断过。根据题述,方格的初始值为-1 表示可以布线,故判定(1)应为“GridT.row,T.col =-1”,即选项 i。 接着是判定(2),若成立则执行语句“Foundtrue”,意味着找到了解,即临时方格已经是目标方格。故判定(2)应为“T=EndPos”,
27、即选项 c。判定(2)不成立时,执行加工(3),这里应该是入队操作,将临时方格入队,故加工(3)应为“Q.insert(T)”,即选项 d。接着将 i 值加 1,继续搜索。 当判定“i4 且 Found=false”不成立时,有两种情况:一种是 i=4,另一种是 Found=true。判定(4)若不成立返回 true,意味着找到了解,故判定(4)应为“Foundtrue”,即选项a。这样,若判定(4)成立,意味着 i=4,即 4 个方向均已搜索,接着判断队列是否为空,若非空,则出队继续查找,进程(5)自然是出队操作了,但是出队给哪个变量呢?是临时方格 T 还是当前方格 CurPos?其实很容易
28、判断,从最近的语句“T.rowCurPos.row+offseti.r”和“T.colCurPos.col+offseti.c”可得应为当前方格 CurPos,故应为“CurPosQ.delete()”,即选项 h。读下列算法说明和图 4-5,回答问题 1 至问题 3。 【算法说明】 某旅馆共有 N 间客房。每间客房的房间号、房间等级、床位数及占用状态分别存放在数组 ROOM、RANK、NBED 和 STATUS 中。房间等级值为 1、2或 3。房间的状态值为 0(空闲)或 1(占用)。客房是以房间(不是床位)为单位出租的。 本算法根据几个散客的要求预订一间空房。程序的输入为:人数 M,房间等
29、级要求 R(R=0 表示任意等级都可以)。程序的输出为:所有可供选择的房间号。 图 4-5 描述了该算法。(分数:6.00)(1).假设当前该旅馆各个房间的情况如表 4-3 所示。 (分数:2.00)_正确答案:(正确答案:101,301。)解析:(2).如果等级为 R 的房间每人每天的住宿费为 RATE(R),RATE 为数组。为使该算法在输出每个候选的房间号 RM(J)后,再输出这批散客每天所需的总住宿费 DAYRENT(J),图 4-5 的 所指框中的最后处应增加什么处理?(分数:2.00)_正确答案:(正确答案:RATE(RANK(I)* MDAYRENT(J)或 M* RATE(RA
30、NK(I)DAYRENT(J)解析:(3).如果限制该算法最多输出 K 个可供选择的房间号,则在图 4-5 的 所指的判断框应改成什么处理?(分数:2.00)_正确答案:(正确答案:IN OR J=K,其中,IN 也可以写成 I=N+1;J=K 也可以写成 JK。)解析:解析:问题 1 比较简单,“输入 M=4,R=0”表示散客人数为 4,房间等级任意。对照旅馆各房间的情况表,易得满足条件的房间号有:101 和 301,算法的输出正是可供选择的房间号,故算法的输出应该为:“101,301”。 根据题设,每天的住宿费 DAYRENT(J)应为散客数 M 与对应房间(等级为 r)的每人每天住宿费
31、RATE(r)的乘积。问题就是 r 是多少呢?是用户输入的“R”吗?显然可以排除这种情况,因为 R可以为 0。仔细地分析可得,r 应为“RANK(I)”。故应增加“RATE(RANK(I)*M DAYRENT(J)”。需要注意的一点是,将变量 A 赋值 V 的写法如下:VA,而不是 C 语言的习惯:A=V。在流程图中,等号“=”就表示“等于”。 仔细分析可得,变量 I 是用来计数旅馆房间的,变量 J 是用来计数满足条件的房间数的。 所指的判断框成立时输出结果,因此应改成:IN OR J=K。阅读以下说明和图 4-6,回答问题 1 至问题 4。【说明】 本流程图(如图 4-6 所示)是将中缀表示
32、的算术表达式转换成后缀表示。如中缀表达式 (A-(B*C+D)*E)/(F+G)的后缀表示为 ABC*D+E*-FG+/。为了方便,假定变量名为单个英文字母,运算符只有+、-、*、/(均为双目运算符,左结合),并假定所提供的算术表达式非空且语法是正确的。另外,中缀表示形式中无空格符,但整个算术表达式以空格符结束。流程图中使用的符号的意义如下。 . 数组 IN存储中缀表达式。 . 数组 POLISH存储其后缀表示。 . 数组 S是一个后进先出栈。 函数 PRIOR(CHAR)返回符号 CHAR 的优先级,各符号的优先级如表 4-4 所示。(分数:8.00)(1).填充流程图中的判断条件。(分数:
33、2.00)_正确答案:(正确答案:PRIOR(INi):PRIOR(Sp)解析:(2).写出子程序 A 的功能,并顺序写出实现该功能的操作。(分数:2.00)_正确答案:(正确答案:功能:将当前符号 INi入栈。 操作:P+1P INiSp)解析:(3).写出子程序 B 的功能,并顺序写出实现该功能的操作。(分数:2.00)_正确答案:(正确答案:功能:出栈(将栈顶元素送往数组 POLISH) 操作:k+1k SpPOLISHk p-1p)解析:(4).中缀表达式(A+B-C*D)*(E-F)/G 经该流程图处理后的输出是什么? (分数:2.00)_正确答案:(正确答案:AB+CD*-EP-*
34、G/)解析:解析:流程图中借助栈 S(其实是数组,栈顶 p 指向最后一个元素),相应的栈操作如下。进栈:p+1p、入栈元素Sp:出栈:Sp栈元素变量、p-1p:栈空条件:p=0。 流程图中采用了 3 个下标变量 k、p、i,容易判断 i 是输入数组 IN的下标,k 是输出数组 POLISH的下标,p 是栈 S的栈顶下标。 整个循环结束的条件是遇到空格字符,即表示中缀表达式结束。然后根据 Si的不同进行不同的操作。 是变量,则将变量保存到输出数组中。 是左括号,则调用 A(A 未知,这正是难点所在)。 是右括号,则循环调用 B,直到栈顶元素是左括号,意味着需要修改栈顶指针;将 p-1P,即进行一
35、次出栈操作,但不关心栈顶元素,其实此时栈顶元素就是左括号。 是运算符,首先判断栈是否为空,若空则直接调用 A;若非空,则进行某种大小比较(判定(1),这里容易想到是进行优先级比较),当小于等于时调用 B,继续判断下一个栈顶元素,否则调用 A。 从对右括号的处理可得,左括号一定要入栈,也就是说 A 一定包含左括号入栈操作;B 含义出栈操作,栈顶元素做何种处理待定。再结合输出结果前的一个循环:循环调用 B 直到栈空。如果输入中缀式正确的话,此时栈中不可能含有括号,只可能含有运算符,因此应该是将剩余运算符送入输出数组 POLISH中。这就是对栈顶元素的处理。 判定(1)猜想是进行优先级比较:将当前运算符与栈顶元素进行比较,若当前元素优先级高(),则不出栈,将当前运算符入栈;否则(),出栈并处理栈顶元素,再将当前运算符入栈。 至于问题 4,则比较容易,只要知道后缀式的含义就能解答。