跳转至

程序设计语言基础:题库练习

已整理本章知识点练习 94 条来源题目,共 91 道练习。题号沿用来源序号;第13、33题并入第5题,第55题并入第37题。同材料的不同小问分别保留。

题干保留事实条件、选项与必要题图;平台答案、整理解析与纠错默认收起。解析重新归纳为复习笔记,平台答案不等同于官方答案。

题库整理进度 · 历年试卷清单

知识点练习

题目 001

来源:知识点练习「程序设计语言基础」第 1 题(原站入口)。

从以下语言或技术中选择更适合处理动态网页的一项。

  • A. HTML
  • B. LISP
  • C. PHP
  • D. JAVA/C++
答案与解析

平台答案:C。

整理解析

PHP 面向 Web 服务端开发,可根据请求生成页面,按题目侧重点选 C。HTML 主要描述页面结构;Java 等也能开发动态网站。纠错:平台用“比 CGI 或 Perl 更快”作一般结论并不严谨,CGI 是接口机制,性能还取决于实现、运行方式和具体任务。

题目 002

来源:知识点练习「程序设计语言基础」第 2 题(原站入口)。

函数采用引用调用时,按题目的参数传递模型,向形参提供的是哪项内容?

  • A. 把实参的值传给形参
  • B. 把实参的地址传给形参
  • C. 把形参的值传给实参
  • D. 把形参的地址传给实参
答案与解析

平台答案:B。

整理解析

引用调用使形参关联到实参对象,修改该对象可反映到调用方;本题用“传递地址”描述这一机制,选 B。纠错:C 的参数一律按值传递,指针参数复制的是指针值;数组形参会调整为指针类型。这不等同于 C++ 的引用参数,不能把 C 的指针参数直接说成语言层面的引用传递。

题目 003

来源:知识点练习「程序设计语言基础」第 3 题(原站入口)。

编译高级语言程序时,需要持续记录和查询源程序中符号的类型、属性等信息。这些信息应归入哪种表或结构?

  • A. 符号表
  • B. 哈希表
  • C. 动态查找表
  • D. 栈和队列
答案与解析

平台答案:A。

整理解析

符号表按标识符保存类型、作用域等属性,供名称解析、类型检查和代码生成使用,选 A。哈希表可以是符号表的实现方式,但本题问的是这份信息在编译器中的功能名称。

题目 004

来源:知识点练习「程序设计语言基础」第 4 题(原站入口)。

按传统的编译执行与解释执行模型,以下关于是否生成源程序对应目标程序的说法,哪项正确?

  • A. 编译方式生成目标程序,解释方式不生成
  • B. 解释方式生成目标程序,编译方式不生成
  • C. 两种方式都生成目标程序,仅优化效率不同
  • D. 两种方式都不生成目标程序,仅是否优化不同
答案与解析

平台答案:A。

整理解析

编译先产出目标程序,再执行该结果;纯解释由解释器在运行中处理源程序或内部表示,按这一教材口径选 A。限定:解释器也可能先生成字节码,现代实现还能结合即时编译;“不生成”不是说解释器不能有任何中间表示。

题目 005

来源:知识点练习「程序设计语言基础」第 5 题(原站入口)。

描述大多数程序设计语言的语法结构,通常使用下列哪类文法就足够?

  • A. 正规文法
  • B. 上下文无关文法
  • C. 上下文有关文法
  • D. 短语结构文法

同题来源:知识点第 5、13、33 题。各来源的题干、原选项顺序和解析保留在下方折叠及来源记录中。

答案与解析

平台答案:B。

整理解析

表达式嵌套、语句组合等递归结构适合用上下文无关产生式表达,因此选 B。正规文法通常用于词法模式;声明是否存在、类型是否相容等约束还需语义检查,不能把全部语言规则都归为上下文无关语法。

同题来源:知识点第 13 题

平台答案(知识点第 13 题,原题选项):B。 本来源答案对应本页选项 B。

原题选项顺序保留如下;以下解析中的字母按该来源题目保留,并非改写原平台答案。

来源题干(复习摘要)

为大多数通用程序设计语言描述语法时,通常选用哪类文法?

原题选项 原题选项内容 本页对应选项
A 正规文法 A
B 上下文无关文法 B
C 上下文有关文法 C
D 短语结构文法 D

整理解析(该来源)

语法分析需要刻画表达式、语句和括号等递归嵌套关系,上下文无关文法能够描述这些主要结构,选 B。这里说的是语法骨架;名称绑定和类型等规则仍需另行检查。

同题来源:知识点第 33 题

平台答案(知识点第 33 题,原题选项):B。 本来源答案对应本页选项 B。

原题选项顺序保留如下;以下解析中的字母按该来源题目保留,并非改写原平台答案。

来源题干(复习摘要)

乔姆斯基把文法分为 4 种类型,其中哪一种能够描述程序设计语言的大多数语法现象?

原题选项 原题选项内容 本页对应选项
A 上下文有关文法 C
B 上下文无关文法 B
C 正规文法 A
D 短语结构文法 D

整理解析(该来源)

上下文无关文法通过递归产生式刻画表达式、语句、嵌套块等结构,对应乔姆斯基层次中的 2 型,选 B。词法模式通常较简单,可用正规文法;类型相容等要求则不只靠语法产生式处理。

题目 006

来源:知识点练习「程序设计语言基础」第 6 题(原站入口)。

在 C/C++ 程序中,整型变量 a 的值为 0,程序使用表达式 c=b/a。下列哪种情况最可能发生?

  • A. 编译时报告语法错误
  • B. 编译时报告逻辑错误
  • C. 运行时报告语法错误
  • D. 运行时产生异常
答案与解析

平台答案:D。

整理解析

按本题将 b/a 视为整数除法的出题意图,除零通常在运行时表现为故障,平台选 D。纠错:C/C++ 的整数除零是未定义行为,不保证抛出可捕获异常;编译器若能推断除数为零,也可能提前诊断。题面只说明 a 为整型,未给出 b 的类型;若 b 为浮点数,就不能直接套用整数除零的结论。

题目 007

来源:知识点练习「程序设计语言基础」第 7 题(原站入口)。

文法 G 的开始符号为 S,产生式为 S → A0 | B1、A → S1 | 1、B → S0 | 0。从 S 出发,能够生成的字符串符合下列哪项描述?

  • A. 所有仅由 0 组成的字符串
  • B. 所有仅由 1 组成的字符串
  • C. 某些 0 和 1 数量相同的字符串
  • D. 所有 0 和 1 数量不相同的字符串
答案与解析

平台答案:C。

整理解析

消去 A、B 后可写为 S → S10 | 10 | S01 | 01,因此生成的串恰为一个或多个 10、01 块的连接,即 (10|01)+。每块各含一个 0 和一个 1,所以总数相等;但 0011 等等量字符串不能生成,故是“某些”,选 C。

题目 008

来源:知识点练习「程序设计语言基础」第 8 题(原站入口)。

以下哪项通常被归为支持面向对象的解释型程序设计语言?

  • A. XML
  • B. Python
  • C. Prolog
  • D. C
答案与解析

平台答案:B。

整理解析

Python 支持类和对象,常见实现通过解释执行字节码运行,选 B。XML 是标记语言,Prolog 以逻辑编程为主要范式,C 通常采用编译实现。这里是常见使用方式的分类,并不限制 Python 只能解释执行。

题目 009

来源:知识点练习「程序设计语言基础」第 9 题(原站入口)。

把中缀算术表达式 (a-b)*(c+d) 改写为后缀表达式,应选哪一个?

  • A. ab-cd+*
  • B. abcd-*+
  • C. ab-+*cd
  • D. ab-c+d*
答案与解析

平台答案:A。

整理解析

后缀式把运算符放在两个操作数之后。左子表达式得到 ab-,右子表达式得到 cd+,将两部分连接后再附上外层乘号,得到 ab-cd+*,选 A。

题目 010

来源:知识点练习「程序设计语言基础」第 10 题(原站入口)。

把高级语言源程序转换成机器语言时,编译器常使用中间代码。以下有关中间代码的说法,哪项不正确?

  • A. 中间代码不依赖具体机器
  • B. 使用中间代码有利于编译器移植
  • C. 中间代码可用树或图表示
  • D. 中间代码可用栈和队列表示
答案与解析

平台答案:D。

整理解析

按教材对中间表示形式的分类,树或图、三地址代码、后缀式等能明确表达计算关系;栈和队列是一般数据结构,不是本题列举的中间表示类别,故选 D。口径说明:这不等于中间代码不能存入栈或队列,也不排除基于栈的中间指令;机器无关性主要指这里讨论的高层中间表示。

题目 011

来源:知识点练习「程序设计语言基础」第 11 题(原站入口)。

编译高级语言源程序时,把变量或临时结果分配到寄存器的工作通常归入哪个阶段?

  • A. 词法分析
  • B. 语法分析
  • C. 语义分析
  • D. 目标代码生成
答案与解析

平台答案:D。

整理解析

寄存器分配要考虑目标处理器可用的寄存器、活跃值及必要的内存溢出保存,属于编译器后端工作。在本题阶段划分中归入目标代码生成,选 D;实际编译器可将其实现为独立的后端处理步骤。

题目 012

来源:知识点练习「程序设计语言基础」第 12 题(原站入口)。

观察下图的有限自动机。对它所能接受的字符串,以下哪项描述不正确?

原题图

  • A. a 不能连续出现
  • B. b 不能连续出现
  • C. 非空字符串必须以 a 结尾
  • D. 可以接受空串
答案与解析

平台答案:A。

整理解析

图中状态 1 既是初态又是终态,且有标记为 a 的自环,所以 aa 等连续 a 可以被接受,A 错误。读 b 会转到非终态 2,必须再读 a 返回 1;因此不能连续出现 b,非空接受串以 a 结尾。初态本身可接受,故空串也被接受。

题目 014

来源:知识点练习「程序设计语言基础」第 14 题(原站入口)。

以下有关程序设计语言、变量和常量的说法中,哪项错误?

  • A. 语言的基本成分包括数据、运算、控制、传输等
  • B. 高级语言不依赖具体机器硬件
  • C. 局部变量的值在程序运行期间不能改变
  • D. 常量的值在程序运行期间不能改变
答案与解析

平台答案:C。

整理解析

“局部”限定名字可见的范围,不表示值不可修改。普通可赋值的局部变量能在其生存期内多次更新,因此 C 错误。常量的不可变性与变量是否局部是不同概念。

题目 015

来源:知识点练习「程序设计语言基础」第 15 题(原站入口)。

以下哪棵表达式树对应算术表达式 (a+(b-c))*d?

  • A. 选项 A
  • B. 选项 B
  • C. 选项 C
  • D. 选项 D
答案与解析

平台答案:B。

整理解析

最后执行的是乘法,所以根为 *,右子树是 d;左子树的根为 +,其左孩子是 a、右孩子是以 b 和 c 为左右孩子的 -。只有 B 与此结构相符。核图后其余三项分别表示 A:(a+b)*(c-d),C:(a-(b+c))*d,D:a*((b+c)-d)。

题目 016

来源:知识点练习「程序设计语言基础」第 16 题(原站入口)。

在 C 程序通常的内存布局模型中,全局变量的存储空间位于哪一区域?

  • A. 代码区
  • B. 静态数据区
  • C. 栈区
  • D. 堆区
答案与解析

平台答案:B。

整理解析

全局变量具有静态存储期,通常存放在静态数据区,选 B;实现上可再分为保存初始化数据的区域和零初始化区域等。不是每次调用函数时在栈上创建,也不是通过堆分配。

题目 017

来源:知识点练习「程序设计语言基础」第 17 题(原站入口)。

高级语言的处理过程可划分为多个阶段。按传统纯解释执行模型,以下哪个阶段不包含在内?

  • A. 词法分析
  • B. 语法分析
  • C. 语义分析
  • D. 目标代码生成
答案与解析

平台答案:D。

整理解析

解释器仍需识别单词、语法结构并检查相应语义,然后直接执行或执行内部表示;它不必生成供之后独立执行的目标程序,因此选 D。这不排除先形成抽象语法树或字节码,也不适用于把解释与即时编译混合起来的所有实现。

题目 018

来源:知识点练习「程序设计语言基础」第 18 题(原站入口)。

给定图示非确定有限自动机 NFA,q0 同时是初始状态和接受状态。下列哪个确定有限自动机 DFA 与它接受相同的语言?

原题图

  • A. 选项 A
  • B. 选项 B
  • C. 选项 C
  • D. 选项 D
答案与解析

平台答案:A。

整理解析

原 NFA 从 q0 返回 q0 的基本回路可读入 a、aa 或 ba;其中 aa 可由两个 a 回路替代,故语言为 (a|ba)*,含空串。A 在接受初态上读 a 可循环,读 b 后必须读 a 才能返回接受态,识别的正是这一语言。图中省略的转移可统一补到拒绝死状态;只验证少数示例不足以证明自动机等价。

题目 019

来源:知识点练习「程序设计语言基础」第 19 题(原站入口)。

递归下降分析属于哪一类分析方法?

  • A. 自底向上的语法分析
  • B. 自上而下的语法分析
  • C. 自底向上的词法分析
  • D. 自上而下的词法分析
答案与解析

平台答案:B。

整理解析

递归下降从开始符号对应的过程出发,按产生式调用下级语法成分的分析过程,逐步匹配输入。它沿语法树从根向叶展开,属于自上而下的语法分析,选 B。

题目 020

来源:知识点练习「程序设计语言基础」第 20 题(原站入口)。

编译器与解释器是高级语言的两类基本处理程序。图示编译流程包含词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成。第(20)空要选出并非所有编译器都必须具备的阶段;第(21)空比较解释器是否参与运行控制及通常的执行速度。本题回答第(20)空。

原题图

  • A. 词法分析和语法分析
  • B. 语义分析和中间代码生成
  • C. 中间代码生成和代码优化
  • D. 代码优化和目标代码生成
答案与解析

平台答案:C。

整理解析

简单编译器可以在分析源程序的过程中直接发出目标代码,不必先建立单独的中间代码层;为了得到正确程序,也不一定要进行优化。因此可省去的是中间代码生成和代码优化,选 C。图中的阶段是概念划分,实际实现还可融合多个阶段。

题目 021

来源:知识点练习「程序设计语言基础」第 21 题(原站入口)。

编译器与解释器是高级语言的两类基本处理程序。图示编译流程包含词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成。第(20)空要选出并非所有编译器都必须具备的阶段;第(21)空比较解释器是否参与运行控制及通常的执行速度。本题回答第(21)空。

原题图

  • A. 不参与运行控制,执行速度较慢
  • B. 参与运行控制,执行速度较慢
  • C. 参与运行控制,执行速度较快
  • D. 不参与运行控制,执行速度较快
答案与解析

平台答案:B。

整理解析

纯解释执行时,由解释器读取程序表示并分派相应操作,因此它参与运行控制;与可比的直接执行目标代码相比,这通常增加运行开销,按教材模型选 B。纠错:解释执行并不在所有任务上都必然更慢,实际速度还受优化、运行库和即时编译等因素影响。

题目 022

来源:知识点练习「程序设计语言基础」第 22 题(原站入口)。

计算采用逆波兰式(后缀式)表示的表达式时,通常使用哪种结构?

  • A. 栈
  • B. 队列
  • C. 符号表
  • D. 散列表
答案与解析

平台答案:A。

整理解析

从左到右扫描,遇操作数入栈,遇运算符就弹出所需操作数、计算后把结果压回栈,故选 A。对于减法或除法,先弹出的是右操作数,不能颠倒顺序。

题目 023

来源:知识点练习「程序设计语言基础」第 23 题(原站入口)。

程序执行后陷入死循环,可能属于以下哪一类错误?

  • A. 词法错误
  • B. 语法错误
  • C. 动态语义错误
  • D. 静态语义错误
答案与解析

平台答案:C。

整理解析

若程序本应结束,却因循环条件或变量更新逻辑而持续运行,这属于运行行为不符合预期,按本题分类选 C。纠错:不能仅以“编译器未发现”来定义动态语义错误;简单死循环可以静态识别,而任意程序是否终止一般不可判定。有意持续运行的事件循环也未必是错误。

题目 024

来源:知识点练习「程序设计语言基础」第 24 题(原站入口)。

图示 NFA 的 q0 既是初始状态,也是接受状态。对于它接受的 0、1 字符串,以下哪项描述正确?

原题图

  • A. 接受的 0、1 字符串长度均为偶数
  • B. 接受的 0、1 字符串中,0 与 1 的数量相同
  • C. 接受的非空 0、1 字符串,其开头和结尾都是 0
  • D. 接受的非空 0、1 字符串都以 1 结尾
答案与解析

平台答案:D。

整理解析

图中读到 0 会进入或保持在非终态 q1,读到 1 则进入或保持在接受态 q0。因此读完非空串后能接受,当且仅当最后一位是 1,选 D。串 1 就足以反驳 A、B、C;此外,初态可接受,所以空串也在该语言中。

题目 025

来源:知识点练习「程序设计语言基础」第 25 题(原站入口)。

函数 t()、f() 的定义见图。调用 t 时 x = 5;t 内调用 f 时,第一个参数按值传递,第二个参数按引用传递。t() 最后返回什么值?

原题图

  • A. 33
  • B. 22
  • C. 11
  • D. 负数
答案与解析

平台答案:A。

整理解析

t 中先算得 a = 3×5+1 = 16。进入 f 时 r 为 5 的副本,s 引用 t 的 a;f 的局部 x = 2×16+1 = 33,随后 s = 33+5 = 38,使 a 变为 38。再把 r 改为 32 不影响 t 的 x,故返回 38−5 = 33,选 A。两个函数内的 x 是不同变量。

题目 026

来源:知识点练习「程序设计语言基础」第 26 题(原站入口)。

编译器或解释器用移进—归约法分析高级语言程序的语法。按语法结构的构建方向,这属于哪种分析方法?

  • A. 自顶向下(自上而下)
  • B. 自底向上(自下而上)
  • C. 自左向右
  • D. 自右向左
答案与解析

平台答案:B。

整理解析

先移进输入符号,再把已识别的产生式右部归约为左部非终结符,逐步构建较大的语法结构,属于自底向上,选 B。输入从左到右扫描与语法树从底向上构建是两种不同的方向描述。

题目 027

来源:知识点练习「程序设计语言基础」第 27 题(原站入口)。

下图给出 DFA 的状态转换,A 是初态,C 是接受态。它能接受下列哪个字符串?

原题图

  • A. aabb
  • B. abab
  • C. baba
  • D. abba
答案与解析

平台答案:B。

整理解析

逐字符跟踪 abab:A ─a→ B ─b→ C ─a→ B ─b→ C,结束于接受态,选 B。aabb 在 B 读第二个 a 时无可用转移;baba 无法从 A 读入 b;abba 最后落在非终态 B。

题目 028

来源:知识点练习「程序设计语言基础」第 28 题(原站入口)。

main() 与 f() 的定义见图。调用 f 时,第一个参数按值传递,第二个参数按引用传递。main() 执行 print(x) 后输出多少?

原题图

  • A. 1
  • B. 6
  • C. 11
  • D. 12
答案与解析

平台答案:D。

整理解析

main 的 x 初值为 1,调用 f(5,x) 后,f 的局部形参 x = 5,a 引用 main 的 x。先算局部 x = 2×5+1 = 11,再令 a = 1+11 = 12,于是 main 的 x 变成 12,选 D。

题目 029

来源:知识点练习「程序设计语言基础」第 29 题(原站入口)。

现代编译器常先把高级语言源程序转成中间代码。除后缀式和树之外,下列哪项也是常用的中间代码形式?

  • A. 前缀码
  • B. 三地址码
  • C. 符号表
  • D. 补码和移码
答案与解析

平台答案:B。

整理解析

三地址码把计算拆成如 t = x + y 的简单操作,便于分析、优化和生成目标代码,选 B。符号表保存名字属性;补码、移码用于数值编码。

题目 030

来源:知识点练习「程序设计语言基础」第 30 题(原站入口)。

以下关于脚本语言的说法,哪项符合其通常的实现特点?

  • A. 脚本语言是通用程序设计语言
  • B. 脚本语言更适合开发系统级程序
  • C. 脚本语言主要采用解释方式实现
  • D. 脚本语言不能定义或调用函数
答案与解析

平台答案:C。

整理解析

按传统分类,脚本常交由解释器执行,C 的“主要”表述最合适;脚本当然可以定义和调用函数。口径说明:是否通用与是否用于脚本并不互斥,例如 Python 是通用语言;也有只服务特定环境的脚本语言。因此不能把 A 当作所有脚本语言的共同定义,或反过来断言脚本语言都不通用。

题目 031

来源:知识点练习「程序设计语言基础」第 31 题(原站入口)。

函数参数常按值或按引用传递。以下关于这两种方式的说法,哪项正确?

  • A. 按值传递时,形参与实参相互传值
  • B. 按值传递时,实参不能是变量
  • C. 按引用传递时,修改形参实际会修改所引用实参的值
  • D. 按引用传递时,实参可以是任意变量和表达式
答案与解析

平台答案:C。

整理解析

在题目的可写引用模型中,形参是实参对象的别名,对该对象赋值也会改变调用方看到的值,选 C。按值传递允许变量实参,只复制其值。引用能绑定什么对象取决于语言和引用类型,不能笼统说任意表达式都行;若只是按值复制指针,改指针本身也不等同于改被指对象。

题目 032

来源:知识点练习「程序设计语言基础」第 32 题(原站入口)。

字符串只含 a、b,并要求每个 a 后面紧接至少一个 b。下列哪个正规式恰好描述这个集合?

  • A. (b|ab)*
  • B. (ab*)*
  • C. (a*b*)*
  • D. (a|b)*
答案与解析

平台答案:A。

整理解析

把每个 a 与其后紧接的一个 b 配成 ab,其余 b 单独成块,合法串正好由 b 或 ab 反复连接,故选 A。B、C 中的 b* 可以取零次,D 也允许单独的 a,均会接受不合要求的串。题目未要求非空,空串也满足约束。

题目 034

来源:知识点练习「程序设计语言基础」第 34 题(原站入口)。

执行下面这段 C 代码,按题目的错误分类应归入哪一项?

1
2
3
int k=0;
for(;k < 100;);
{k++;}
  • A. 变量未定义
  • B. 静态语义错误
  • C. 语法错误
  • D. 动态语义错误
答案与解析

平台答案:D。

整理解析

for 后的分号构成空循环体,后面的 {k++;} 是循环外的语句。按逐语句执行模型,k 一直为 0,条件 k < 100 始终成立,不能到达自增语句,故属于运行逻辑问题,选 D;代码本身并无缺失分号等语法错误。标准限定:现代 C 对这类无可观察行为、条件非常量的循环允许终止假设,不能保证优化后一定持续空转。

题目 035

来源:知识点练习「程序设计语言基础」第 35 题(原站入口)。

高级语言中,哪些对象通常可以由程序员用自定义标识符命名?候选对象为:①关键字或保留字,②变量,③函数,④数据类型,⑤注释。

  • A. ①②③
  • B. ②③④
  • C. ①③⑤
  • D. ②④⑤
答案与解析

平台答案:B。

整理解析

变量名、函数名以及用户定义的类型名或类型别名都可由程序员声明,对应②③④,选 B。关键字由语言预先规定,注释内容通常不参与程序的名称绑定。

题目 036

来源:知识点练习「程序设计语言基础」第 36 题(原站入口)。

在仅由 a、b 构成的字符串中,要表示全部以 b 结尾的字符串,应使用哪个正规式?

  • A. (b|ab)*b
  • B. (ab*)*b
  • C. a*b*b
  • D. (a|b)*b
答案与解析

平台答案:D。

整理解析

前缀可以是任意 a、b 串,包括空串;末尾再接一个 b,所以是 (a|b)*b,选 D。A 漏掉 aab,B 漏掉 bab,C 漏掉 abab,都不能覆盖全部以 b 结尾的串。整个表达式不接受空串,但接受单独的 b。

题目 037

来源:知识点练习「程序设计语言基础」第 37 题(原站入口)。

将编译过程分为若干阶段时,检查程序语句的形式是否符合规则,主要属于哪一阶段?

  • A. 词法分析
  • B. 语法分析
  • C. 语义分析
  • D. 代码生成

同题来源:知识点第 37、55 题。各来源的题干、原选项顺序和解析保留在下方折叠及来源记录中。

答案与解析

平台答案:B。

整理解析

语法分析把词法单元组合成表达式、语句等结构,并检查这种组合是否符合产生式,选 B。词法关注单词构成,语义关注这些结构的含义与约束。

同题来源:知识点第 55 题

平台答案(知识点第 55 题,原题选项):B。 本来源答案对应本页选项 B。

原题选项顺序保留如下;以下解析中的字母按该来源题目保留,并非改写原平台答案。

来源题干(复习摘要)

把编译器按阶段划分时,哪个阶段主要检查程序中句子的结构是否正确?

原题选项 原题选项内容 本页对应选项
A 词法分析 A
B 语法分析 B
C 语义分析 C
D 代码生成 D

整理解析(该来源)

语法分析按照产生式检查记号如何组合成表达式、语句等结构,选 B。词法分析识别单词,语义分析检查类型、声明等含义方面的约束。

题目 038

来源:知识点练习「程序设计语言基础」第 38 题(原站入口)。

图示 DFA 的初态为 A,接受态为 D、E。以下哪个二进制字符串可被它接受?

原题图

  • A. 00110
  • B. 10101
  • C. 11100
  • D. 11001
答案与解析

平台答案:C。

整理解析

输入 11100 的路径为 A ─1→ C ─1→ E ─1→ E ─0→ B ─0→ D,最终在接受态,选 C。其余三个选项依次终止于 B、C、C,均非接受态。纠错:平台解析把路径写为 ACEEBDD,多写了最后一个 D;5 个输入符号应产生 5 次转移,即这里的 6 个状态。

题目 039

来源:知识点练习「程序设计语言基础」第 39 题(原站入口)。

main()、f() 的定义见图。调用 f 时,第一个参数按值传递,第二个参数按引用传递。执行 main() 中的 print(x) 会得到哪个值?

原题图

  • A. 11
  • B. 40
  • C. 45
  • D. 70
答案与解析

平台答案:B。

整理解析

main 的 x 为 5,调用 f(x+1,x) 时,f 的局部 x 取得副本 6,a 则引用 main 的 x。函数内先算 x = 6×6−1 = 35,再算 a = 35+5 = 40,所以返回后打印 40,选 B。两个同名 x 不能当成同一变量。

题目 040

来源:知识点练习「程序设计语言基础」第 40 题(原站入口)。

下图是一棵表达式语法树。按后缀形式写出该表达式,应选择哪项?

原题图

  • A. x 5 y + * a / b -
  • B. x 5 y a b * + / -
  • C. - / * + x 5 y a b
  • D. x 5 + * y + a / b -
答案与解析

平台答案:A。

整理解析

对树按左子树、右子树、根的顺序遍历:先把 5+y 写成 5 y +,与 x 相乘得到 x 5 y + *,再依次除以 a、减去 b,形成 x 5 y + * a / b -,选 A。对应的中缀式为 x*(5+y)/a-b。

题目 041

来源:知识点练习「程序设计语言基础」第 41 题(原站入口)。

在以下选项中,哪种语言通常更适合开发操作系统?

  • A. C/C++
  • B. Java
  • C. Python
  • D. JavaScript
答案与解析

平台答案:A。

整理解析

操作系统底层需要控制内存布局、硬件接口和运行时开销,C/C++ 在这些方面较适合,故选 A。纠错:平台所说现行操作系统“均由 C/C++ 开发”过于绝对;系统也常含汇编,并可采用 Rust 等其他语言。

题目 042

来源:知识点练习「程序设计语言基础」第 42 题(原站入口)。

下列关于脚本语言、标记语言及编译执行的说法,哪项不正确?

  • A. 脚本语言不使用变量和函数
  • B. 标记语言常用于描述格式化和链接
  • C. 脚本语言采用解释方式实现
  • D. 编译型语言执行效率更高
答案与解析

平台答案:A。

整理解析

脚本程序可以使用变量并定义、调用函数,A 明显错误,保留平台答案 A。表述限定:C、D 是教材对常见实现的概括;脚本实现也可含字节码或即时编译,而执行效率必须比较具体实现和任务,不能视为无条件规律。

题目 043

来源:知识点练习「程序设计语言基础」第 43 题(原站入口)。

编译或解释高级语言程序时,可以先生成等价的中间代码。下列有关中间代码的描述,哪项正确?

  • A. 中间代码通常用符号表表示
  • B. 后缀式与三地址码是常用中间代码形式
  • C. 中间代码优化必须依据执行机器的特性
  • D. 中间代码不能跨平台
答案与解析

平台答案:B。

整理解析

后缀式和三地址码都可表达源程序的计算关系,因此选 B。符号表主要记录标识符属性;许多中间代码优化和表示可以独立于目标机器。限定:不是所有优化都完全不考虑机器,也不是每一种中间表示都天然可移植,不能把平台的概括推广到所有编译器层次。

题目 044

来源:知识点练习「程序设计语言基础」第 44 题(原站入口)。

编译器进行语法分析时,主要判断哪一方面是否合法?

  • A. 源程序中的标识符是否合法
  • B. 语句的含义是否合法
  • C. 语句的结构是否合法
  • D. 表达式的类型是否合法
答案与解析

平台答案:C。

整理解析

语法分析检查词法单元是否按文法组成正确结构,例如括号、表达式和语句的组合,选 C。标识符的拼写规则通常由词法检查;名称是否声明、表达式类型是否匹配则属于语义检查。

题目 045

来源:知识点练习「程序设计语言基础」第 45 题(原站入口)。

题目给出下图自动机并称其为 DFA,指定 0 为初态、4 为接受态。它能接受下列哪个字符串?

原题图

  • A. aaab
  • B. abab
  • C. bbba
  • D. abba
答案与解析

平台答案:A。

整理解析

aaab 有接受路径 0 ─a→ 1 ─a→ 3 ─a→ 3 ─b→ 4,选 A。abab、abba 在状态 1 读 b 时无法继续;bbba 不存在读完后停在 4 的路径。纠错:原图状态 3 对输入 b 同时有自环和到 4 的边,实际是非确定自动机,与题干称 DFA 不符;应按存在一条完整接受路径来判定。

题目 046

来源:知识点练习「程序设计语言基础」第 46 题(原站入口)。

main() 与 f() 的定义见图。调用 f 时,第一个参数按值传递,第二个参数按引用传递。main() 执行完毕时输出多少?

原题图

  • A. 10
  • B. 19
  • C. 20
  • D. 29
答案与解析

平台答案:D。

整理解析

main 的 x 初值为 10,f(x,x) 的第一个形参取得副本 10,第二个形参 a 引用 main 的 x。函数内把局部 x 算成 2×10−1 = 19,再令 a = 10+19 = 29,于是 main 打印 29,选 D。

题目 047

来源:知识点练习「程序设计语言基础」第 47 题(原站入口)。

按常见编程语言范式分类,下列哪项是函数式语言的代表?

  • A. Lisp
  • B. Prolog
  • C. Python
  • D. Java/C++
答案与解析

平台答案:A。

整理解析

Lisp 是函数式编程的重要早期代表,按本题分类选 A;Prolog 以逻辑编程为代表。限定:语言往往支持多种范式,Lisp 也能包含可变状态,Python、Java/C++ 也提供函数式特性,不能由此断言其他语言完全不支持函数式编程。

题目 048

来源:知识点练习「程序设计语言基础」第 48 题(原站入口)。

把高级语言程序转化为计算机可执行的形式时,按传统编译与纯解释模型,以下关于目标程序的说法哪项正确?

  • A. 编译和解释都会生成逻辑上等价的目标程序
  • B. 编译和解释都不会生成逻辑上等价的目标程序
  • C. 编译生成逻辑上等价的目标程序,解释不生成
  • D. 解释生成逻辑上等价的目标程序,编译不生成
答案与解析

平台答案:C。

整理解析

编译的结果是目标语言程序;纯解释则在解释器控制下执行源程序或内部表示,按此口径选 C。纠错与限定:编译目标不一定是机器码,也可以是其他目标语言;解释器也可使用字节码。“是否生成独立目标程序”是本题采用的传统区分。

题目 049

来源:知识点练习「程序设计语言基础」第 49 题(原站入口)。

后缀表达式为 a b c - + d *,其中 -、+、* 都是二元运算,分别表示减、加、乘。下列哪棵语法树与它等价?

  • A. 选项 A
  • B. 选项 B
  • C. 选项 C
  • D. 选项 D
答案与解析

平台答案:B。

整理解析

读到减号先合并 b、c 为 b−c,再由加号把 a 与该结果相加,最后乘以 d。因此根为乘号,左子树是 a+(b−c),右子树是 d,对应 B。按原图,其余选项的后序序列分别为 A:a b - c + d *,C:a b + c d - *,D:a b c d - + *。

题目 050

来源:知识点练习「程序设计语言基础」第 50 题(原站入口)。

下图给出了带空串转移的不确定有限自动机 NFA。它接受的字符串集合对应哪个正规式?

原题图

  • A. ab*a
  • B. (ab)*a
  • C. a*ba
  • D. a(ba)*
答案与解析

平台答案:A。

整理解析

从初态 0 到 1 必须读 a。随后可经 ε 直接到 4,或先进入 2,经读 b 到 3、再由 ε 回 2 的回路重复任意次,最后通过 ε 到 4。到终态 5 还必须读一个 a,因此恰为 a 后接零个或多个 b 再接 a,即 ab*a,选 A;最短接受串为 aa。

题目 051

来源:知识点练习「程序设计语言基础」第 51 题(原站入口)。

用下列上下文无关文法描述简单算术表达式,E 为开始符号。哪个选项可以成为该文法的句子?

1
2
3
4
E → T | E+T
T → F | T*F
F → -F | N
N → 0 | 1 | 2 | 3l4 | 5 | 6 | 7 | 8 | 9
  • A. 2--3*4
  • B. 2+-3*4
  • C. (2+3)*4
  • D. 2*4-3
答案与解析

平台答案:B。

整理解析

平台答案保留为 B。原题笔误(已核实):原站确写 N→0|1|2|3l4|5|6|7|8|9,其中是小写字母 l,不是分隔符 |;题干保留原写法。严格按这份文法,N 不能单独产生 3、4,四个选项均不成立。只有按命题意图将 3l4 修正为 3|4,B 的 2+-3*4 才可由加法、一元负号和乘法规则推出;A、D 需要文法没有的二元减法,C 需要没有的括号。这是对原题笔误的解释,不能把平台答案 B 当成原文法无误的结论。平台原解析的推导还混入了多余负号。

题目 052

来源:知识点练习「程序设计语言基础」第 52 题(原站入口)。

题面所称的“语法指导翻译”属于下列哪一类方法?

  • A. 动态语义分析
  • B. 中间代码优化
  • C. 静态语义分析
  • D. 目标代码优化
答案与解析

平台答案:C。

整理解析

通常称为语法制导翻译:把属性和语义动作附在产生式上,随语法分析计算类型等信息,进行静态检查或生成代码。在本题分类中选 C。它也能承担代码生成任务,并非只限于静态语义分析。

题目 053

来源:知识点练习「程序设计语言基础」第 53 题(原站入口)。

下图的二叉表达式树对应哪个简单算术表达式?

原题图

  • A. 10*20+30-40
  • B. 10*(20+30-40)
  • C. 10*(20+30)-40
  • D. 10*20+(30-40)
答案与解析

平台答案:C。

整理解析

根是减号,右孩子为 40;左子树为乘法,其左孩子是 10,右子树计算 20+30。按树的分组关系得到 10*(20+30)-40,选 C。

题目 054

来源:知识点练习「程序设计语言基础」第 54 题(原站入口)。

按常见的数值运算和赋值规则,下列哪种操作会涉及把整型数据转换成浮点型数据?

  • A. 把浮点变量的值赋给整型变量
  • B. 把整型常量赋给整型变量
  • C. 将整型变量与浮点型变量相加
  • D. 将浮点常量与浮点型变量相加
答案与解析

平台答案:C。

整理解析

混合相加时,通常先把整数转换到参与运算的浮点类型,再进行计算,选 C。A 的转换方向相反;B、D 不涉及整型到浮点型这一方向的转换。

题目 056

来源:知识点练习「程序设计语言基础」第 56 题(原站入口)。

观察下图的非确定有限自动机 NFA,它能接受下列哪个字符串?

原题图

  • A. 0110
  • B. 0101
  • C. 1100
  • D. 1010
答案与解析

平台答案:A。

整理解析

原图先读 0,从中间的 ε 转移进入可重复读 1 的回路,最后再读 0 到终态,语言为 01*0。因此 0110 有完整接受路径,选 A;B 的末字符不是 0,C、D 的首字符不是 0。仅检查首尾是必要条件,本图的中间回路同时保证 A 的内部两个 1 可被读入。

题目 057

来源:知识点练习「程序设计语言基础」第 57 题(原站入口)。

函数 f、g 的定义见图。f 执行到 g(a) 时采用引用调用,f 最终返回哪个值?

原题图

  • A. 14
  • B. 18
  • C. 24
  • D. 28
答案与解析

平台答案:D。

整理解析

f 的 a 初值为 5;g 的形参 x 引用它。g 中先算 m = 5×2 = 10,再令 x = 10−1 = 9,使 a 同时变为 9,g 返回 x+m = 19。于是 f 的 c = 19,返回 a+c = 9+19 = 28,选 D。

题目 058

来源:知识点练习「程序设计语言基础」第 58 题(原站入口)。

通用高级语言通常提供描述数据、运算、控制和数据传输的成分。其中基本控制结构包括顺序、哪一项以及循环?

  • A. 选择
  • B. 递归
  • C. 递推
  • D. 函数
答案与解析

平台答案:A。

整理解析

结构化程序设计的三种基本控制结构是顺序、选择和循环。选择根据条件决定执行哪条分支,因此选 A。递归是一种调用与问题求解方式,不是这里缺少的控制结构名称。

题目 059

来源:知识点练习「程序设计语言基础」第 59 题(原站入口)。

编译 C/C++ 源程序时,哪个阶段主要负责检查各条语句的结构是否合法?

  • A. 词法分析
  • B. 语义分析
  • C. 语法分析
  • D. 目标代码生成
答案与解析

平台答案:C。

整理解析

语句由记号按文法规则组合,检查这种结构属于语法分析,选 C。语义分析进一步检查类型与名称使用等约束,不能与结构检查混淆。

题目 060

来源:知识点练习「程序设计语言基础」第 60 题(原站入口)。

编译或解释高级语言程序时,要保存并查询源程序中符号的类型、特征等属性。这些信息应放在哪种结构中?

  • A. 哈希表
  • B. 符号表
  • C. 堆栈
  • D. 队列
答案与解析

平台答案:B。

整理解析

按用途,这份名称及属性信息称为符号表,选 B。哈希表可用来加速符号表查找,但只是实现方式;栈和队列也不对应本题所问的编译器信息表名称。

题目 061

来源:知识点练习「程序设计语言基础」第 61 题(原站入口)。

在分阶段的编译器中,检查源程序字符及其按构造规则组成的符号是否符合语言规定,主要由哪个阶段负责?

  • A. 词法分析
  • B. 语法分析
  • C. 语义分析
  • D. 代码生成
答案与解析

平台答案:A。

整理解析

词法分析把字符序列识别为标识符、关键字、常量、运算符等记号,并检查其构成,选 A。后续语法分析才检查这些记号的组合结构。

题目 062

来源:知识点练习「程序设计语言基础」第 62 题(原站入口)。

下图给出一个带 ε 转移的非确定有限自动机 NFA。以下哪个 DFA 与它接受完全相同的字符串集合?

原题图

  • A. 选项 A
  • B. 选项 B
  • C. 选项 C
  • D. 选项 D
答案与解析

平台答案:C。

整理解析

原图从 S0 先读 0 到 S1;中段可直接读一个 0 到 S4,或经 ε 进入至少读一次 1 的回路后到 S4;最后必须读 0 到 S5。因此语言为 000 或 01ⁿ0(n≥1)。C 正好具有这两条分支,选 C。A 会接受原图不接受的 00;B、D 均不能接受 010,不能与原 NFA 等价。

题目 063

来源:知识点练习「程序设计语言基础」第 63 题(原站入口)。

函数 f、g 见图,执行 y=f(2)。其中调用 g(la) 分别使用引用调用和值调用时,表达式完成后 y 的值依次是多少?

原题图

  • A. 9、6
  • B. 20、6
  • C. 20、9
  • D. 30、9
答案与解析

平台答案:B。

整理解析

f 的参数 x = 2,局部 la = x+1 = 3。按引用调用 g 时,g 将所引用对象更新为 3×3+1 = 10,f 返回 10×2 = 20;按值调用时只更新副本,la 仍为 3,f 返回 3×2 = 6,选 B。两种方式按题设分别代入,g 与 f 的同名 x 不能混为一体。

题目 064

来源:知识点练习「程序设计语言基础」第 64 题(原站入口)。

把编译过程分为词法分析、语法分析、语义分析、中间代码生成、代码优化、目标代码生成。第(64)空问语法分析的输入是什么;第(65)空问程序括号不配对通常在哪一阶段被发现。本题回答第(64)空。

  • A. 记号流
  • B. 字符流
  • C. 源程序
  • D. 分析树
答案与解析

平台答案:A。

整理解析

词法分析把源程序的字符流切分为记号流,语法分析再据此构建结构,所以输入是记号流,选 A。纠错:这里的“字符流”就是词法分析所接收的字符序列,无须转而用 Java 的字符 I/O 类解释,也不能说它与编译过程无关。

题目 065

来源:知识点练习「程序设计语言基础」第 65 题(原站入口)。

把编译过程分为词法分析、语法分析、语义分析、中间代码生成、代码优化、目标代码生成。第(64)空问语法分析的输入是什么;第(65)空问程序括号不配对通常在哪一阶段被发现。本题回答第(65)空。

  • A. 词法分析
  • B. 语法分析
  • C. 语义分析
  • D. 目标代码生成
答案与解析

平台答案:B。

整理解析

单个左、右括号都可能是合法记号,但它们是否配对属于结构约束,通常由语法分析检查,选 B。这个判断与第(64)空的“语法分析输入是记号流”是同一材料的不同问题。

题目 066

来源:知识点练习「程序设计语言基础」第 66 题(原站入口)。

将表达式 (a-b)*(c+d) 改写为后缀式(逆波兰式),应选哪项?

  • A. abcd-+*
  • B. ab-c+d*
  • C. abc-d*
  • D. ab-cd+*
答案与解析

平台答案:D。

整理解析

左子表达式写成 ab-,右子表达式写成 cd+,外层乘法放在二者之后,得到 ab-cd+*,选 D。虽然题干与第 9 题计算相同,但选项及正确答案字母不同,应独立保留。

题目 067

来源:知识点练习「程序设计语言基础」第 67 题(原站入口)。

根据下图的表达式语法树,选择其后缀式(逆波兰式)。

原题图

  • A. abcd-+*
  • B. ab-c+d*
  • C. abc-d*+
  • D. ab-cd+*
答案与解析

平台答案:C。

整理解析

根是加号,左子树只有 a;右子树先做 b−c,再乘 d。后序遍历依次得到 a b c - d * +,对应 C,表达式为 a+(b-c)*d。

题目 068

来源:知识点练习「程序设计语言基础」第 68 题(原站入口)。

用 C/C++ 编写的应用程序,按常见工具链应依次经过哪些处理才形成可执行程序?

  • A. 预处理→编译→汇编→链接
  • B. 编译→预处理→汇编→链接
  • C. 汇编→预处理→链接→编译
  • D. 链接→预处理→编译→汇编
答案与解析

平台答案:A。

整理解析

先处理宏和头文件等预处理内容,再编译为汇编表示,汇编成目标文件,最后链接目标文件与库,选 A。实际工具链可把多个步骤合并执行,不一定把所有中间文件保存到磁盘。

题目 069

来源:知识点练习「程序设计语言基础」第 69 题(原站入口)。

程序发生嵌套函数调用或递归调用时,通常用哪种结构保存状态,以便按正确次序返回?

  • A. 队列
  • B. 优先队列
  • C. 栈
  • D. 散列表
答案与解析

平台答案:C。

整理解析

最后进入的调用要先返回,正好对应栈的后进先出特性,选 C。每层调用的返回位置和需要恢复的状态可随栈帧保存;优化可以省去部分帧,但不改变本题所考查的返回次序。

题目 070

来源:知识点练习「程序设计语言基础」第 70 题(原站入口)。

foo()、hoo() 的定义见图。hoo 的第一个参数按值传递,第二个参数按引用传递。调用 foo(5) 后,print(x) 输出多少?

原题图

  • A. 24
  • B. 25
  • C. 30
  • D. 36
答案与解析

平台答案:A。

整理解析

foo 的 args = 5、局部 x = 6;hoo(args,x) 的第一个形参取得副本 5,第二个形参 a 引用 foo 的 x。hoo 先将自己的 x 改为 4,再执行 a = 6×4 = 24,所以打印 24,选 A。纠错:平台把 foo 中的 x 称为全局变量,原图明确显示它是 foo 的局部变量。

题目 071

来源:知识点练习「程序设计语言基础」第 71 题(原站入口)。

下面的上下文无关文法描述算术表达式,其中 +、-、* 分别是加、减、乘,id 仅表示由单个字母命名的变量。哪个表达式可由文法产生?

1
2
3
E → E+T | E-T | T
T → T*F | F
F → -F | id
  • A. a+-b-c
  • B. a*(b+c)
  • C. a*-b+2
  • D. -a/b+c
答案与解析

平台答案:A。

整理解析

一元负号允许 -b,E 的加减规则允许把 a、-b、c 依次组成 a+-b-c,因此选 A。文法不含括号、除号或数字常量,分别排除 B、D、C。纠错:平台称乘法推导必先经过 E+T 或 E−T 并不成立,也可直接 E→T→T*F;C 的关键问题是常量 2 无法由 id 产生。

题目 072

来源:知识点练习「程序设计语言基础」第 72 题(原站入口)。

下图为有限自动机的状态转换关系。它能接受哪个二进制字符串?

原题图

  • A. 1001
  • B. 1100
  • C. 1010
  • D. 0101
答案与解析

平台答案:B。

整理解析

输入 1100 的状态路径为 s0→s1→s2→s2→s2,结束在接受态 s2,选 B。图中连续读到两个 1 即可进入 s2,此后 0、1 都自循环;其余选项均不含连续的 11,不能到达接受态。

题目 073

来源:知识点练习「程序设计语言基础」第 73 题(原站入口)。

按常见程序运行时布局,内存分为静态数据区、代码区、栈区和堆区。第(73)空问哪个区域通常随函数调用与返回自动管理;第(74)空问哪个区域由程序按需要申请和释放。本题回答第(73)空。

  • A. 静态数据区
  • B. 代码区
  • C. 栈区
  • D. 堆区
答案与解析

平台答案:C。

整理解析

调用时建立、返回时撤销的活动记录通常放在栈区,选 C。纠错:具体栈帧的调整一般由编译生成的调用代码及运行时按约定完成,不是操作系统逐次分配每个函数帧;栈向低地址增长也只是常见实现,不是所有体系结构的必然规定。

题目 074

来源:知识点练习「程序设计语言基础」第 74 题(原站入口)。

按常见程序运行时布局,内存分为静态数据区、代码区、栈区和堆区。第(73)空问哪个区域通常随函数调用与返回自动管理;第(74)空问哪个区域由程序按需要申请和释放。本题回答第(74)空。

  • A. 静态数据区
  • B. 代码区
  • C. 栈区
  • D. 堆区
答案与解析

平台答案:D。

整理解析

程序需要在运行中选择容量和生命周期的对象,通常从堆区申请空间,例如 C 的 malloc/free,选 D。题目采用显式分配释放的模型;垃圾回收语言可由运行时回收对象,堆的布局和增长方向也依实现而定。

题目 075

来源:知识点练习「程序设计语言基础」第 75 题(原站入口)。

根据下图的状态转换,哪个正规式与该有限自动机等价?

原题图

  • A. (0|1)*
  • B. (0|10)*
  • C. 0*(10)*
  • D. 0*(1|0)*
答案与解析

平台答案:B。

整理解析

q0 是初态和接受态,读一个 0 可原地返回,读 10 可经 q1 返回。接受串就是 0、10 这两种块按任意顺序连接,选 B。星号表示零次或任意有限次重复,包含空串,并不是无限长串。A、D 还接受单独的 1;C 不能表示 100。

题目 076

来源:知识点练习「程序设计语言基础」第 76 题(原站入口)。

算术表达式 a*(b+c/d)-e 对应哪个后缀式?

  • A. a b c d / + * e -
  • B. a b c d e * + / -
  • C. a*b+c/d-e
  • D. a b * c d / + e -
答案与解析

平台答案:A。

整理解析

先将 c/d 写为 c d /,再与 b 相加,与 a 相乘,最后减 e,所得序列是 a b c d / + * e -,选 A。后缀式的运算符顺序体现原式的分组和优先级。

题目 077

来源:知识点练习「程序设计语言基础」第 77 题(原站入口)。

对 C/C++ 源程序进行编译时,类型检查属于以下哪个阶段?

  • A. 词法分析
  • B. 语义分析
  • C. 语法分析
  • D. 目标代码生成
答案与解析

平台答案:B。

整理解析

类型检查要判断操作数、运算符、赋值和函数参数是否符合类型约束,属于静态语义分析,选 B。纠错:平台把目标代码生成标成“执行阶段”是错误的;生成目标代码仍在编译过程中,运行时行为不能一概归入该阶段检查。

题目 078

来源:知识点练习「程序设计语言基础」第 78 题(原站入口)。

观察图示有限自动机(题面标注为 DFA),选择其确定性分类,以及它能否接受以 bab 结尾的字符串。

原题图

  • A. 确定有限自动机,能接受以 bab 结尾的字符串
  • B. 确定有限自动机,不能接受以 bab 结尾的字符串
  • C. 非确定有限自动机,能接受以 bab 结尾的字符串
  • D. 非确定有限自动机,不能接受以 bab 结尾的字符串
答案与解析

平台答案:D。

整理解析

初态读 a 时可自环或转入下一状态,所以它是 NFA。从初态通向终态的非循环路径依次读入 a、任意字符、任意字符,因此接受串的倒数第三个字符必须是 a,不能以 bab 结尾,选 D。纠错:题干括注 DFA 与原图的非确定转移不符。

题目 079

来源:知识点练习「程序设计语言基础」第 79 题(原站入口)。

foo、hoo 的定义见图。调用 hoo(a,x) 时,第一个参数按引用传递,第二个参数按值传递。执行 foo(5) 后,按输出顺序会得到哪一组数?

原题图

  • A. 2,5
  • B. 2,15
  • C. 13,5
  • D. 13,15
答案与解析

平台答案:C。

整理解析

foo 中 a = 2、x = 5;hoo 的形参 x 引用 a,形参 y 取得 5 的副本。先算 y = 15,再令所引用对象 x = 15−2 = 13,所以 foo 的 a 变为 13,而它自己的 x 仍为 5。输出 13,5,选 C。

题目 080

来源:知识点练习「程序设计语言基础」第 80 题(原站入口)。

下图二叉树中的 *、/、- 分别表示乘、除、减。该树对应哪个算术表达式?

原题图

  • A. a*b/c-d
  • B. a*b/(c-d)
  • C. a*(b/c-d)
  • D. a*(b-c/d)
答案与解析

平台答案:C。

整理解析

根为乘号,左子树是 a,右子树以减号为根,其左侧为 b/c、右侧为 d。所以分组是 a*(b/c-d),选 C。转回中缀式时必须保留右子树的括号,不能只按中序字符直接拼接。

题目 081

来源:知识点练习「程序设计语言基础」第 81 题(原站入口)。

编译高级语言源程序时,哪种表负责保存各符号的必要属性,以支持语义检查和代码生成?

  • A. 决策表
  • B. 符号表
  • C. 广义表
  • D. 索引表
答案与解析

平台答案:B。

整理解析

符号表把名字与类型、作用域、存储位置等信息关联起来,语义检查和后端生成代码都可以查询它,选 B。这里按表在编译器中的用途命名。

题目 082

来源:知识点练习「程序设计语言基础」第 82 题(原站入口)。

下图给出 NFA,S0 为初态、S3 为接受态。它接受的字符串具有哪项性质?

原题图

  • A. 不能包含连续的 0
  • B. 不能包含连续的 1
  • C. 必须以 101 开头
  • D. 必须以 101 结尾
答案与解析

平台答案:D。

整理解析

在 S0 可循环读任意 0、1;一旦选择离开,就必须读完 1→0→1 才能到达 S3,后面没有继续读入的边。因此语言为 (0|1)*101,选 D。00101、11101 都能被接受,说明连续 0 或 1 均允许,也不要求以 101 开头。

题目 083

来源:知识点练习「程序设计语言基础」第 83 题(原站入口)。

按通常的 Python 语言特点分类,以下哪项不属于其典型特征?

  • A. 跨平台、开源
  • B. 编译型
  • C. 支持面向对象程序设计
  • D. 动态编程
答案与解析

平台答案:B。

整理解析

教材通常把 Python 归为动态的解释型语言,因此本题选 B。纠错与限定:常见实现也会先编译为字节码,还可采用即时编译等技术,不能理解成 Python 完全没有编译过程;这里的分类说的是常见执行方式。

题目 084

来源:知识点练习「程序设计语言基础」第 84 题(原站入口)。

Python 中哪种结构可修改、保持序列顺序,并且允许元素重复?

  • A. 元组(tuple)
  • B. 字符串(str)
  • C. 列表(list)
  • D. 集合(set)
答案与解析

平台答案:C。

整理解析

列表支持按位置访问和修改,也允许重复元素,因此选 C;元组和字符串不可变,集合不保留重复元素,也不是序列。纠错:平台解析误把 B 的 str 讲成 dict;此外,Python 3.7 起字典保留插入顺序,不能再笼统称其无序,但它仍是映射而非列表式序列。

题目 085

来源:知识点练习「程序设计语言基础」第 85 题(原站入口)。

在下列 Python 模块或库中,哪一项不提供深度学习模型的构建、训练功能?

  • A. TensorFlow
  • B. Matplotlib
  • C. PyTorch
  • D. Keras
答案与解析

平台答案:B。

整理解析

Matplotlib 的主要职责是数据绘图,不是模型构建和训练框架,选 B。其余三项提供深度学习模型相关能力。“不支持”按本题应理解为不直接承担建模训练;Matplotlib 仍可用于显示训练曲线和结果。

题目 086

来源:知识点练习「程序设计语言基础」第 86 题(原站入口)。

使用 pip 安装 numpy,以下哪个命令正确?

  • A. pip numpy
  • B. pip install numpy
  • C. install numpy
  • D. import num
答案与解析

平台答案:B。

整理解析

pip 的 install 子命令用于安装包,所以选 B。import 是程序运行时导入模块的语句,不是安装命令。需要明确使用哪个 Python 环境时,也可运行 python -m pip install numpy。

题目 087

来源:知识点练习「程序设计语言基础」第 87 题(原站入口)。

Python 程序已定义 X=[1,2],表达式 X*2 得到什么?

  • A. [1,2,1,2]
  • B. [1,1,2,2]
  • C. [2,4]
  • D. 出错
答案与解析

平台答案:A。

整理解析

列表乘整数表示按原顺序重复序列两次,得到 [1,2,1,2],选 A,不是逐元素乘 2。该操作重复的是元素引用,并非对元素执行深复制;本题元素为整数,不影响上述结果。

来源补充(2022年上半年第21题)

原题代码 X=[1,2] 及A、B、C选项确实都使用全角逗号“,”,D为“出错”。Python按这段字面代码解析会产生SyntaxError,因此按原代码应选D;平台A对应把逗号当作排版问题、按通常列表语法理解的读法。原题标点与平台答案分别保留。列表重复仅重复元素引用,不是深复制。

题目 088

来源:知识点练习「程序设计语言基础」第 88 题(原站入口)。

Python 中哪种结构不可变、有序且允许重复元素?

  • A. tuple(元组)
  • B. dict(字典)
  • C. list(列表)
  • D. set(集合)
答案与解析

平台答案:A。

整理解析

元组是不可变序列,保存顺序且允许重复,选 A。纠错:不可变指元组中的元素引用不能增删或替换,不代表变量名不能重新赋值,也不保证其中可变对象的内部内容不能变化。平台所称字典无序也已过时,Python 3.7 起保证其插入顺序。

题目 089

来源:知识点练习「程序设计语言基础」第 89 题(原站入口)。

一次函数调用通常会在栈顶建立活动记录,即栈帧,用来保存执行该次调用所需的信息。以下哪项不属于该调用的栈帧内容?

  • A. 形参变量
  • B. 全局变量
  • C. 返回地址
  • D. 局部变量
答案与解析

平台答案:B。

整理解析

全局变量的生命周期不依附于某一次函数调用,通常放在独立的全局或静态存储区域,选 B。栈帧用于保存调用相关参数、局部状态和返回信息。表述修正:栈帧不专属于虚拟机,本机程序也使用;具体参数和局部量还可能分配在寄存器中。

题目 090

来源:知识点练习「程序设计语言基础」第 90 题(原站入口)。

编译器与解释器是程序语言处理的两种基本形态。按传统教材对本机代码编译执行的比较,以下哪项描述编译器的工作方式及特点?

  • A. 边翻译边执行,程序运行效率低且可移植性差
  • B. 先翻译后执行,程序运行效率高且可移植性好
  • C. 边翻译边执行,程序运行效率低但可移植性好
  • D. 先翻译后执行,程序运行效率高但可移植性差
答案与解析

平台答案:D。

整理解析

先把源程序翻译为目标程序,再运行目标程序,符合编译执行,按本机二进制的教材比较选 D。限定:可移植性较差指特定指令集和运行环境的目标二进制,不等于源代码不能换平台重新编译;编译也可面向可移植字节码,效率比较同样依赖具体实现。

题目 091

来源:知识点练习「程序设计语言基础」第 91 题(原站入口)。

在编译或解释高级语言程序所需的语法分析中,递归子程序分析法属于哪种方向的分析?

  • A. 自上而下
  • B. 自下而上
  • C. 从左至右
  • D. 从右至左
答案与解析

平台答案:A。

整理解析

递归子程序法为非终结符编写分析过程,从文法开始符号逐层展开产生式,属于自上而下,选 A。纠错:这里的子程序是语法分析器自身的函数,不是沿待编译程序的 main 和业务函数调用链执行;也不能只凭“递归”二字推断任意算法的分析方向。

题目 092

来源:知识点练习「程序设计语言基础」第 92 题(原站入口)。

以下哪项不是 Python 3 中合法的异常处理写法?

  • A. try…except…
  • B. try…except…finally
  • C. try…catch…
  • D. raise
答案与解析

平台答案:C。

整理解析

Python 使用 except 子句捕获异常,没有 try…catch 语法,因此选 C。raise 是合法的抛出或重新抛出异常的语句。题目把“异常处理结构”作了宽泛使用:raise 本身不是捕获异常的结构,但不是非法关键字或非法语法。

题目 093

来源:知识点练习「程序设计语言基础」第 93 题(原站入口)。

在 Python 3 中,计算 list(range(11))[10:0:-2] 会得到哪项结果?

  • A. [10,8,6,4,2,0]
  • B. [10,8,6,4,2]
  • C. [0,2,4,6,8,10]
  • D. [0,2,4,6,8)
答案与解析

平台答案:B。

整理解析

range(11) 给出 0~10;切片从索引 10 开始,每次减 2,并且不包含终止索引 0,所以结果为 [10,8,6,4,2],选 B。原题笔误(已核实):D 项原站确写 [0,2,4,6,8),方括号与全角圆括号不匹配;题面保留原写法,不默改成合法列表。这不影响按切片规则判断平台答案 B。

题目 094

来源:知识点练习「程序设计语言基础」第 94 题(原站入口)。

Python 3 执行 x=input() 时,用户输入 123 并按回车。此后 x 的值是哪一项?

  • A. 123
  • B. 1,2,3
  • C. 1 2 3
  • D. '123'
答案与解析

平台答案:D。

整理解析

input() 读取一行并返回去掉末尾换行符的字符串,不会自动把数字文本转换为整数。因此 x 是字符串 '123',选 D;若需要整数,还须显式调用 int。

历年真题:2026年5月(考生回忆版)

本节收录本卷归入本模块的 6 题;题号沿用试卷编号;同材料的不同小问分别保留。

2026-05 Q017

来源:2026年5月软件设计师综合知识真题(考生回忆版)第 17 题(原站试卷目录)。

C/C++源程序包含表达式 "start"+2.71828。它在哪个阶段、以哪类问题被处理?

  • A. 能够编译,运行时才出错

  • B. 编译阶段报告静态语义错误

  • C. 编译阶段报告语法错误

  • D. 编译和运行均无错误或警告

答案与解析

平台答案:B。

整理解析

加法表达式在文法上可以解析,但字符串字面量在这里转换为指针后,不能与double相加;指针偏移的另一操作数须为整数。因此是类型检查中的静态语义问题,对应B,而不是运行时才发现的问题。

补充与纠错

来源把C和C++字符串字面量都表述成const char*不够准确:"start"在C中是char[6],在C++中是const char[6],此处再发生数组到指针的转换;两种语言都不允许修改字符串字面量。运算限制属于类型/约束规则,不是加法表达式的文法缺失。

2026-05 Q030

来源:2026年5月软件设计师综合知识真题(考生回忆版)第 30 题(原站试卷目录)。

编译器用语法制导翻译处理含变量的表达式。题目问这种处理的主要目标是什么。

  • A. 求出表达式的值

  • B. 建立表达式的分析树

  • C. 生成中间代码

  • D. 填写符号表

答案与解析

平台答案:C。

整理解析

含运行时变量的表达式通常不能在编译时求出完整结果,需要把其运算关系转换成运行时可执行的中间表示。按本题的语法制导翻译语境,应选C;不要据此把语义分析的所有工作都等同于生成中间代码。

补充与纠错

原解析把符号表维护主要限定在词法、语法分析阶段不准确:类型、作用域和名字绑定等也在语义分析中处理。另外,编译器能通过常量折叠求出常量子表达式的值,不能概括成编译阶段从不计算表达式。

2026-05 Q053

来源:2026年5月软件设计师综合知识真题(考生回忆版)第 53 题(原站试卷目录)。

关于 Python 的 is 与 ==,正确的是( )。

  • A. == 比较内存地址,is 比较值

  • B. 数字不能用 is 比较,只能用 ==

  • C. is 比较内存地址,== 比较值

  • D. 两者完全等价

答案与解析

平台答案:C。

整理解析

按选项意图选 C。准确地说,is 判断是否为同一个对象,== 判断相等关系;“比较内存地址”只是常见实现中的简化说法。数字对象也能做身份比较,但数值相等应使用 ==,是否有小整数缓存不是 is 能否使用的前提。

2026-05 Q062

来源:2026年5月软件设计师综合知识真题(考生回忆版)第 62 题(原站试卷目录)。

执行下面的 Python 代码,输出为( )。

1
2
3
nums = [1, 2, 3]
result = [i * 2 for i in nums if i > 1]
print(result)
  • A. []

  • B. [4,6]

  • C. [2,4,6]

  • D. [6]

答案与解析

平台答案:B。

整理解析

选 B。条件 i > 1 保留 2、3,再分别乘 2,得到 [4, 6]。print 的全角括号按 Python 代码意图整理为半角;若照录全角括号执行,会产生语法错误。

2026-05 Q065

来源:2026年5月软件设计师综合知识真题(考生回忆版)第 65 题(原站试卷目录)。

识别高级语言源程序中单词(记号)的有限自动机 FA 分为 NFA 与 DFA。NFA 的不确定性体现在哪些方面( )?

① 允许标记为 ε 的状态转移 ② 同一状态读入同一字符时,可转向多个下一状态 ③ 可有多个终态

  • A. 仅①

  • B. ①②③

  • C. 仅②

  • D. 仅①和②

答案与解析

平台答案:D。

整理解析

选 D。按本题把 ε 转移也纳入 NFA 的定义,①允许不消耗输入就转移,②允许同一输入有多个后继。DFA 同样可以有多个接受状态,所以③不体现非确定性;部分教材会把带 ε 转移的形式另称 ε-NFA。

2026-05 Q069

来源:2026年5月软件设计师综合知识真题(考生回忆版)第 69 题(原站试卷目录)。

执行下面的 Python 代码后,lst 为( )。

lst = [1, 2, 3, 4, 5]
lst[1:4] = []
  • A. [4,5]

  • B. [2,3,4]

  • C. [1]

  • D. [1,5]

答案与解析

平台答案:B。

整理解析

平台答案为 B,但按所给代码应选 D。lst[1:4] 覆盖索引 1、2、3,给该切片赋空列表会删除 2、3、4,留下 [1, 5]。平台解析只计算了读取切片的结果,遗漏 = [] 的赋值删除操作。

2025年下半年软件设计师考试基础知识真题(考生回忆版)

本节已整理 1 条来源记录;题号沿用来源,答案与解析默认收起。

2025-11 Q012

来源:第 12 题(原站入口)。

关于Python函数参数的下列说法,错误的是( )?

  • A.

    调用函数时,关键字参数通过参数名指定,可以不按定义的顺序传递

  • B.

    函数定义时,默认参数放在位置参数之后

  • C.

    调用函数时,位置参数必须按照定义时的顺序传递

  • D.

    一个函数不能同时使用位置参数和关键字参数

答案与解析

平台答案:D。

整理解析

选D。函数调用可以混用位置实参与关键字实参,例如定义def f(a, b): return a + b后调用f(1, b=2)。位置实参依次匹配,关键字实参按参数名匹配;同一形参不能重复得到两个值。

补充与纠错

B的教材表述适用于普通位置形参列表中“必需参数在前、带默认值参数在后”的规则,不宜将“默认参数”和“位置参数”视为互斥类别;带默认值的参数仍可按位置传入。关键字专用参数则可出现def g(*, a=1, b): ...这样的合法次序。

2025年上半年软件设计师考试基础知识真题(考生回忆版)

本节已整理 2 条来源记录;题号沿用来源,答案与解析默认收起。

2025-05 Q004

来源:第 4 题(原站入口)。

将编译器按处理阶段划分,以下哪些任务属于语义分析阶段( )?

①识别记号;②识别句子结构;③检查程序中的语法错误;④填写符号表;⑤生成中间代码。

  • A.

    ②③

  • B.

    ③④

  • C.

    ①②

  • D.

    ④⑤

答案与解析

平台答案:D。

整理解析

平台答案D(④⑤)。①将字符识别为记号,属于词法分析;②③判断句子结构及语法合法性,属于语法分析。语义处理要关联标识符、类型等信息,涉及符号表;若采用结合中间表示构造的语法制导实现,也可同时生成中间代码。

补充与纠错

阶段边界存在口径问题:常见六阶段模型把“中间代码生成”独立列在语义分析之后,符号表的建立与使用也贯穿多个阶段。题干强调按阶段划分,却将⑤算入语义分析,不够严谨;保留平台D,并说明它采用了合并实现的理解,不能当作所有编译器共有的唯一分工。

2025-05 Q012

来源:第 12 题(原站入口)。

为了加快访问,编译器可将频繁使用的临时变量(例如循环计数器)分配到( )中。

  • A.

    栈

  • B.

    堆

  • C.

    静态存储区

  • D.

    寄存器

答案与解析

平台答案:D。

整理解析

选D。寄存器位于CPU内部,把高频使用的值分配到寄存器可减少反复访存。栈、堆和静态区是不同的内存分配或生命周期安排,不能替代寄存器分配带来的访问优势。

补充与纠错

寄存器数量有限,编译器仍会根据活跃区间和冲突进行分配,必要时把值溢出到内存;并非所有临时变量都能一直留在寄存器。

2024年下半年软件设计师基础知识真题(学员版)

本节已整理 5 条来源记录;题号沿用来源,答案与解析默认收起。

2024-11-student Q007

来源:第 7 题(原站入口)。

定义Python字典dict1={'name':'David','age':10,'class':'first'}。针对该字典,下列哪条语句不正确( )?

  • A.

    print(dict1['name'])

  • B.

    del dict1

  • C.

    del dict1[1]

  • D.

    dict1['age']=15

答案与解析

平台答案:C。

整理解析

选C。字典按键访问,而非按元素位置编号;当前没有整数键1,执行del dict1[1]会抛出KeyError。A读取name,B删除变量名dict1的绑定,D更新age,分别从题设初始字典执行均有效。整数1本身可以用作字典键,只是此字典没有该键。

2024-11-student Q017

来源:第 17 题(原站入口)。

C/C++函数fun无返回值且无参数,下列哪项是正确声明( )?

  • A.

    fun(void);

  • B.

    void fun(...).

  • C.

    void fun(void,... )

  • D.

    void fun(void);

答案与解析

平台答案:D。

整理解析

选D。声明void fun(void);同时写明返回类型为void和无参数,适用于C和C++。A缺少要求的void返回类型,B的省略号表示可变参数且原文末尾为句点,C也不能用void,...表达无参数。

2024-11-student Q035

来源:第 35 题(原站入口)。

以下Python代码会输出什么( )?

l = [a*a for a in range(5) if a % 2]
print(l)
  • A.

    \[1,9,25\]
  • B.

    \[0,4,16\]
  • C.

    \[0,1,4,9,16\]
  • D.

    \[1,9\]
答案与解析

平台答案:D。

整理解析

选D。range(5)依次产生0、1、2、3、4,条件a % 2只保留余数非零的1和3,平方后得到[1, 9]。

2024-11-student Q046

来源:第 46 题(原站入口)。

下面列出用Python定义并调用foo的语句,其中不正确的是( )。

① def foo(x, y)

② print('x+y',x+y)

③ return x,y,x+y

④ a,b,c=foo(1,2)

  • A.

    ②

  • B.

    ④

  • C.

    ③

  • D.

    ①

答案与解析

平台答案:D。

整理解析

选D,即①。函数定义头必须以冒号结束,应为def foo(x, y):。按②③在函数体、④在调用处的题意,print语句合法,return把x、y、x+y打包为一个元组,调用后可解包给a、b、c。

补充与纠错

题面保留①缺冒号的原代码,不在可见题干中修正;原题按编号列出语句,未显示函数体缩进,解析按②③为函数体的常规题意说明,不把这份无缩进列表直接当作完整可运行程序。返回的是一个含三个元素的元组,不是函数执行了三次返回。

2024-11-student Q047

来源:第 47 题(原站入口)。

在C/C++的函数调用中,用数组M的名字作实参,实质上传递的是( )。

  • A.

    数组M第一个元素的值传给形参

  • B.

    数组M第一个元素的地址传给形参

  • C.

    数组M所有元素的值分别拷贝给形参

  • D.

    数组M所有元素的地址分别拷贝给形参

答案与解析

平台答案:B。

整理解析

选B。普通数组实参在此类调用中通常转换为指向首元素的指针,传入的是这一地址值,不会自动复制整个数组,也不是逐个传送各元素地址。函数可通过该指针访问原数组的元素。

补充与纠错

传递指针值仍是按值传参,不能因此说C语言拥有引用参数机制;修改指针所指元素与修改形参指针本身不同。C++还可显式使用数组引用等接口避免这种转换,平台结论针对普通数组参数调用。

2024年上半年软件设计师考试综合知识(专业解析+参考答案)

本节已整理 7 条来源记录;题号沿用来源,答案与解析默认收起。

2024-05 Q005

来源:第 5 题(原站入口)。

【考生回忆版】执行下列Python语句后,列表y的内容为( )。

x=[1,2,3]
y=x+[4,5,6]
  • A.

    出错

  • B.

    \[1,2,3,4,5,6\]
  • C.

    \[5,7,9\]
  • D.

    [1,2,3,[4,5,6]]

答案与解析

平台答案:B。

整理解析

选B。列表的+运算将两个列表按顺序拼接,得到[1,2,3,4,5,6];它既不是把对应元素相加,也不是把第二个列表作为一个嵌套元素加入。此处创建新列表y,x仍为[1,2,3]。

2024-05 Q019

来源:第 19 题(原站入口)。

【考生回忆版】表达式b*(a+c)- d的后缀式为( )。其中+、-、*分别表示加、减、乘,按通常的优先级与结合性运算。

  • A.

    ba+cd*-

  • B.

    bacd+*-

  • C.

    ba*c+d*-

  • D.

    bac+*d-

答案与解析

平台答案:D。

整理解析

选D。先把括号内a+c写为ac+,再把b与该结果相乘写为bac+*,最后减d,得到bac+*d-。后缀式在操作数之后放运算符,不能仅删掉原表达式的括号。

2024-05 Q022

来源:第 22 题(原站入口)。

【考生回忆版】关于通过解释器运行程序,以下说法错误的是( )。

  • A.

    可以由解释器直接分析并执行高级语言源程序代码

  • B.

    与直接运行编译后的机器码相比,通过解释器运行程序的速度更慢

  • C.

    解释器运行程序比运行编译和链接方式产生的机器代码效率更高

  • D.

    可以先将高级语言程序转换为字节码,再由解释器运行字节码

答案与解析

平台答案:C。

整理解析

选C。通常的纯解释执行需要在运行时分派、分析或执行中间指令,不能笼统说比直接运行编译链接所得机器码更高效。A、D分别描述直接解释源程序与先生成字节码再解释的两种实现路线。

补充与纠错

解释执行不必逐行读取源文件,也可执行语法树或字节码。性能取决于实现、优化、JIT及负载,B按传统纯解释与相应本机码的常见比较理解;Java字节码通常由虚拟机解释或JIT处理,不是普通CPU直接执行的本机指令。

2024-05 Q034

来源:第 34 题(原站入口)。

【考生回忆版】正规式(ab|c)(1|2|3)所表示的正规集有( 34 )个元素,其中( 35 )属于该集合。

请作答:第34题。

  • A.

    3

  • B.

    9

  • C.

    6

  • D.

    5

答案与解析

平台答案:C。

整理解析

选C。第一组从ab、c两段字符串中取一段,第二组从1、2、3中取一个字符,连接后得到2×3=6个不同字符串。这里ab是连续的两个字符,不是a与b二选一。

2024-05 Q035

来源:第 35 题(原站入口)。

【考生回忆版】正规式(ab|c)(1|2|3)所表示的正规集有( 34 )个元素,其中( 35 )属于该集合。

请作答:第35题。

  • A.

    abc123

  • B.

    a1

  • C.

    ab2

  • D.

    c23

答案与解析

平台答案:C。

整理解析

选C。合法字符串先取ab或c,再接1、2、3中的恰好一个字符,因此ab2符合。a1缺少b,c23多取了一个末尾字符,abc123也不符合两组各选一项的结构。

2024-05 Q063

来源:第 63 题(原站入口)。

下列关于Python异常处理的表述,哪一项正确( )?

  • A.

    允许由程序主动使用raise语句引发异常

  • B.

    try语句中有except子句就不能有finally子句

  • C.

    可以用异常处理捕获程序中的所有错误

  • D.

    引发一个不存在索引的列表元素会引发NameError错误

答案与解析

平台答案:A。

整理解析

选A。程序可用raise主动引发异常。try可同时包含except与finally;列表索引越界通常引发IndexError,未定义名称才引发NameError。异常处理不能自动识别没有抛出异常的逻辑错误,因此C也不成立。

补充与纠错

平台把sys.exit()当成无法捕获的情况不准确:它引发SystemExit,可显式捕获;MemoryError也属于可捕获的Python异常,但进程被操作系统强制终止等情形无法靠Python异常处理恢复。finally在正常异常展开时执行,不应无条件推广到强制结束进程。

2024-05 Q066

来源:第 66 题(原站入口)。

运算符栈最初为空。把中缀表达式9/2+(6*7-3*4)/5转换为等价后缀表达式时,扫描到数字4这一刻,栈中从底到顶依次有哪些元素( )?

  • A.

    /+(-*

  • B.

    /+(*-*

  • C.

    +(*-

  • D.

    +(-*

答案与解析

平台答案:D。

整理解析

选D。读到加号时,前面的除号因优先级更高而出栈;左括号入栈后,读到减号又使6与7之间的乘号出栈。接着3后的乘号入栈,读到4只输出操作数,因此栈从底到顶为+ ( - *。

2023年下半年软件设计师考试基础知识(专业解析+参考答案)

本节已整理 4 条来源记录;题号沿用来源,答案与解析默认收起。

2023-11 Q026

来源:第 26 题(原站入口)。

【考生回忆版】关于汇编语言程序,下列说法错误的是( )。

  • A.

    汇编程序的功能是将汇编语言源程序翻译为相应的目标程序

  • B.

    用汇编语言编写的程序可以直接被计算机硬件执行

  • C.

    汇编语言是低级程序设计语言

  • D.

    汇编语言与计算机硬件体系结构密切相关

答案与解析

平台答案:B。

整理解析

选B。汇编源代码中的助记符需要由汇编器转换为目标代码,再按工具链要求链接、装入才能运行。处理器直接解释的是机器指令,汇编语言仍是与具体指令集密切相关的低级语言。

2023-11 Q028

来源:第 28 题(原站入口)。

【考生回忆版】表达式“(a+b)*(c - d)/(e - f*g)”对应的逆波兰式(后缀式)为( )。

  • A.

    ab+c*d-e/f-g*

  • B.

    abcdefg+*- /-*

  • C.

    ab+cd-*efg*- /

  • D.

    a+b*c-d/e-f*g

答案与解析

平台答案:C。

整理解析

选C。先分别得到a+b的后缀ab+、c-d的后缀cd-,乘法组合为ab+cd-;分母e-f*g得到efg-,最后附上除号,结果为ab+cd-*efg*-/。表达式树做左子树、右子树、根的后序遍历也可得到此结果。

2023-11 Q033

来源:第 33 题(原站入口)。

【考生回忆版】编译器将高级语言源程序转换成某种中间代码时,所依据的是( )规则。

  • A.

    词法

  • B.

    语义

  • C.

    语法

  • D.

    等价变换

答案与解析

平台答案:B。

整理解析

选B。中间代码必须表达源程序运算和控制的含义,因此生成规则依据语义。语法结构可组织翻译过程,但真正产生计算、跳转等中间表示的是相应的语义动作。

补充与纠错

语法制导翻译会把语义动作附着在产生式上,因此“依据语义规则”不表示语法分析不参与中间代码生成。

2023-11 Q039

来源:第 39 题(原站入口)。

【考生回忆版】执行下面的Python语句后,列表X为( )。

x= [1,2,3]
x.append([4,5])
  • A.

    \[1,2,3,4,5\]
  • B.

    \[1,2,3\]
  • C.

    \[4,5\]
  • D.

    [1,2, 3,[4,5]]

答案与解析

平台答案:D。

整理解析

平台选D,其意图是考查append把一个列表作为单个元素追加,区别于extend或列表拼接。若第二行使用ASCII逗号且所问为小写x,结果为[1,2,3,[4,5]]。

补充与纠错

原页已核实:题干确为大写X,代码为小写x,第二行4后的逗号确为全角“,”,属于原题字面错误,均原样保留。Python区分大小写,全角逗号也不能充当列表分隔符:按展示代码原样解析会产生SyntaxError,不能无条件声称运行结果就是D。这里只在折叠中说明平台所意指的合法代码行为,未将逗号或变量名静默改正。

2023年上半年软件设计师考试基础知识(专业解析+参考答案)

本节已整理 5 条来源记录;题号沿用来源,答案与解析默认收起。

2023-05 Q021

来源:第 21 题(原站入口)。

正规式s=(0 | 10)*所描述的正规集中,字符串具有以下哪项特点( )。

  • A.

    长度必须是偶数

  • B.

    长度必须是奇数

  • C.

    0不能连续出现

  • D.

    1不能连续出现

答案与解析

平台答案:D。

整理解析

选D。每次可选择一个0或一个10,再重复任意次,因此每个1后面都带有0,不会出现连续的11。0、10分别说明长度可奇可偶,00说明0可以连续出现。

补充与纠错

D是必要特点,不是完整的语言描述:例如字符串1也没有连续11,却不能由0和10拼成。正规式还包含零次重复得到的空串。

2023-05 Q022

来源:第 22 题(原站入口)。

函数foo和hoo的定义如下图。foo调用hoo时,第一个参数按引用传递(call by reference),第二个参数按值传递(call by value),则foo中的Print((a,b)将输出( )。

  • A.

    8,5

  • B.

    39,5

  • C.

    8,40

  • D.

    39,40

答案与解析

平台答案:B。

整理解析

选B。图中foo先令a=8、b=5,调用hoo(a,b);引用参数x是a的别名,值参数m初值为5。执行m=x*m后m=40,再执行x=m−1使a=39,而b未被修改,所以Print(a,b)输出39,5。

补充与纠错

题干Print((a,b)字样照留,代码图实际写Print(a,b),按图中调用分析。平台说“foo中的x随之改变”不准确,foo的局部变量是a、b,hoo中的x引用的是a;这里不是把b按引用传入。

2023-05 Q048

来源:第 48 题(原站入口)。

在 Python 中,要取得一个对象的类型,应使用下列哪一项?

  • A.

    str ()

  • B.

    type ()

  • C.

    id ()

  • D.

    object ()

答案与解析

平台答案:B。

整理解析

对对象调用type(obj)可得到其类型,选B。str用于取得字符串表示,id返回对象标识,object()构造基础对象;题面所列的是调用形式,实际查询时需向type传入对象。

2023-05 Q049

来源:第 49 题(原站入口)。

为 Python 赋值语句 x=( )选择右侧表达式,以下哪一项不能使x成为元组?

  • A.

    (1,2,1,2)

  • B.

    1,2,1,2

  • C.

    tuple ()

  • D.

    (1)

答案与解析

平台答案:D。

整理解析

逗号决定非空元组的构成:(1,2,1,2)和不加括号的1,2,1,2都是元组,tuple()产生空元组;(1)只是加括号的整数1。因此选D;只有一个元素的元组应写成(1,)。

2023-05 Q050

来源:第 50 题(原站入口)。

以下关于 Python 语法的说法中,哪一项不正确?

  • A.

    for语句可以用于在序列(如列表、元组和字符串)上进行迭代访问

  • B.

    循环结构如for和while后可以加else语句

  • C.

    可以用if...else和switch..case语句表示选择结构

  • D.

    支持嵌套循环

答案与解析

平台答案:C。

整理解析

Python使用if/elif/else进行条件分支,并没有名为switch...case的语句,因此选C。for可遍历序列等可迭代对象,for和while均能带else子句,也允许嵌套循环。

补充与纠错

版本说明:Python 3.10起提供match...case结构模式匹配,但它不叫switch...case,不能据此把C原文判成正确。循环else在循环正常结束、未通过break退出时执行,并非每次迭代后的分支。

2022年上半年软件设计师基础知识真题

本节新增4道题,沿用本卷原题号;答案与解析默认收起。

2022-05 Q048

来源:第48题(原站入口)。

程序执行时通过参数在函数或过程之间传递信息。引用调用传递的实参信息是哪一项?

  • A.

    地址

  • B.

    类型

  • C.

    名称

  • D.

    值

答案与解析

平台答案:A。

整理解析

引用调用使形参能够引用实参原有的存储位置,教材通常描述为传递实参地址,选A。通过该引用写入相应对象可影响调用者看到的值。

补充与纠错

“地址”是典型实现方式;语义上重点是别名访问。把一个指针值按值传递与语言提供真正的引用形参也应区分,不能只看参数恰好表示地址就认定调用机制完全相同。

2022-05 Q049

来源:第49题(原站入口)。

对算术表达式a+(b−c)*d,按通常的减、加、乘优先级与结合性,正确的后缀表示是哪一项?

  • A.

    bc-d*a+

  • B.

    abc-d*+

  • C.

    ab+c-d*

  • D.

    abcd-*+

答案与解析

平台答案:B。

整理解析

先写括号内的b c −,再与d相乘得到b c − d *,最后与左操作数a相加,完整顺序为a b c − d * +,对应B。

补充与纠错

在普通实数算术中,A借助加法交换律可以算出同值,但它交换了原表达式最外层加法的左右操作数,不是按原表达式语法树直接转换所得的后缀式。

2022-05 Q053

来源:第53题(原站入口)。

编译高级语言程序时,题面将语句分为“声明语名”和可执行语句。声明所需的信息应填入适当组织的(53);可执行语句应(54)。

请作答:第53题。

  • A.

    符号表

  • B.

    栈

  • C.

    队列

  • D.

    树

答案与解析

平台答案:A。

整理解析

声明提供名称、类型、作用域等信息,应记录到符号表,供后续语义检查和代码生成使用,选A。

补充与纠错

来源开头写作“声明语名”,后文又写“声明语句”,应按后者理解,原字样予以保留。平台合写的AC分别对应53、54两问,不是本问多选。

2022-05 Q054

来源:第54题(原站入口)。

编译高级语言程序时,题面将语句分为“声明语名”和可执行语句。声明所需的信息应填入适当组织的(53);可执行语句应(54)。

请作答:第54题。

  • A.

    翻译成机器代码并加以执行

  • B.

    转换成语法树

  • C.

    翻译成中间代码或目标代码

  • D.

    转换成有限自动机

答案与解析

平台答案:C。

整理解析

可执行语句经分析后被翻译成中间代码或目标代码,选C。语法树可以是中间表示,但不是此处所问的完整处理目标;生成目标代码也不意味着编译器必须当场执行它。

补充与纠错

目标代码未必已经是可独立运行的最终程序,可能还要链接;也可能面向虚拟机。来源“声明语名”按原字样保留,不把排字问题当成另一类语句。

2021年上半年软件设计师基础知识真题

本节新增1道题,沿用本卷原题号;答案与解析默认收起。

2021-05 Q048

来源:第48题(原站入口)。

以下上下文无关文法描述简单算术表达式,id表示单个字母:

1
2
3
E→E+T|T
T→F*T|F
F→id

表达式 a+b*c*d 按此文法生成的语法树是哪一项( )?

  • A.

  • B.

  • C.

  • D.

答案与解析

平台答案:A。

整理解析

选A。E先拆成E+T,左侧E导出a,右侧T导出b*c*d;T→F*T是右递归,所以乘法部分按b*(c*d)组织。根为+,左叶a,右侧两个*向右嵌套,叶子依次是b、c、d。C画的是左结合乘法;B、D还改变了加法与乘法的层次。

2016年上半年软件设计师基础知识真题

2016-05 Q020

来源:第 20 题(原站入口)。

关于高级程序设计语言的编译和解释两种实现方式,下列说法正确的是( )。

  • A.

    编译程序不参与用户程序的运行控制,而解释程序则参与

  • B.

    编译程序可以用高级语言编写,而解释程序只能用汇编语言编写

  • C.

    编译方式处理源程序时不进行优化,而解释方式则进行优化

  • D.

    编译方式不生成源程序的目标程序,而解释方式则生成

答案与解析

平台答案:A。

整理解析

按传统的提前编译与解释执行区别,选A。编译器先把源程序转成目标程序,后者执行时不必由该编译器逐步控制;解释器则在执行期间解释或调度程序操作。

补充与纠错

解释器同样可以用高级语言实现,编译器也可执行优化。现代虚拟机、字节码及JIT常混合编译和解释,不能据传统分类断言所有运行阶段都绝无编译活动。

评论