(软考软件设计师)09年5月软件设计师工作流程
软件开发工程师的工作流程和常用工具介绍

软件开发工程师的工作流程和常用工具介绍在软件开发领域,软件开发工程师起着至关重要的作用。
他们负责设计、开发和维护软件应用程序,以满足客户和用户的需求。
为了更好地完成这项工作,软件开发工程师需要掌握一系列的工作流程和常用工具。
本文将详细介绍软件开发工程师的工作流程以及常用工具。
一、需求分析与规划需求分析是软件开发的重要第一步。
在这个阶段,软件开发工程师与客户和用户进行沟通,了解他们的需求和期望。
然后,工程师将需求进行详细分析和规划,确定软件的功能和特性,并制定相应的开发计划。
为了帮助软件开发工程师进行需求分析和规划,常用工具包括:1. UML(Unified Modeling Language):UML是一种用于建立、可视化和编写软件系统的标准化建模语言。
软件开发工程师可以使用UML工具绘制用例图、类图、时序图等,以帮助理解用户需求和设计软件结构。
二、设计与开发在需求分析和规划完成后,软件开发工程师进入设计与开发阶段。
在此阶段,工程师将根据需求分析的结果进行系统设计,并开始编写代码来实现软件的功能。
常用的设计与开发工具包括:1. 集成开发环境(IDE):IDE是软件开发工程师最常用的工具之一。
常见的IDE包括Eclipse、Visual Studio、IntelliJ IDEA等,它们提供了代码编辑、编译、调试等功能,大大提高了开发效率。
2. 版本控制工具:版本控制工具如Git和SVN可以帮助软件开发工程师管理代码的版本和变更。
它们允许多人协同开发,并能追踪代码的修改历史。
三、测试与调试在软件开发过程中,软件开发工程师需要进行各种测试和调试,以确保软件的质量和稳定性。
常用的测试与调试工具包括:1. 单元测试框架:单元测试框架如JUnit和PyTest可以帮助工程师编写和执行单元测试,测试代码的各个单元是否按预期工作。
2. 调试器:调试器是软件开发工程师用来诊断和修复程序错误的重要工具。
常见的调试器有GDB和Visual Studio Debugger。
#(软考软件设计师)软件设计师考试大纲

软件设计师(原高级程序员)考试大纲一、考试说明1.考试要求:(1) 掌握数据表示、算术和逻辑运算;(2) 掌握相关的应用数学、离散数学的基础知识;(3) 掌握计算机体系结构以及各主要部件的性能和基本工作原理;(4) 掌握操作系统、程序设计语言的基础知识,了解编译程序的基本知识;(5) 熟练掌握常用数据结构和常用算法;(6) 熟悉数据库、网络和多媒体的基础知识;(7) 掌握C程序设计语言,以及C++、Java、Visual、Basic、Visual C++中的一种程序设计语言;(8) 熟悉软件工程、软件过程改进和软件开发项目管理的基础知识;(9) 熟悉掌握软件设计的方法和技术;(10) 掌握常用信息技术标准、安全性,以及有关法律、法规的基本知识;(11) 了解信息化、计算机应用的基础知识;(12) 正确阅读和理解计算机领域的英文资料。
2.通过本考试的合格人员能根据软件开发项目管理和软件工程的要求,按照系统总体设计规格说明书进行软件设计,编写程序设计规格说明书等相应的文档,组织和指导程序员编写、调试程序,并对软件进行优化和集成测试,开发出符合系统总体设计要求的高质量软件;具有工程的实际工作能力和业务水平。
3.本考试设置的科目包括:(1) 计算机与软件工程知识,考试时间为150分钟,笔试;(2) 软件设计,考试时间为150分钟,笔试。
二、考试范围考试科目1:计算机与软件工程知识1.计算机科学基础1.1 数制及其转换·二进制、十进制和十六进制等常用制数制及其相互转换1.2 数据的表示·数的表示(原码、反码、补码、移码表示,整数和实数的机内表示,精度和溢出)·非数值表示(字符和汉字表示、声音表示、图像表示)·校验方法和校验码(奇偶校验码、海明校验码、循环冗余校验码)1.3 算术运算和逻辑运算·逻辑代数的基本运算和逻辑表达式的化简1.4 数学基础知识·命题逻辑、谓词逻辑、形式逻辑的基础知识·常用数值计算(误差、矩阵和行列式、近似求解方程、插值、数值积分)·排列组合、概率论应用、应用统计(数据的统计分析)·运算基本方法(预测与决策、线性规划、网络图、模拟)1.5 常用数据结构·数组(静态数组、动态数组)、线性表、链表(单向链表、双向链表、循环链表)、队列、栈、树(二叉树、查找树、平衡树、线索树、线索树、堆)、图等的定义、存储和操作· Hash(存储地址计算,冲突处理)1.6 常用算法·排序算法、查找算法、数值计算方法、字符串处理方法、数据压缩算法、递归算法、图的相关算法·算法与数据结构的关系、算法效率、算法设计、算法描述(流程图、伪代码、决策表)、算法的复杂性2.计算机系统知识2.1 硬件知识2.1.1 计算机系统的组成、体系结构分类及特性· CPU和存储器的组成、性能和基本工作原理·常用I/O设备、通信设备的性能,以及基本工作原理· I/O接口的功能、类型和特性· I/O控制方式(中断系统、DMA、I/O处理机方式)· CISC/RISC,流水线操作,多处理机,并行处理2.1.2 存储系统·主存-Cache存储系统的工作原理·虚拟存储器基本工作原理,多级存储体系的性能价格· RAID类型和特性2.1.3 安全性、可靠性与系统性能评测基础知识·诊断与容错·系统可靠性分析评价·计算机系统性能评测方式2.2 软件知识2.2.1 操作系统知识·操作系统的内核(中断控制)、进程、线程概念·处理机管理(状态转换、共享与互斥、分时轮转、抢占、死锁)·存储管理(主存保护、动态连接分配、分段、分页、虚存)·设备管理(I/O控制、假脱机)·文件管理(文件目录、文件组织、存取方法、存取控制、恢复处理)·作业管理(作业调度、作业控制语言(JCL)、多道程序设计)·汉字处理,多媒体处理,人机界面·网络操作系统和嵌入式操作系统基础知识·操作系统的配置2.2.2 程序设计语言和语言处理程序的知识·汇编、编译、解释系统的基础知识和基本工作原理·程序设计语言的基本成分:数据、运算、控制和传输,过程(函数)调用·各类程序设计语言主要特点和适用情况2.3 计算机网络知识·网络体系结构(网络拓扑、OSI/RM、基本的网络协议)·传输介质、传输技术、传输方法、传输控制·常用网络设备和各类通信设备· Client/Server结构、Browser/Server结构· LAN拓扑,存取控制,LAN的组网,LAN间连接,LAN-WAN连接·因特网基础知识以及应用·网络软件·网络管理·网络性能分析2.4 数据库知识·数据库管理系统的功能和特征·数据库模型(概念模式、外模式、内模式)·数据模型,ER图,第一范式、第二范式、第三范式·数据操作(集合运算和关系运算)·数据库语言(SQL)·数据库的控制功能(并发控制、恢复、安全性、完整性)·数据仓库和分布式数据库基础知识2.5 多媒体知识·多媒体系统基础知识,多媒体设备的性能特性,常用多媒体文件格式·简单图形的绘制,图像文件的处理方法·音频和视频信息的应用·多媒体应用开发过程2.6 系统性能知识·性能指标(响应时间、吞吐量、周转时间)和性能设计·性能测试和性能评估·可靠性指标及计算、可靠性设计·可靠性测试和可靠性评估2.7 计算机应用基础知识·信息管理、数据处理、辅助设计、自动控制、科学计算、人工智能等基础知识·远程通信服务基础知识·常用应用系统3.系统开发和运行知识3.1 软件工程、软件过程改进和软件开发项目管理知识·软件工程知识·软件开发生命周期各阶段的目标和任务·软件开发项目管理基础知识(时间管理、成本管理、质量管理、人力资源管理、风险管理等)及其常用管理工具·主要的软件开发方法(生命周期法、原型法、面向对象法、CASE)·软件开发工具与环境知识·软件过程改进知识·软件质量管理知识·软件开发过程评估、软件能力成熟评估基础知识3.2 系统分析基础知识·系统分析的目的和任务·结构化分析方法(数据流图(DFD)、数据字典(DD)、实体关系图(ERD)、描述加工处理的结构化语言)·统一建模语言(UML)·系统规格说明书3.3 系统设计知识·系统设计的目的和任务·结构化设计方法和工具(系统流程图、HIPO图、控制流程图)·系统总体结构设计(总体布局、设计原则、模块结构设计、数据存储设计、系统配置方案)·系统详细设计(代码设计、数据库设计、用户界面设计、处理过程设计)·系统设计说明书3.4 系统实施知识·系统实施的主要任务·结构化程序设计、面向对象程序设计、可视化程序设计·程序设计风格·程序设计语言的选择·系统测试的目的、类型,系统测试方法(黑盒测试、白盒测试、灰盒测试)·测试设计和管理(错误曲线、错误排除、收敛、注入故障、测试用例设计、系统测试报告)·系统转换基础知识3.5 系统运行和维护知识·系统运行管理基础知识·系统维护基础知识·系统评价基础知识3.6 面向对象开发方法·面向对象开发概念(类、对象、属性、封装性、继承性、多态性、对象之间的引用)·面向对象开发方法的优越性以及有效领域·面向对象设计方法(体系结构、类的设计、用户接口设计)·面向对象实现方法(选择程序设计语言、类的实现、方法的实现、用户接口的实现、准备测试数据)·面向对象程序设计语言(如C++、Java、Visual、Bsasic、Visual C++)的基本机制·面向对象数据库、分布式对象的概念4.安全性知识·安全性基本概念·防治计算机病毒、防范计算机犯罪·存取控制、防闯入、安全管理措施·加密与解密机制·风险分析、风险类型、抗风险措施和内部控制5.标准化知识·标准化意识、标准化的发展、标准制订过程·国际标准、国家标准、行业标准、企业标准基本知识·代码标准、文件格式标准、安全标准、软件开发规范和文档标准知识·标准化机构6.信息化基础知识·信息化意识·全球信息化趋势、国家信息化战略、企业信息化战略和策略·有关的法律、法规·远程教育、电子商务、电子政务等基础知识·企业信息资源管理基础知识7.计算机专业英语·掌握计算机技术的基本词汇·能正确阅读和理解计算机领域的英文资料考试科目2:软件设计1.外部设计1.1 理解系统需求说明1.2 系统开发的准备·选择开发方法、准备开发环境、制订开发计划1.3 设计系统功能·选择系统结构,设计各子系统的功能和接口,设计安全性策略、需求和实现方法,制订详细的工作流和数据流1.4 设计数据模型·设计ER模型、数据模型1.5 编写外部设计文档·系统配置图、各子系统关系图、系统流程图、系统功能说明书、输入输出规格说明、数据规格说明、用户手册框架·设计系统测试要求1.6 设计评审2.内部设计2.1 设计软件结构·按构件分解,确定构件功能规格以及构件之间的接口·采用中间件和工具2.2 设计输入输出·屏幕界面设计、设计输入输出检查方法和检查信息2.3 设计物理数据·分析数据特性,确定逻辑数据组织方式、存储介质,设计记录格式和处理方式·将逻辑数据结构换成物理数据结构,计算容量,进行优化2.4 构件的创建和重用·创建、重用构件的概念·使用子程序库或类库2.5 编写内部设计文档·构件划分图、构件间的接口、构件处理说明、屏幕设计文档、报表设计文档、文件设计文档、数据库设计文档2.6 设计评审3.程序设计3.1 模块划分(原则、方法、标准)3.2 编写程序设计文档·模块规格说明书(功能和接口说明、程序处理逻辑的描述、输入输出数据格式的描述)·测试要求说明书(测试类型和目标、测试用例、测试方法)3.3 程序设计评审4.系统实施4.1 配置计算机系统及其环境4.2 选择合适的程序设计语言4.3 掌握C程序设计语言,以及C++、Java、Visual、Basic、Visual C++中任一种程序设计语言,以便能指导程序员进行编程和测试,并进行必要的优化4.4 系统测试·指导程序员进行模块测试,并进行验收·准备系统集成测试环境和测试工具·准备测试数据·写出测试报告5.软件工程·软件生存期模型(瀑布模型、螺旋模型、喷泉模型)和软件成本模型·定义软件需求(系统化的目标、配置、功能、性能和约束)·描述软件需求的方法(功能层次模型、数据流模型、控制流模型、面向数据的模型、面向对象的模型等)·定义软件需求的方法(结构化分析方法、面向对象分析方法)·软件设计(分析与集成、逐步求精、抽象、信息隐蔽)·软件设计方法(结构化设计方法、Jackson方法、Warnier方法、面向对象设计方法)·程序设计(结构化程序设计、面向对象程序设计)·软件测试的原则与方法·软件质量(软件质量特性、软件质量控制)·软件过程评估基本方法、软件能力成熟度评估基本方法·软件开发环境和开发工具(分析工具、设计工具、编程工具、测试工具、维护工具、CASE)·软件工程发展趋势(面向构件,统一建模语言(UML))·软件过程改进模型和方法。
软件设计流程

软件设计流程软件设计流程是软件开发过程中的重要一环,它涉及到需求分析、概要设计、详细设计和编码等几个阶段。
下面将简要介绍软件设计流程的主要步骤。
第一步是需求分析,它是整个软件设计流程的第一步。
在这一步中,软件设计人员需要与客户进行沟通,了解客户的需求和期望。
然后根据这些需求,对软件的功能和性能进行分析,确定软件的整体需求和目标。
第二步是概要设计,它是在需求分析基础上进行的。
在这一步中,软件设计人员需要将软件的整体结构和功能进行设计,包括功能模块的划分和关系的建立。
概要设计主要是通过流程图、结构图等方式来表示软件的整体结构和功能。
第三步是详细设计,它是在概要设计的基础上进行的。
在这一步中,软件设计人员需要对软件的具体实现进行详细设计,包括算法的设计、数据结构的选择、接口的定义等。
详细设计主要是通过类图、时序图、活动图等方式来表示软件的具体实现。
第四步是编码,它是在详细设计的基础上进行的。
在这一步中,软件设计人员需要将详细设计的结果转化为具体的代码。
编码主要是通过编程语言来实现软件的功能。
在编码过程中,软件设计人员需要注意编码规范,保证代码的可读性和可维护性。
第五步是测试,它是软件设计流程中的最后一步。
在这一步中,软件设计人员需要对编码完成的软件进行测试,包括单元测试、集成测试和系统测试。
测试主要是通过输入测试数据来验证软件的功能和性能是否符合需求。
最后,软件设计流程还需要进行软件的部署和维护。
部署是将软件安装到用户的计算机或服务器上,并进行配置和调试。
维护是在软件运行过程中对软件进行修复和升级,以保证软件的稳定和可靠性。
总结起来,软件设计流程是一个从需求分析到编码和测试的过程,它涉及到多个阶段和步骤,需要软件设计人员具备良好的分析和设计能力,以及良好的编码和测试技术。
软件设计流程的目的是为了开发出功能完备、性能优越、稳定可靠的软件产品。
软件工程设计具体流程

软件工程设计具体流程
软件工程设计是软件开发过程中的重要环节,它的目标是根据用户需求和系统规格说明书,设计出满足需求的软件系统架构和详细设计。
具体流程如下:
1. 需求分析:通过与用户沟通,了解用户需求,并将其转化为软件需求规格说明书。
2. 系统设计:根据需求规格说明书,进行系统设计,包括系统架构设计、数据库设计、用户界面设计等。
3. 详细设计:在系统设计的基础上,进行详细设计,包括模块设计、算法设计、数据结构设计等。
4. 编码实现:根据详细设计文档,编写代码实现软件系统。
5. 测试验证:对软件系统进行测试,验证其是否满足需求规格说明书中的要求。
6. 运维维护:对软件系统进行运维和维护,保证其正常运行。
在软件工程设计过程中,需要遵循一些原则,如模块化、层次化、可读性、可维护性等。
同时,还需要使用一些工具和技术,如UML 建模、面向对象编程、设计模式等,以提高设计的质量和效率。
以上是软件工程设计的基本流程,不同的项目可能会有所不同,但总体流程是相似的。
软件设计师教程

软件设计师教程简介软件设计师是一个关键的职位,负责开发和实现软件解决方案。
他们需要掌握各种编程语言和工具,并且具备良好的逻辑思维能力和问题解决能力。
本教程将介绍软件设计师的基本知识和技能,并提供一些实用的建议和指导,帮助您成为一名优秀的软件设计师。
目录1.软件设计师的职责和技能要求2.开发软件解决方案的流程3.关键的软件设计原则4.常用的设计模式5.使用流行的开发工具和框架6.软件设计师的职业发展和学习资源软件设计师的职责和技能要求作为一名软件设计师,您需要具备以下基本职责和技能:•理解客户需求和业务目标,设计和开发软件解决方案;•使用合适的编程语言和工具,实现软件功能;•编写高质量的代码,进行代码测试和调试;•参与软件项目的需求分析和风险评估;•需要具备良好的沟通和团队合作能力。
开发软件解决方案的流程开发软件解决方案的流程通常包括以下几个阶段:1.需求分析:与客户合作,了解业务需求和功能需求,并将其转化为可执行的软件要求。
2.设计:基于软件需求,设计软件架构和系统接口。
3.编码:使用所选的编程语言和工具,实现软件功能。
4.测试:进行单元测试、集成测试和系统测试,以确保软件的功能和质量。
5.部署:将软件部署到目标环境中,确保其正常运行。
6.运维:监控和维护软件的正常运行,解决可能出现的问题。
关键的软件设计原则在进行软件设计时,有一些关键的原则需要遵循,以确保软件的可靠性和可扩展性。
1.单一职责原则:一个类应该只有一个引起它变化的原因。
2.开放-封闭原则:软件实体应该对扩展开放,对修改封闭。
3.里式替换原则:子类型必须能够替换掉它们的父类型。
4.依赖倒置原则:高层模块不应依赖于低层模块,两者应该依赖于抽象。
5.接口隔离原则:多个特定客户端接口要好于一个宽泛用途的接口。
6.迪米特法则:一个对象应该对其他对象有尽可能少的了解。
常用的设计模式设计模式是解决软件设计中常见问题的模板。
以下是一些常用的设计模式:1.单例模式:确保一个类只有一个实例,并提供全局访问点。
软件设计工作流程

1 目的有效识别、分析、策划、设计手机软件设计、开发过程;并对手机软件设计、开发的全过程进行有效控制;确保设计结果满足输入要求和顾客的需求、期望及有关法律、法规要求。
2 执行原则通过过程策划、设计保证过程有效性;通过过程管理追求符合性;通过对过程的监视、审核、改进提高软件设计过程能力;充分考虑生产过程和后续过程的因素,追求在设计中预防后续过程的潜在问题、风险。
满足客户要求,并追求超越客户要求;3 适用范围手机软件设计的过程识别、分析、4 编制、修改、评审、审批、更新职本规范由软件部负责编制、修改。
由软件部门协同相关部门一起评审,并经质量部审核,研发副总签软件部应根据具体情况负责对此程序的及时修改、更新,并组织评审,经质量部审核,研发副总签字5 工作流程软件设计工作流程划、设计手机软件设计、开发过程;开发的全过程进行有效控制;入要求和顾客的需求、期望及有关法律、法规要求。
保证过程有效性;合性;审核、改进提高软件设计过程能力;后续过程的因素,追求在设计中预防后续过程的潜在问题、风险。
求超越客户要求;分析、策划、设计;过程管理;过程改进。
更新职责编制、修改。
由软件部门协同相关部门一起评审,并经质量部审核,研发副总签字审批认可方能生效。
况负责对此程序的及时修改、更新,并组织评审,经质量部审核,研发副总签字审批。
根据产品定义,进行新功能的开发,并在提交新功能之前,进行相关测试、调试,最终上传到服务器上的项目版本中。
根据测试提供的buglist,进行bug的修改,并在提交bug修改的之前,进行相关测审批认可方能生效。
批。
软件设计师中的软件工程流程管理要点

软件设计师中的软件工程流程管理要点在软件设计师中,软件工程流程管理扮演着至关重要的角色。
随着软件项目规模和复杂性的增加,合理有效地管理软件工程流程至关重要。
本文将从需求分析、项目计划、开发、测试和发布等方面,探讨软件设计师在软件工程流程管理中需要注重的要点。
需求分析阶段是软件工程流程管理中的关键一环。
在需求分析阶段,软件设计师需要与客户深入沟通,全面了解客户需求,并将需求具象化。
要点一是确保与客户建立良好的沟通渠道,理解客户需求,避免因为信息不对称而导致需求不准确。
要点二是进行需求分析和可行性研究,全面评估项目的可行性和风险,并制定规范的需求文档和交流渠道,确保需求的准确性和一致性。
项目计划是软件工程流程管理的基础。
在项目计划阶段,软件设计师需要制定详细的工作计划,并合理分配资源和时间。
要点一是明确项目目标和里程碑,确立清晰的项目范围和时间节点,避免项目目标模糊和进度延误的问题。
要点二是识别项目风险,制定风险管理计划,并定期更新和评估项目进展,及时采取应对措施。
开发阶段是软件工程流程管理的核心。
在开发阶段,软件设计师需要配合开发团队进行软件设计、编码和测试。
要点一是采用规范的设计和编码标准,确保代码质量和可维护性。
要点二是建立有效的测试机制,包括单元测试、集成测试和系统测试等,确保软件质量和功能完备性。
测试阶段是软件工程流程管理的重要环节。
在测试阶段,软件设计师需与测试团队合作,进行全面的测试和质量评估。
要点一是制定详细的测试计划和用例,覆盖各个功能模块和用户场景。
要点二是及时修复和跟进测试中发现的问题,确保软件质量和稳定性。
发布阶段是软件工程流程管理的最终目标。
在发布阶段,软件设计师需与运维人员合作,确保软件顺利上线并正常运行。
要点一是制定上线计划和回滚策略,降低上线风险。
要点二是与用户建立反馈渠道,收集用户意见和bug反馈,持续改进软件性能和用户体验。
综上所述,软件设计师在软件工程流程管理中需要关注需求分析、项目计划、开发、测试和发布等要点。
软件开发工程师的日常工作流程及技巧

软件开发工程师的日常工作流程及技巧在软件行业中,软件开发工程师扮演着至关重要的角色。
他们负责设计、编码和测试软件,确保其功能完善、可靠性高。
为了帮助软件开发工程师提高工作效率和质量,以下是日常工作流程及技巧的概述。
一、需求分析与规划在软件开发的初期,软件开发工程师需要与客户或产品经理进行沟通,了解需求并分析其可行性。
在此阶段,以下步骤被广泛应用:1. 确定需求:明确了解项目的目标、功能和用户需求。
2. 分析需求:评估需求的复杂性,制定技术和资源计划。
3. 规划开发:制定开发计划、时间表和资源分配。
二、设计和编码在需求分析与规划完成后,软件开发工程师将进行软件设计和编码。
以下是日常工作流程及技巧:1. 设计软件结构:创建软件的整体架构和模块之间的关系。
2. 编码实现:根据设计方案,使用适当的编程语言来实现代码。
3. 代码管理:使用版本控制系统来管理代码并确保代码的安全备份和协作开发的顺利进行。
(以下是一些善于的编码技巧,如:命名规范、注释规范、函数封装、异常处理、单元测试等。
)三、测试与调试软件开发的关键阶段是对软件进行全面的测试和调试。
以下是软件开发工程师在测试和调试过程中的常见流程和技巧:1. 编写测试计划:明确测试目标、范围和资源的计划,以便全面、系统地测试软件。
2. 执行测试:根据测试计划执行各类测试,包括单元测试、集成测试、系统测试等。
3. 调试和修复:一旦发现错误,及时进行调试,并修复软件中的漏洞和问题。
4. 自动化测试:借助自动化测试工具,提高测试效率和准确性。
四、部署与运维在软件测试通过后,软件开发工程师需要进行软件的部署和运维。
以下是日常工作流程及技巧:1. 部署计划:制定详细的部署计划,包括安装、配置和发布软件等步骤。
2. 部署软件:根据部署计划,将软件安装到目标环境中。
3. 监控与维护:定期监控软件的性能和稳定性,及时解决问题和进行维护。
五、持续学习与技能提升作为软件开发工程师,持续学习和技能提升是必不可少的。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
09年5月软设第5部分工作流程和算法流程
第5部分流程类(工作流程和算法流程)
●试题1
阅读以下说明和流程图,从供选择的答案中选出应填人流程图(n)处的字句写在答题纸的对应栏内。
【说明】
某游戏的地图区域可分成n×m个方格,如图5.1(a)所示,现在需要确定区域中给定的两个方格的中心点之间的最短前进方案。
前进路线只能沿水平或垂直方向,如图5.1(b)中虚线所示。
为了避免路线相交,应将有障碍的方格作封锁标记,其他线路不允许穿过被封锁的方格。
设给定地图区域的起始方格a与目的方格b尚未被封锁,求这两个方格问最短前进方案的基本思路是:从起始方格a开始,先考查距离起始方格距离为1的可达方格并用一个路径长度值标记,然后依次考查距离为2、3、…的可达方格,直到距离为k的某一个可达方格就是目标方格b时为止,或者由于不存在从a到b的前进方案而终止。
地图区域中的每一个方格与其相邻的上、下、左、右四个方格之间的距离为1,依次沿下、右、上、左这四个方向考查,并用一个队列记录可达方格的位置。
表5.1给出了沿这四个方向前进l步时相对于当前方格的相对偏移量。
表5.1
例如,设游戏的地图区域可划分为一个6×8的方格阵列,如图5.2(a)所示,其中阴影表示已封锁方格。
从起始方格a(位置[3,2],标记为0)出发,按照下、右、上、左的方向依次考查,所标记的可达方格如图5.2(a)所示,目标方格为b(位置[4,7],标记为10),相应的最短前进路径如图5.2(b)虚线所示如图5.3和图5.4所示的流程图即利用了上述思路,在地图方格阵列中进行标记,图中使用的主要符号见表5.2。
在图5.4中,设置地图初始格局,即将可前进方格置为数值-1、已前进方格(即封锁方格)置为-9。
设置方格阵列“围墙”的目的是省略方格位置的边界条件判定,方法是在四周附加方格,并将其标记为-9(与封锁标记相同)。