问答题阅读下列说明和图,回答下面问题。[说明]某企业决定开发一个企业仓储管理系统,由李工承担系统的设计工作。该系统的网络连接如图所示。图1系统网络连接图该企业有多个仓库,如图1所示的中心数据库存储了各个仓库中每种货物的库存信息。每个仓库配备一台前端机,进出货物均由前端机辅助实现。管理员每天上班时,通过前端机从中心数据库的库存表中读取本仓库各种货物的库存数,每个仓库的当日业务数据也都暂存在前端机,当天业务结束后,再将前端机中存储的数据传输到主机进行存储与汇总。每个仓库可以存放多种货物,但同一种货物不能存放在不同的仓库中。每个仓库有多个管理员,但每个管理员只管理一个仓库。货物出库/入库时,由仓库管理员将货物的条码通过阅读器输入前端机中,货物数量的默认值为1,可以由管理员修改。前端机根据输入的货物信息,打印“出库/入库”清单。出库/入库单中国一种货物最多只出现一次,每份出库/入库单由流水号唯一标识。图2是一个出库单的实例。图2出库单实例该系统处理业务的过程如下。(1)初始化:前端机根据仓库号从货物表中读取本仓库中每种货物的货物编码、库存量、货物名称和单价。(2)登记出库/入库信息:由前端机存储每一笔“出库/入库”记录。(3)汇总:在每个工作日结束前汇总当日各种货物的“出库/入库”量至日汇总表。(4)更新库存表:根据当日的汇总信息更新货物的库存。李工经过分析,设计出如下所示的关系模式。出入库单(流水号,出入库标志,管理员号,时间)出入库记录(货物编码,数据,流水号)日汇总表(日期,货物编码,数量,出入库标志)仓库(仓库号,仓库名,仓库电话)管理员(管理号,姓名,仓库号)货物(______)注:时间格式为:—年—月—日时:—分:—,日期格式为:—年—月—日。实体联系图的表示方法如图3所示,其中方框表示实体,菱形表示联系,联系的类型在实体与联系的边上标出。图4为与该系统对应的实体联系图。图3实体联系图的表示方法图4实体联系图
问答题阅读下列说明和C代码,回答问题。[说明]对有向图进行拓扑排序的方法是:(1)初始时拓扑序列为空。(2)任意选择一个入度为0的顶点,将其放入拓扑序列中,同时从图中删除该顶点以及从该顶点出发的弧。(3)重复(2),直到不存在入度为0的顶点为止(若所有顶点都进入拓扑序列则完成拓扑排序,否则由于有向图中存在回路无法完成拓扑排序)。函数int*TopSort(LinkedDigraphG)的功能是对有向图G中的顶点进行拓扑排序,返回拓扑序列中的顶点编号序列,若不能完成拓扑排序,则返回空指针。其中,图G中的顶点从1开始依次编号,顶点序列为v1,v2,...,vn,图G采用邻接表示,其数据类型定义如下。#defineMAXVNUM50/*最大顶点数*/typedefstructArcNode/*表节点类型*/intadjvex;/*邻接顶点编号*/structArcNode*nextarc;/*指示下一个邻接顶点*/ArcNode;typedefstructAdjList/*头节点类型*/charvdata;/*顶点的数据信息*/ArcNode*firstarc;/*指向邻接表的第一个表结点*/AdjList;typedefstructLinkedDigraph/*图的类型*/intn;/*图中顶点个数*/AdjListVhead[MAXVNUM];/*所有顶点的头结点数组*/LinkedDigraph;例如,某有向图G如图8.8所示,其邻接表如图8.9所示。函数TopSort中用到了队列结构(Queue的定义省略),实现队列基本操作的函数原型如下表所示:函数原型说明voidInitQueue(Queue*Q)初始化队列(构造一个空队列)boolIsEmpty(QueueQ)判断队列是否为空,若是则返回true,否则返回falsevoidEnQueue(Queue*Q,inte)元素入队列voidDeQueue(Queue*Q,int*p)元素出队列[C代码]int*TODSort(LinkedDigraphG)ArcNode*p;/*临时指针,指示表结点*/QueueQ;/*临时队列,保存入度为0的顶点编号*/intk=0;/*临时变量,用作数组元素的下标*/intj=0,w=0;/*临时变量,用作顶点编号*/int*topOrdert*inDegree;topOrder=(int*)malloc((G.n+1)*sizeof(int));/*存储拓扑序列中的顶点编号*/inDegree=(int+)malloc((G.n+l)+sizeof(int))j/*存储图G中各顶点的入度*/if(!inDegree||!topOrder)returnNULL;(1);/*构造一个空队列*/for(j=1;j<=G.n;j++)/*初始化*/topOrder[j]=0;inDegree[j]=0;for(j=1;j<=G.n;j++)/*求图G中各顶点的入度*/for(p=G.Vhead[j].firstarc;p;p=p->nextarc)inDegree[p->adjvex]+=1;for(j=1;j<=G.n;j++)/*将图G中入度为0的顶点保存在队列中*/if(0==inDegree[j])EnQueue(&Q,j);while(!IsEmpty(Q))(2);/*队头顶点出队列并用w保存该顶点的编号*/topOrder[k++]=w;/*将顶点w的所有邻接顶点的入度减1(模拟删除顶点w及从该顶点出发的弧的操作)*/for(p=G.Vhead[w].firstarc;p;p=p->nextarc)(3)-=1;if(0==(4))EnQueue(&Q,p->adjvex);/*for*//*while*/free(inDegree);if((5))returnNULL;returntopOrder;/*TopSort*/[问题1]根据以上说明和C代码,填充C代码中的空(1)~(5)。[问题2]对于图8.8所示的有向图G,写出函数TopSort执行后得到的拓扑序列。若将函数TopSort中的队列改为栈,写出函数TopSort执行后得到的拓扑序列。[问题3]设某有向无环图的顶点个数为n、弧数为e,那么用邻接表存储该图时,实现上述拓扑排序算法的函数TopSort的时间复杂度是(6)。若有向图采用邻接矩阵表示(例如,图8.8所示有向图的邻接矩阵如图8.10所示),且将函数TopSort中有关邻接表的操作修改为针对邻接矩阵的操作,那么对于有n个顶点、e条弧的有向无环图,实现上述拓扑排序算法的时间复杂度是(7)。
问答题阅读下列说明和图,回答问题。[说明]某宾馆拟开发一个宾馆客房预订子系统,主要是针对客房的预订和入住等情况进行管理。[需求分析结果](1)员工信息主要包括:员工号、姓名、出生年月、性别、部门、岗位、住址、联系电话和密码等信息。岗位有管理和服务两种。岗位为“管理”的员工可以更改(添加、删除和修改)员工表中的本部门员工的岗位和密码,要求将每一次更改前的信息保留;岗位为“服务”的员工只能修改员工表中本人的密码,且负责多个客房的清理等工作。(2)部门信息主要包括:部门号、部门名称、部门负责人、电话等信息;一个员工只能属于一个部门,一个部门只有一位负责人。(3)客房信息包括:客房号、类型、价格、状态等信息。其中类型是指单人间、三人间、普通标准间、豪华标准间等;状态是指空闲、入住和维修。(4)客户信息包括:身份证号、姓名、性别、单位和联系电话。(5)客房预订情况包括:客房号、预订日期、预订入住日期、预订入住天数、身份证号等信息。一条预订信息必须且仅对应一位客户,但一位客户可以有多条预订信息。[概念模型设计]根据需求阶段收集的信,设计好的实体联系图(不完整)如图7.7所示。[逻辑结构设计]逻辑结构设计阶段设计的部分关系模式(不完整)如下。员工((4),姓名,出生年月,性别,岗位,住址,联系电话,密码)权限(岗位,操作权限)部门(部门号,部门名称,部门负责人,电话)客房((5),类型,价格,状态,入住日期,入住时间,员工号)客户((6),姓名,性别,单位,联系电话)更改权限(员工号,(7),密码,更改日期,更改时间,管理员号)预定情况((8),预定日期,预定入住日期,预定入住天数)1.根据问题描述,填写图7.7中空(1)~(3)处联系的类型。联系类型分为一对一、一对多和多对多三种,分别使用1:1、1:n或1:*、m:n或*:*表示。
问答题阅读下列说明和C代码,回答下面问题。[说明]堆数据结构定义如下。对于n个元素的关键字序列{a1,a2,…,an},当且仅当满足下列关系时称其为堆。在一个堆中,若堆顶元素为最大元素,则称为大顶堆;若堆顶元素为最小元素,则称为小顶堆。堆常用完全二叉树表示,下图是一个大顶堆的例子。大顶堆示例堆数据结构常用于优先队列中,以维护由一组元素构成的集合。对应于两类堆结构,优先队列也有最大优先队列和最小优先队列,其中最大优先队列采用大顶堆,最小优先队列采用小顶堆。以下考虑最大优先队列。假设现已建好大顶堆A,且已经实现了调整堆的函数heapify(A,n,index)。下面将C代码中需要完善的3个函数分别进行说明。(1)heapMaximum(A):返回大顶堆A中的最大元素。(2)heapExtractMax(A):去掉并返回大顶堆A的最大元素,将最后一个元素“提前”到堆顶位置,并将剩余元素调整成大顶堆。(3)maxHeaplnsert(A,key):把元素key插入到大顶堆A的最后位置,再将A调整成大顶堆。优先队列采用顺序存储方式,其存储结构定义如下。#defimePARENT(i)i/2typedefstructarray(int*intarray;//优先队列的存储空间首地址intarraysize;//优先队列的长度intcapacity;//优先队列存储空间的容量}ARRAY;(1)函数heapMaximumintheapMaximum(ARRAY*A){return______;}(2)函数heapExtractMaxintheapExtractMax(ARRAY*A){intmax;max=A->intarray[0];______;A->array_size--;Heapify(A,A->array_size,0);//将剩余元素调整成大顶堆returnmax;}(3)函数maxHeaplnsertintmaxHeapInsert(ARRAY*A,intkey){inti,*p;if(A->array-size=A->capacity){//存储空间的容量不够时扩充空间p=(int*)realloc(A->intarray,A->capacity*2*sizeof(int));if(!p)return-1;A->intarray=p;A->capacity=2*A->capacity;}A->array_size++;i=______;while(i>0i=PARENT(i);}______;return0;}
问答题阅读以下说明和图,回答问题1至问题4,将解答填入对应栏内。[说明]某高校欲开发一个成绩管理系统,记录并管理所有选修课程的学生的平时成绩和考试成绩,其主要功能描述如下:(1)每门课程都由3~6个单元构成,每个单元结束后会进行一次测试,其成绩作为这门课程的平时成绩。课程结束后进行期末考试,其成绩作为这门课程的考试成绩。(2)学生的平时成绩和考试成绩均由每门课程的主讲教师上传给成绩管理系统。(3)在记录学生成绩之前,系统需要验证这些成绩是否有效。首先,根据学生信息文件来确认该学生是否选修这门课程,若没有,那么这些成绩是无效的;如果选修了这门课程,再根据课程信息文件和课程单元信息文件来验证平时成绩是否与这门课程所包含的单元相对应,如果对应,那么这些成绩是有效的,否则无效。(4)对于有效成绩,系统将其保存在课程成绩文件中;对于无效成绩,系统会单独将其保存在无效成绩文件中,并将详细情况提交给教务处。在教务处没有给出具体处理意见之前,系统不会处理这些成绩。(5)若一门课程的所有有效的平时成绩和考试成绩都已经被系统记录,系统会发送课程完成通知给教务处,告知该门课程的成绩已经齐全。教务处根据需要,请求系统生成相应的成绩列表,用来提交考试委员会审查。(6)在生成成绩列表之前,系统会生成一份成绩报告给主讲教师,以便核对是否存在错误。主讲教师需将核对之后的成绩报告返还系统。(7)根据主讲教师核对后的成绩报告,系统生成相应的成绩列表,递交考试委员会进行审查。考试委员会在审查之后,上交一份成绩审查结果给系统。对于所有通过审查的成绩,系统将会生成最终的成绩单,并通知每个选课学生。现采用结构化方法对这个系统进行分析与设计,得到如图15-13所示的顶层数据流图和如图15-14所示的第0层数据流图。
问答题【问题1】
在需求分析阶段,采用UML的用例图(Use Case Diagram)描述系统功能需求,如图3-8所示。请指出图中的A、B、C和D分别是哪个用例?
问答题【问题3】加工2子图(见图1-19)分解成如图所示的4个子加工及相关的文件(即数据存储)。试在此基础上将相关的DFD成分添加在对应栏内,以完成该加工子图。
问答题【问题2】
指出在哪些图中遗漏了哪些数据流。回答时用如下形式之一。
(1)XX图中遗漏了XX加工(或文件)流向XX加工(或文件)的XX数据流;
(2)XX图中XX加工遗漏了XX输入(或输出)数据流。
问答题阅读下列说明和C代码,回答问题1至问题3,将解答写在对应栏内。[说明]堆数据结构定义如下:对于n个元素的关键字序列a1,a2,…,an),当且仅当满足下列关系时称其为堆。在一个堆中,若堆顶元素为最大元素,则称为大顶堆;若堆顶元素为最小元素,则称为小顶堆。堆常用完全二叉树表示,图21-16是一个大顶堆的例子。堆数据结构常用于优先队列中,以维护由一组元素构成的集合。对应于两类堆结构,优先队列也有最大优先队列和最小优先队列,其中最大优先队列采用大顶堆,最小优先队列采用小顶堆。以下考虑最大优先队列。假设现已建好大顶堆A,且已经实现了调整堆的函数heapify(A,n,index)。对C代码中需要完善的3个函数说明如下。(1)heapMaximum(A):返回大顶堆A中的最大元素。(2)heapExtractMax(A):去掉并返回大项堆A的最大元素,将最后一个元素“提前”到堆顶位置,并将剩余元素调整成大顶堆。(3)maxHeapInsert(A,key):把元素key插入到大顶堆A的最后位置,再将A调整成大顶堆。优先队列采用顺序存储方式,其存储结构定义如下:#definePARENT(i)i/2typedefstructarrayint*int_arrav;//优先队列的存储空间首地址intarray_size;//it先队列的长度intcapacity;//优先队列存储空间的容量ARRAY;[C代码](1)函数heapMaximumintheapMaximum(ARRAY*A)return(1);(2)函数heapExtractMaxintheapExtractMax(ARRAY*A)intmax;max=A->int_array[0];(2);A->array_size--;heapify(A,A->array_size,0);//将剩余元素调整成大顶堆returnmax;(3)函数maxHeapInsertintmaxHeapInsert(ARRAY*A,intkey)inti,*p;if(A->array_size==A->capacity)//存储空间的容量不够时扩充空间p=(int*)realloc(A->int_array,A->capacity*2*sizeof(int));if(!p)return-1;A->int_array=p;A->capacity=2*A->capacity;A->array_size++;i=(3);while(i>0&&(4))A->int_array[i]=A->int_array[PARENT(i)];i=PARENT(i);(5);return0;1.根据以上说明和C代码,填充C代码中的空(1)~(5)。
问答题阅读下列说明和图,回答下面问题。[说明]一个简单的图形编辑器提供给用户的基本操作包括:创建图形、创建元素、选择元素以及删除图形。图形编辑器的组成及其基本功能描述如下:(1)图形由文本元素和图元元素构成,图元元素包括线条、矩形和椭圆。(2)图形显示在工作空间中,一次只能显示一张图形(即当前图形,current)。(3)编辑器提供了两种操作图形的工具:选择工具和创建工具。对图形进行操作时,一次只能使用一种工具(即当前活动工具,active)。①创建工具用于创建文本元素和图形元素。②对于显示在工作空间中的图形,使用选择工具能够选定其中所包含的元素,可以选择一个元素,也可以同时选择多个元素。被选择的元素成为当前选中元素(selected)。③每种元素都具有相应的控制点。拖拽选定元素的控制点,可以移动元素或者调整元素的大小。现采用面向对象方法开发该图形编辑器,使用UML进行建模。构建出的用例图和类图分别如图1和2所示。图1用例图图2类图
问答题阅读下列说明,回答问题。[说明]某集团公司拥有多个大型连锁商场,公司需要构建一个数据库系统以方便管理其业务运作活动。[需求分析结果](1)商场需要记录的信息包括商场编号(编号唯一)、商场名称、地址和联系电话。某商场信息如表7.12所示。表7.12商场信息表商场编号商场名称地址联系电话PS2101淮海商场淮海中路918号021-64158818PS2902西大街商场西大街时代盛典大厦029-87283229PS2903东大街商场碑林区东大街239号029-87450287PS2901长安商场雁塔区长安中路38号029-85264950(2)每个商场包含有不同的部门,部门需要记录的信息包括部门编号(集团公司分配)、部门名称、位置分布和联系电话。某商场的部门信息如表7.13所示。表7.13部门信息表部门编号部门名称位置分布联系电话DT002财务部商场大楼6层82504342DT007后勤部商场地下副一层82504347DT021安保部商场地下副一层82504358DT005人事部商场大楼6层82504446DT004管理部商场裙楼3层82504668(3)每个部门雇用多名员工处理日常事务,每名员工只能隶属于一个部门(新进员工在培训期不隶属于任何部门)。员工需要记录的信息包括员工编号(集团公司分配)、姓名、岗位、电话号码和工资。员工信息如表7.14所示。表7.14员工信息表员工编号姓名岗位电话号码工资XA3310周超理货员136092576381500.00SH1075刘飞防损员134772934871500.00XA0048江雪化广播员152345678931428.00BJ3123张正华部门主管133456984321876.00(4)每个部门的员工中有一名是经理,每个经理只能管理一个部门,系统需要记录每个经理的任职时间。[概念模型设计]根据需求阶段收集的信息,设计的实体联系图和关系模式(不完整)如图7.5所示。[关系模式设计]商场(商场编号,商场名称,地址,联系电话)部门(部门编号,部门名称,位置分布,联系电话,(a))员工(员工编号,员工姓名,岗位,电话号码,工资,(b))经理((c),任职时间)1.根据问题描述,补充四个联系,完善图7.5的实体联系图。联系名可用联系1、联系2、联系3和联系4代替,联系的类型分为1:1、1:n和m:n。
问答题阅读下列说明和C++代码,在(n)处填入正确的字句。[说明]某公司的组织结构图如图10.4所示,现采用组合(Composition)设计模式来构造该公司的组织结构,得到如图10.5所示的类图。其中Company为抽象类,定义了在组织结构图上添加(Add)和删除(Delete)分公司/办事处或者部门的方法接口。类ConcreteCompany表示具体的分公司或者办事处,分公司或办事处下可以设置不同的部门。类HRDepartment和FinanceDepartment分别表示人力资源部和财务部。[C++代码]#include<iostream>#include<list>#include<string>usingnamespacestd;classCompany//抽象类protected:stringname;public:Company(stringname)(1)=name;(2);//增加子公司、办事处或部门(3);//删除子公司、办事处或部门;classConcreteCompany:publicCompanyprivate:list<(4)>children;//存储子公司、办事处或部门public:ConcreteCompany(stringname):Company(name)voidAdd(Company*c)(5).pushback(c);voidDelete(Company*c)(6).remove(c);;classHRDepartment:publicCompanypublic:HRDepartment(stringname):Company(name)//其他代码省略;classFinanceDepartment:publicCompanypublic:FinanceDepartment(stringname):Company(name)//其他代码省略;voidmain()ConcreteCompany*root=newComcreteCompany("北京总公司");root->Add(newHRDepartrnent("总公司人力资源音"));root->Add(newFinanceDepartment("总公司财务部"));ConcreteCompany*comp=newConcreteCompany("上海分公司");comp->Add(newHRDepartment("上海分公司人力资源部"));comp->Add(newFinanceDepartment("上海分公司财务部"));(7);ConcreteCompany*compl=newConcreteCompany("南京办事处");comp1->Add(newHRDepartment("南京办事处人力资源部"));comp1->Add(newFinanceDepartment("南京办事处财务部"));(8);//其他代码省略
问答题【问题1】
根据上述说明,请给出:
(1)“职员”关系模式的主键和外键。
(2)“部门”关系模式的主键和外键。
问答题阅读以下说明和C程序,在(n)处填入适当的字句。[说明]现有n(n<1000)节火车车厢,顺序编号为1,2,3,…,n,按编号连续依次从A方向的铁轨驶入,从B方向铁轨驶出,一旦车厢进入车站(Station)就不能再回到A方向的铁轨上;一旦车厢驶入B方向铁轨就不能再回到车站,如图8.11所示,其中Station为栈结构,初始为空且最多能停放1000节车厢。下面的C程序判断能否从B方向驶出预先指定的车厢序列,程序中使用了栈类型STACK,关于栈基本操作的函数原型说明如下。voidInitStack(STACK*s):初始化栈。voidPush(STACK*s,inte):将一个整数压栈,栈中元素数目增1。voidPop(STACK*s):栈顶元素出栈,栈中元素数目减1。intTop(STACKs):返回非空栈的栈顶元素值,栈中元素数目不变。intIsEmpty(STACKs):若是空栈则返回1,否则返回0。[C程序]#include<stdio.h>/*此处为栈类型及其基本操作的定义,省略*/intmain()STACKstation;intstate[1000];intn;/*车厢数*/intbegin,i,j,maxNo;/*maxNo为A端正待入栈的车厢编号*/printf("清输入车厢数:");scanf("%d",&n);printf("请输入需要判断的车厢编号序列(以空格分隔):");if(n<1=return-1;for(i=0;i<n;i++)/*读入需要驶出的车厢编号序列,存入数组state[]*/scanf("%d",&state[i]);(1);/*初始化栈*/maxNo=1;for(i:0;i<n;)(/*检查输出序列中的每个车厢号state[i]是否能从栈中获取*/if((2))(/*当栈不为窄时*/if(state[i]=Top(station))/*栈顶车厢号等于被检查车厢号*/printf("%d",Top(station));Pop(&station);i++;elseif((3))printf("error/n");return1;elsebegin=(4);for(j=begin+1;j<=state[i];j++)Push(&station,j);else/*当栈为空时*/begin=maxNo;for(j=begin;j<=state[il;j++)Push(&station,j);maxNo=(5);printf("OK");return0;
问答题阅读下列说明和c代码,回答问题1至问题3,将解答写在对应栏内。 [说明] 某应用中需要对100000个整数元素进行排序,每个元素的取值在0~5之间。排序算法的基本思想是:对每一个元素x,确定小于等于x的元素个数(记为m),将x放在输出元素序列的第m个位置。对于元素值重复的情况,依次放入第m-1,m-2,…个位置。例如,如果元素值小于等于4的元素个数有10个,其中元素值等于4的元素个数有3个,则4应该在输出元素序列的第10个位置、第9个位置和第8个位置上。算法的具体步骤如下。 步骤1:统计每个元素值的个数。 步骤2:统计小于等于每个元素值的个数。 步骤3:将输入元素序列中的每个元素放入有序的输出元素序列。 [C代码] 下面是该排序算法的c语言实现。 (1)常量和变量说明 R:常量,定义元素取值范围中的取值个数,如上述应用中R值应取6; i:循环变量; n:待排序元素个数; a:输入数组,长度为n; b:输出数组,长度为n; c:辅助数组,长度为R,其中每个元素表示小于等于下标所对应的元素值的个数。 (2)函数sort 1 void sort(int n,int a[],int b[]) 2 int c[R],i; 3 for(i=0;i< (1) ;i++) 4 c[i]=0; 5 6 for(i=0;i<n;i++) 7 c[a[i]]= (2) ; 8 9 for(i=1;i<R;i++) 10 c[i]= (3) 11 12 for(i=0;i<n;i++) 13 b[c[a[i]]-1]= (4) ; 14 c[a[i]]=c[a[i]]-1; 15 16 1.根据说明和C代码,填充C代码中的空缺(1)~(4)。
问答题阅读下列说明和C代码,回答下面问题。
[说明]
设有n个货物要装入若干个容重为C的集装箱以便运输,这n个货物的体积分别为{s1,s2,…,sn},且有si≤C(1≤i≤n)。为节省运输成本,用尽可能少的集装箱来装运这n个货物。
下面分别采用最先适宜策略和最优适宜策略来求解该问题。
最先适宜策略(firstfit)首先将所有的集装箱初始化为空,对于所有货物,按照所给的次序,每次将一个货物装入第一个能容纳它的集装箱中。
最优适宜策略(bestfit)与最先适宜策略类似,不同的是,总是把货物装到能容纳它且目前剩余容重最小的集装箱,使得该箱子装入货物后闲置空间最小。
[C代码]
下面是这两个算法的C语言核心代码。
(1)变量说明
●n:货物数。
●C:集装箱容量。
●s:数组,长度为n,其中每个元素表示货物的体积,下标从0开始。
●b:数组,长度为n,b[i]表示第n+i个集装箱当前已经装入货物的体积,下标从0开始。
●j:循环变量。
●k:所需的集装箱数。
●min:当前所用的各集装箱装入了第i个货物后的最小剩余容量。
●m:当前所需的集装箱数。
●temp:临时变量。
(2)函数firstfit
int firstfit(){
int i,j;
k=0;
for(i=0;i<n; i++){
b[i]=0;
}
for(i=0;i<n;i++){
______;
while(c-b[j]<s[i]){
j++;
}
______;
k=k>(j+1)?k:(j+1);
}
return k;
}
(3)函数bestfit
int bestfit(){
int i,j,min,m, temp;
k=0;
for(i=0;i<n;i++){
b[i]=0;
}
for(i=0;i<n;i++){
min=C;
m=k+1;
for(j=0;j<k+1;j++){
temp=C-b[j]-s[i];
if(temp>0
m=j;
}
}
______;
k=k>(j+1)?k:(j+1);
}
return k;
}
问答题【问题3】请补齐下列数据字典条目:登录信息=学生ID+密码注册信息=______
问答题阅读下列说明和C++代码,在(n)处填入适当的字句。[说明]现欲构造一文件/目录树,采用组合(Composite)设计模式来设计,得到的类图如10.16所示。#include<list>#include<iostream>#include<string>usingnamespacestd;classAbstractFileprotected:stringname;//文件或目录名称public:voidprintName()cout<<name;//打印文件或目录名称virtualvoidaddChild(AbstractFile*file)=0;//给一个目录增加子目录或文件virtualvoidremoveChild(AbstractFile*file)=0;//删除一个目录的子目录或文件virtuallist<AbstractFile*>*getChildren()=0;//获得一个目录的子目录或文件;classfile:publicAbstractFilepublic:File(stringname)(1)=name;voidaddChild(AbstractFile*file)return;voidremoveChild(AbstractFile*file)return;(2)getChildren()(return(3);;classFolder:publicAbstractFileprivate:list<AbstractFile*>childList://存储子目录或文件public:Folder(stringname)(4)=name;voidaddChild(AbstractFile*file)childList.push_back(file);voidrernoveChild(AbstractFile*file)childList.remove(file);list<AbstractFile*>*getChildren()(return(5);;voidmain()//构造一个树型的文件/目录结构AbstractFile*rootFolder=newFolder("c://");AbstractFile*compositeFolder=newFolder("composite");AbstractFile*windowsFolder=newFolder("windows");AbstractFile*file=newFile("TestCompositejava");rootFolder->addChild(compositeFolder);rootFolder->addChild(windowsFolder);compositeFolder->addChild(file);
问答题阅读下列说明和C函数代码,在(n)处填入适当的字句。[说明]对二叉树进行遍历是二叉树的一个基本运算。遍历是指按某种策略访问二叉树的每个节点,且每个节点仅访问一次的过程。函数InOrder()借助栈实现二叉树的非递归中序遍历运算。设二叉树采用二叉链表存储,节点类型定义如下。typedefstructBtNodeElemTypedata;/*节点的数据域,ElemType的具体定义省略*/structBtNode*lchild,*rchild;/*节点的左、右孩子指针域*/BtNode,*BTree;在函数InOrder()中,用栈暂存二叉树中各个节点的指针,并将栈表示为不含头节点的单向链表(简称链栈),其节点类型定义如下。typedefstructStNode/*链栈的节点类型*/BTreeelem;/*栈中的元素是指向二叉链表节点的指针*/structStNode*link;StNode;假设从栈顶到栈底的元素为en,ee-1,…,e1,则不含头节点的链栈示意图如图8.12所示。[C函数]intInOrder(BTreeroot)/*实现二叉树的非递归中序遍历*/Brrreeptr;/*ptr用于指向二叉树中的节点*/StNode*q;/*q暂存链栈中新创建或待删除的节点指针*/StNode*stacktop=NULL;/*初始化空栈的栈顶指针stacktop*/ptr=root;/*ptr指向二又树的根节点*/while((1)||stacktop!=NULL)while(ptr!=NULL)q=(StNode*)malloc(sizeof(StNode));if(q==NULL)return-1;q->elem=ptr;(2);stacktop=q;/*stacktop指向新的栈顶*/ptr=(3);/*进入左子树*/q=stacktop;(4);/*栈顶元素出栈*/visit(q);/*visit是访问节点的函数,其具体定义省略*/ptr=(5);/*进入右子树*/free(q);/*释放原栈顶元素的节点空间*/return0:/*InOrder*/
问答题阅读下列说明和Java代码,将应填入______处的字句写在下面。[说明]现要求实现一个能够自动生成求职简历的程序,简历的基本内容包括求职者的姓名、性别、年龄及工作经历。希望每份简历中的工作经历有所不同,并尽量减少程序中的重复代码。现采用原型模式(Prototype)来实现上述要求,得到如下图所示的类图。类图[Java代码]ClassworkExperience______Cloneable{//工作简历PrivateStringworkDate;PrivateStringcompany;PublicObjectClone(){______;obj.workDate=this.workDate;Obj.company-this.company;Returnobj;}}ClassResume______Cloneable{//简历PrivateStringname;PrivateStringsex;PrivateStringage;PrivateWorkExperiencework;PublicResume(Stringname){This.name=name;work=newWorkExperience();}PrivateResume(WorkExperiencework){This.woek=______;}PublicvoidSetPersonalInfo(Stringsex,Stringage){/*代码省略*/}PublicvoidSetWorkExperience(StringworkDate,Stringcompany){/*代码省略*/}PublicObjectClone(){Resumeobj=______;//其余代码省略Returnobj;}}ClassWorkResume{PublicStaticvoidmain(String[]args){Resumea=newResume("张三");a.SetPersonalInfo("男","29");a.setworkExperience("1998~2000","XXX公司");Resumeb=______;b.setworkExperience("2001~2006","YYY公司");}}
