软件设计师(软考中级)模拟试题
依据《软件设计师考试说明》官方要求编写,覆盖全部 12 项考试要求与两个考试科目。
- 科目一:计算机与软件工程知识(计算机化考试,选择题,满分 75 分,45 分合格)
- 科目二:软件设计(计算机化考试,问答题,满分 75 分,45 分合格)
本套模拟题共:科目一选择题 40 题(每题 1 分,共 40 分),科目二问答题 6 大题(共 35 分),并附参考答案与解析。
一、考试要求速览(官方原文)
- 掌握数据表示、算术和逻辑运算;
- 掌握相关的应用数学、离散数学的基础知识;
- 掌握计算机体系结构以及各主要部件的性能和基本工作原理;
- 掌握操作系统、程序设计语言的基础知识,了解编译程序的基本知识;
- 熟练掌握常用数据结构和常用算法;
- 熟悉数据库、网络和多媒体的基础知识;
- 掌握 C 程序设计语言,以及 C++、Java、Visual Basic、Visual C++ 中的一种程序设计语言;
- 熟悉软件工程、软件过程改进和软件开发项目管理的基础知识;
- 熟练掌握软件设计的方法和技术;
- 掌握常用信息技术标准、安全性,以及有关法律、法规的基本知识;
- 了解信息化、计算机应用的基础知识;
- 正确阅读和理解计算机领域的英文资料。
科目一:计算机与软件工程知识(选择题)
说明:每题四个选项,只有一个正确答案。每题 1 分。
第一部分:数据表示、算术与逻辑运算(考点 1)
1. 在 8 位二进制补码表示下,十进制数 -128 的补码为( )
- A. 1000 0000
- B. 0111 1111
- C. 0000 0000
- D. 1111 1111
2. 两个规格化浮点数进行加减运算,若阶码相同而尾数需要对阶,则对阶的原则是( )
- A. 小阶向大阶看齐
- B. 大阶向小阶看齐
- C. 尾数大的向尾数小的看齐
- D. 随机调整
3. 已知 x 的补码为 1100 1010(8 位),则 x 对应的十进制真值为( )
- A. 202
- B. -54
- C. -58
- D. 54
4. 逻辑表达式A ∧ (A ∨ B) ≡( )
- A. A
- B. B
- C. A ∨ B
- D. A ∧ B
5. 若用二进制浮点数表示,当尾数出现溢出时,需要进行的处理是( )
- A. 右规
- B. 左规
- C. 舍入
- D. 对阶
第二部分:应用数学、离散数学(考点 2)
6. 设集合 A = {1, 2, 3},则 A 上共有( )个不同的二元关系。
- A. 9
- B. 27
- C. 512
- D. 64
7. 命题公式(P → Q) ∧ (Q → R) → (P → R)是( )
- A. 矛盾式
- B. 重言式(永真式)
- C. 可满足但非重言式
- D. 不可判定
8. 简单无向图 G 有 n 个顶点、m 条边,则其邻接表中每个顶点的边表结点个数总和为( )
- A. n
- B. m
- C. 2m
- D. n+m
9. 5 个人排成一排照相,甲、乙两人必须相邻,共有( )种排法。
- A. 24
- B. 48
- C. 120
- D. 96
10. 掷两枚均匀骰子,点数之和为 7 的概率是( )
- A. 1/6
- B. 1/9
- C. 1/12
- D. 1/36
第三部分:计算机体系结构与组成原理(考点 3)
11. Cache 的地址映像中,某主存块只能映射到 Cache 中唯一固定位置的方式称为( )
- A. 直接映像
- B. 全相联映像
- C. 组相联映像
- D. 哈希映像
12. 某 CPU 采用三级指令流水线,每级耗时分别为 2ns、3ns、2ns,则流水线的最大吞吐率约为( )
- A. 1/7ns⁻¹
- B. 1/3ns⁻¹
- C. 1/2ns⁻¹
- D. 3/7ns⁻¹
13. 关于 RISC 与 CISC,下列说法正确的是( )
- A. RISC 指令数目多,寻址方式丰富
- B. RISC 采用固定长度指令,绝大多数指令在一个周期内完成
- C. CISC 采用硬布线控制为主
- D. RISC 主要面向复杂任务,指令功能强
14. 在存储层次结构中,速度由快到慢、容量由小到大的正确顺序是( )
- A. 寄存器 → Cache → 主存 → 辅存
- B. Cache → 寄存器 → 辅存 → 主存
- C. 寄存器 → 主存 → Cache → 辅存
- D. 主存 → Cache → 寄存器 → 辅存
15. 中断响应过程的主要工作是( )
- A. 保存现场、识别中断源、转向中断服务程序
- B. 直接执行中断服务程序
- C. 修改程序计数器即可
- D. 恢复现场、返回主程序
第四部分:操作系统、程序设计语言与编译原理(考点 4)
16. 若系统中有 5 个进程竞争某类资源 R,每个进程最多需要 3 个该类资源,则至少需要( )个 R 资源才能保证不发生死锁。
- A. 11
- B. 12
- C. 13
- D. 15
17. 采用页式存储管理,逻辑地址 32 位,页面大小为 4KB,则逻辑地址中页内偏移占( )位。
- A. 10
- B. 12
- C. 20
- D. 32
18. 一个正规式描述的语言是( )
- A. 上下文无关语言
- B. 上下文有关语言
- C. 正规语言(正则语言)
- D. 任意递归语言
19. 编译过程的各阶段中,确定语法结构是否正确对应的是( )
- A. 词法分析
- B. 语法分析
- C. 语义分析
- D. 代码优化
20. 操作系统中"银行家算法"用于解决( )问题。
- A. 进程同步
- B. 进程通信
- C. 死锁避免
- D. 内存分配
第五部分:数据结构和常用算法(考点 5)
21. 具有 n 个结点的完全二叉树,其深度为( )(根结点深度为 1)。
- A. log₂n
- B. ⌊log₂n⌋
- C. ⌊log₂n⌋ + 1
- D. n/2
22. 对长度为 n 的序列进行快速排序,最好情况下的时间复杂度为( )
- A. O(n)
- B. O(n log₂n)
- C. O(n²)
- D. O(log₂n)
23. 一棵二叉树的前序遍历为 ABDCE,中序遍历为 BDAEC,则其后序遍历为( )
- A. DBECA
- B. BDECA
- C. DEBCA
- D. DBACE
24. 用邻接表存储的有向图,求某顶点的出度应( )
- A. 统计该顶点边表中的结点个数
- B. 统计逆邻接表中该顶点的边表结点个数
- C. 统计整个邻接表的结点总数
- D. 无法求得
25. 关于 Dijkstra 算法,下列说法正确的是( )
- A. 可求含负权边的单源最短路径
- B. 采用贪心策略,每次选取当前距离最短的未访问顶点
- C. 采用动态规划,可处理负权环
- D. 时间复杂度恒为 O(n)
第六部分:数据库、网络与多媒体(考点 6)
26. 关系模式 R(U, F),若 X→Y 且 Y→Z,则 X→Z,这一性质称为函数依赖的( )
- A. 自反律
- B. 增广律
- C. 传递律
- D. 分解规则
27. 若关系 R 的每个非主属性完全函数依赖于码,且消除部分依赖后仍存在传递依赖,则 R 至少满足( )范式。
- A. 1NF
- B. 2NF
- C. 3NF
- D. BCNF
28. TCP/IP 协议族中,负责将 IP 地址转换为 MAC 地址的协议是( )
- A. ICMP
- B. ARP
- C. RARP
- D. IGMP
29. 下列哪一项属于 TCP 与 UDP 的主要区别( )
- A. TCP 是无连接协议,UDP 是面向连接协议
- B. TCP 提供可靠传输,UDP 不保证可靠
- C. TCP 无拥塞控制,UDP 有
- D. 二者完全相同
30. 多媒体数据压缩中,JPEG 标准采用的静态图像压缩算法主要基于( )
- A. 行程编码
- B. 霍夫曼编码
- C. 离散余弦变换(DCT)
- D. 算术编码
第七部分:程序设计语言 C / C++ / Java(考点 7)
31. 在 C 语言中,char *s = "Hello";与char s[] = "Hello";的主要区别是( )
- A. 两者完全相同
- B. s 为指针时指向字符串常量,不可通过 s[i] 修改内容;s 为数组时内容可修改
- C. 数组不能存储字符串
- D. 指针方式占用更多内存
32. C++ 中,关于虚函数与多态的叙述正确的是( )
- A. 构造函数可以是虚函数
- B. 析构函数通常声明为虚函数,以正确释放派生类对象
- C. 静态成员函数可以是虚函数
- D. 内联函数一定是虚函数
33. Java 中,下列声明正确的是( )
- A.
int a[5]; - B.
int[] a = new int[5]; - C.
int a = new int(); - D.
new int[5];
34. 在 C 语言中,函数调用时若实参为数组名,则形参接收的是( )
- A. 数组全部元素
- B. 数组首地址(指针)
- C. 数组长度
- D. 数组最后一个元素
35. Java 中,用于控制一个类只能创建单实例对象的设计模式与关键字组合,正确的是( )
- A. 私有构造方法 + 静态方法
- B. 公有构造方法 + final
- C. protected 构造方法 + static
- D. 无构造方法
第八部分:软件工程、过程改进与项目管理(考点 8)
36. 在软件生命周期模型中,强调"风险驱动"、迭代递增的模型是( )
- A. 瀑布模型
- B. 螺旋模型
- C. 增量模型
- D. 喷泉模型
37. 关于黑盒测试与白盒测试,下列说法正确的是( )
- A. 白盒测试不关心程序内部结构
- B. 黑盒测试把程序看作一个不透明的盒子,依据需求说明设计用例
- C. 白盒测试只能发现功能错误
- D. 黑盒测试必须覆盖所有路径
38. CMM(能力成熟度模型)中,处于"已定义级"(可重复级之上)的级别编号是( )
- A. 1 级
- B. 2 级
- C. 3 级
- D. 4 级
39. 某项目关键路径上的活动工期分别为 3、5、2、4(天),则该项目的总工期为( )
- A. 5 天
- B. 7 天
- C. 12 天
- D. 14 天
40. 在项目风险管理中,对已识别风险发生的可能性和影响进行评估,属于( )
- A. 风险识别
- B. 风险分析(定性/定量)
- C. 风险规避
- D. 风险监控
科目二:软件设计(问答题)
说明:本部分为问答题,考察软件设计的方法与技术(考点 9),以及数据库、算法、面向对象、程序语言等综合设计能力。
试题一:结构化分析与数据流图(考点 6、9)
某图书管理系统的主要功能描述如下:
- 读者登记:读者提交登记信息,系统校验并建立读者档案;
- 图书查询:读者可按书名/作者查询图书库存;
- 借书处理:校验读者资格与图书库存,办理借书登记,更新库存;
- 还书处理:登记还书,更新库存,如有超期则生成罚款单。
问题 1(4 分):画出该系统的顶层数据流图(0 层),标明外部实体、处理、数据流。
问题 2(4 分):将"借书处理"分解为 1 层 DFD,列出其主要加工、数据存储及输入输出数据流。
问题 3(2 分):说明"读者档案""图书库存"分别属于什么类型的数据存储。
试题二:数据库设计(考点 6)
某网上书店需要设计数据库,涉及实体:图书(书号、书名、作者、出版社、单价)、顾客(顾客号、姓名、电话)、订单(订单号、日期)。业务规则:一个顾客可下多个订单,一个订单包含多本图书,且需记录每本书的订购数量。
问题 1(3 分):画出该系统的 E-R 图(标注实体、属性和联系及其类型)。
问题 2(3 分):将 E-R 图转换为关系模式,用下划线标出主键,用波浪线标出外键,并说明转换所依据的规则。
问题 3(4 分):写出以下 SQL 语句:
- 查询"清华大学出版社"出版的图书书名与单价,按单价降序排列;
- 查询订购了"数据库系统概论"这本书的顾客姓名;
- 统计每种图书的订购总量;
- 将图书《软件工程》的单价上调 10%。
试题三:面向对象分析与设计(考点 9)
某停车场计费系统,需求如下:车辆进入时记录入场时间,出场时依据停车时长按"首小时 X 元,之后每小时 Y 元"计费;会员车享受折扣;系统需支持多种车型(小汽车、货车)不同单价。
问题 1(3 分):给出该系统的用例图所包含的参与者与主要用例。
问题 2(4 分):采用面向对象方法,设计一个体现继承与多态的类图,说明类之间的关联、泛化关系及关键方法。
问题 3(3 分):选用一种合适的设计模式(如策略模式、工厂模式)来描述"不同车型/会员折扣计费"的实现思路。
试题四:算法设计(考点 2、5)
问题 1(3 分):给定如下求 Fibonacci 数列的递归函数,分析其时间复杂度,并说明可采用的改进方法。
intfib(intn){if(n<=1)returnn;returnfib(n-1)+fib(n-2);}问题 2(3 分):写出二分查找(折半查找)的算法描述,并说明其时间复杂度和适用前提。
试题五:C 语言程序设计(考点 7)
问题 1(4 分):阅读下面程序,写出运行结果。
#include<stdio.h>voidswap(int*a,int*b){intt=*a;*a=*b;*b=t;}intmain(){intx=3,y=5;int*p=&x,*q=&y;swap(p,q);printf("%d %d\n",x,y);return0;}问题 2(3 分):用 C 语言实现一个函数int str_len(const char *s),返回字符串的长度(不使用库函数 strlen),并说明算法思路。
试题六:英文资料阅读与信息技术标准、安全法规(考点 10、11、12)
问题 1(4 分):将下列英文段落翻译为中文,并概括其主旨。
Software testing is the process of executing a program with the intent of finding errors. A good test case is one that has a high probability of finding an as-yet-undiscovered error. Since exhaustive testing is impractical, testing should be based on a well-designed test strategy that combines black-box and white-box techniques to maximize defect detection within time and budget constraints.
问题 2(2 分):我国《计算机软件保护条例》规定,软件著作权的保护期一般为作者终生及其死亡后多少年?
问题 3(2 分):简述软件著作权登记、商业秘密保护与专利保护三者的区别。
参考答案与解析
科目一:选择题答案
| 题号 | 答案 | 题号 | 答案 | 题号 | 答案 | 题号 | 答案 |
|---|---|---|---|---|---|---|---|
| 1 | A | 11 | A | 21 | C | 31 | B |
| 2 | A | 12 | B | 22 | B | 32 | B |
| 3 | B | 13 | B | 23 | A | 33 | B |
| 4 | A | 14 | A | 24 | A | 34 | B |
| 5 | A | 15 | A | 25 | B | 35 | A |
| 6 | C | 16 | A | 26 | C | 36 | B |
| 7 | B | 17 | B | 27 | B | 37 | B |
| 8 | C | 18 | C | 28 | B | 38 | C |
| 9 | B | 19 | B | 29 | B | 39 | D |
| 10 | A | 20 | C | 30 | C | 40 | B |
关键解析
- -128 的补码:8 位补码表示范围为 -128~127,-128 的补码为 1000 0000。✓ A
- 对阶原则:浮点数加减运算中,阶码小的尾数右移,小阶向大阶看齐。✓ A
- 补码 1100 1010,符号位 1 为负。取反加 1 得真值:1100 1010 → 取反 0011 0101 → +1 = 0011 0110 = 54,故为-54。✓ B
- 吸收律:A ∧ (A ∨ B) = A。✓ A
- 尾数溢出 → 右规(尾数右移一位、阶码加一)。✓ A
- 集合 A 有 3 个元素,A×A 有 9 个元素,二元关系是 A×A 的子集,共 2⁹ = 512 个。✓ C
- (P→Q)∧(Q→R)→(P→R) 是假言三段论,恒真,为重言式。✓ B
- 邻接表中每个顶点对应一条边产生两个边表结点(无向图每条边出现两次),总和 = 2m。✓ C
- 甲、乙捆绑看作一个整体,与其余 3 人共 4 个元素排列为 4!,甲、乙内部 2!,共 4!×2! = 48。✓ B
- 点数之和为 7 的情况有 (1,6)(2,5)(3,4)(4,3)(5,2)(6,1) 共 6 种,总 36 种,概率 6/36 = 1/6。✓ A
- 直接映像:主存块固定映射到唯一 Cache 块。✓ A
- 流水线周期取最大段耗时 3ns,最大吞吐率 = 1/3(条/ns)。✓ B
- RISC 采用固定长度指令,绝大多数指令单周期完成。✓ B
- 速度排序:寄存器 > Cache > 主存 > 辅存。✓ A
- 中断响应:保护现场、识别中断源、转中断服务程序。✓ A
- 死锁必要条件破坏法:资源数 ≥ 5×(3-1)+1 = 11。✓ A
- 页面 4KB = 2¹² 字节,页内偏移占 12 位。✓ B
- 正规式描述正规语言(正则语言),对应有限自动机。✓ C
- 语法分析判断语法结构是否正确。✓ B
- 银行家算法属于死锁避免。✓ C
- 完全二叉树深度 = ⌊log₂n⌋ + 1。✓ C
- 快排最好情况时间复杂度 O(n log₂n)。✓ B
- 由前序 ABDCE、中序 BDAEC 重建:根 A,左子树 BD,右子树 CE;前序中 B 为左根、D 为左子,前序 C 为右根、E 为右子。后序遍历 DBECA。✓ A
- 有向图某顶点出度 = 其邻接表边表结点个数。✓ A
- Dijkstra 采用贪心策略,每次选当前距离最短的未访问顶点,不能处理负权边。✓ B
- 传递律:X→Y,Y→Z ⇒ X→Z。✓ C
- 非主属性完全依赖码但存在传递依赖 → 满足 2NF,不满足 3NF。✓ B
- ARP 将 IP 地址解析为 MAC 地址。✓ B
- TCP 可靠、面向连接;UDP 尽力而为、无连接。✓ B
- JPEG 静态图像压缩主要基于 DCT。✓ C
- 指针指向字符串常量(不可修改),数组存于可写内存(可修改)。✓ B
- 析构函数通常声明为虚函数,保证多态删除时正确释放。✓ B
- Java 数组正确声明:
int[] a = new int[5];。✓ B - C 中数组名作为实参时退化为指向首元素的指针。✓ B
- 单例模式:私有构造方法 + 静态方法获取实例。✓ A
- 螺旋模型强调风险驱动、迭代递增。✓ B
- 黑盒测试把程序看作黑盒,依据需求说明设计用例。✓ B
- CMM 3 级为"已定义级"。✓ C
- 关键路径工期 = 3+5+2+4 = 14 天。✓ D
- 对风险发生可能性和影响进行评估属于风险分析。✓ B
科目二:参考答案要点
试题一
- 顶层 DFD:外部实体「读者」「图书管理员」;处理「图书管理系统」;数据流「登记信息」「查询条件」「借书/还书请求」「查询结果」「罚款单」。
- 借书处理 1 层 DFD 加工:校验读者资格、校验库存、登记借书、更新库存。数据存储:读者档案表、图书库存表、借书记录表。
- 读者档案、图书库存均为文件型数据存储(持久化存储)。
试题二
- E-R 图:图书与订单之间为多对多联系(一个订单含多本图书,一本图书出现在多个订单),联系具有属性"订购数量";顾客与订单为一对多。
- 关系模式转换:图书(书号, 书名, 作者, 出版社, 单价);顾客(顾客号, 姓名, 电话);订单(订单号, 日期, 顾客号);订单明细(订单号, 书号, 订购数量)。多对多联系转换为独立关系表,主键为两实体主键的组合,订购数量作属性。
- SQL:
SELECT 书名, 单价 FROM 图书 WHERE 出版社='清华大学出版社' ORDER BY 单价 DESC;SELECT 姓名 FROM 顾客 WHERE 顾客号 IN (SELECT 顾客号 FROM 订单 WHERE 订单号 IN (SELECT 订单号 FROM 订单明细 WHERE 书号=(SELECT 书号 FROM 图书 WHERE 书名='数据库系统概论')));SELECT 书号, SUM(订购数量) FROM 订单明细 GROUP BY 书号;UPDATE 图书 SET 单价=单价*1.10 WHERE 书名='软件工程';
试题三
- 参与者:车主、系统管理员;用例:车辆入场、车辆出场、会员注册、计费、折扣管理。
- 类图:基类
Vehicle(含时长、费率等),派生类Car、Truck重写计费方法体现多态;BillingSystem与Vehicle关联。 - 策略模式:将"计费策略"抽象为接口,会员计费策略、标准计费策略实现之,运行时动态替换,实现不同车型/会员的差异化折扣。
试题四
- 递归求 Fibonacci 时间复杂度为 O(2ⁿ),因存在大量重复计算。改进:使用动态规划(自底向上迭代)或记忆化递归,将复杂度降至 O(n)。
- 二分查找:在有序数组中每次与中间元素比较,缩小一半查找范围,时间复杂度 O(log₂n),前提是顺序存储且有序。
试题五
- 程序通过指针交换 x、y 的值,输出:5 3。
- 自定义
str_len:遍历字符串至'\0',统计字符个数。
试题六
- 译文大意:软件测试是以发现错误为目的执行程序的过程。好的测试用例是高概率发现尚未被发现错误的用例。由于穷举测试不切实际,应基于精心设计的、结合黑盒与白盒技术的测试策略,在时间和预算约束内最大限度提高缺陷检测率。
- 软件著作权保护期:自然人作者终生及其死亡后 50 年。
- 区别:著作权自动产生(登记仅作证明);商业秘密保护无需登记但需采取保密措施;专利需申请审查,保护期较短但排他性强。
使用建议:建议结合《软件设计师教程(第 5 版)》逐考点复习,优先夯实数据结构与算法、面向对象、软件工程三大高分模块(合计占比约 44%)。完成本套模拟题后,可针对错题对应的考点做专项强化。