程序设计语言基础:题库练习¶
已整理本章知识点练习 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?
答案与解析
平台答案: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。
整理解析
原 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 代码,按题目的错误分类应归入哪一项?
- 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 *,其中 -、+、* 都是二元运算,分别表示减、加、乘。下列哪棵语法树与它等价?
答案与解析
平台答案: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 为开始符号。哪个选项可以成为该文法的句子?
- 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 与它接受完全相同的字符串集合?
答案与解析
平台答案: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 仅表示由单个字母命名的变量。哪个表达式可由文法产生?
- 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 代码,输出为( )。
-
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 为( )。
-
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代码会输出什么( )?
-
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的内容为( )。
-
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为( )。
-
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表示单个字母:
表达式 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常混合编译和解释,不能据传统分类断言所有运行阶段都绝无编译活动。














































