问答题 阅读以下说明和流程图(如图2所示),回答问题1和问题2。
【说明】 本流程图实现从成绩文件生成学生成绩一览表。
某中学某年级的学生成绩数据(分数)登录在成绩文件10中,其记录格式见表2:{{B}} 表2{{/B}}
学号
姓名
课程1成绩
课程2成绩
……
课程6成绩 由该成绩文件生成见表3的学生成绩一览表。生成的学生成绩一览表按学号升序排列。表中的名次是指该生相应课程在年级中的名次。{{B}} 表3{{/B}}
学号
姓名
课程1
课程2
……
课程6
成绩
名次
成绩
名次
……
……
成绩
名次
流程图中的顺序文件F0是学生成绩文件,F0文件经处理1处理后产生顺序文件F,然后经过处理2至处理4对文件F进行处理和更新。在处理5中,仅对文件F的纪录进行学生成绩一览表的编排输出,不进行排序和增加名次等处理。
问答题【说明】已知集合A和B的元素分别用不含头结点的单链表存储,函数Difference()用于求解集合A与B的差集,并将结果保存在集合A的单链表中。例如,若集合A={5,10,20,15,25,30},集合B={5,15,35,25},如图(a)所示,运算完成后的结果如图(b)所示。链表结点的结构类型定义如下:typedefstructNode{ ElemTypeelem; structNode*next;}NodeType;【C函数】voidDifference(NodeType**LA,NodeType*LB){ NodeType*pa,*pb,*pre,*q; pre=NULL;{{U}}(1){{/U}}; while(pa){ pb=LB; while({{U}}(2){{/U}}) pb=pb->next; if({{U}}(3){{/U}}){ if(!pre)*LA={{U}}(4){{/U}}; else {{U}}(5){{/U}}=pa->next; q=pa; pa=pa->next;free(q); } else{ {{U}}(6){{/U}};pa=pa->next; } }}
问答题某营销企业拟开发一个销售管理系统,其主要动能描述如下。(1)接受客户订单,检查库存货物是否满足订单要求。如果满足,进行供货处理,即修改库存记录文件,给库房开具备货单并且保留客户订单至订单记录文件;否则进行缺货处理,即将缺货记录单存入缺货记录文件。(2)根据缺货记录文件进行缺货统计,将缺货通知单发给采购部门。(3)根据采购部门提供的进货通知单进行进货处理,即修改库存记录文件,并从缺货记录文件中取出缺货订单进行供货处理。(4)根据保留的客户订单进行销售统计,打印统计报表给经理。现采用结构化方法对销售管理系统进行分析与设计,获得如图1所示的顶层数据流图和如图2所示的0层数据流图。图1顶层数据流图图20层数据流图
问答题[说明]下列最短路径算法的具体流程如下:首先构造一个只含n个顶点的森林,然后依权值从小到大从连通网中选择不使森林中产生回路的边加入到森林中去,直至该森林变成一棵树为止,这棵树便是连通网的最小生成树。该算法的基本思想是:为使生成树上总的权值之和达到最小,则应使每一条边上的权值尽可能地小,自然应从权值最小的边选起,直至选出n-1条互不构成回路的权值最小边为止。[算法]/*对图定义一种新的表示方法,以一维数组存放图中所有边,并在构建图的存储结构时将它构造为一个“有序表”。以顺序表MSTree返回生成树上各条边。*/typedefstructVertexTypevex1;VertexTypevex2;VRTypeweight;EdgeType;typedefElemTypeEdgeType;typedefstruct//有向网的定义VertexTypevexs[MAX_VERTEX_NUM];//顶点信息EdgeTypeedge[MAX_EDGE_NUM];//边的信息intvexnum,arcnum;//图中顶点的数目和边的数目IELGraph;voidMiniSpanTree_Kruskal(ELGraphG,SqListInitSet(F,G.vexnum);//将森林F初始化为N棵树的集合InitList(MSTree,G.vexnum);//初始化生成树为空树i=0;k=1;while(k<(1))e=G.edge[i];//取第i条权值最小的边/*函数fix_mfset返回边的顶点所在树的树的根代号,如果边的两个顶点所在树的树根相同,则说明它们已落在同一棵树上。*/ri=fix_mfset(F,LocateVex(e.vex1));r2=(2);//返回两个顶点所在树的树根if(r1(3)r2)//选定生成树上第k条边if(Listlnsert(MSTree,k,e)(4);//插入生成树mix_mfset(E,r1,r2);//将两棵树归并为一棵树(5);//继续考察下一条权值最小边DestroySet(F);
问答题【问题1】 转换图中缺少哪三条数据流?请指明每条数据流的名称、起点和终点。
问答题阅读下列说明和流程图2-3,将应填入{{U}} (n) {{/U}}的字句写在答题纸的对应栏内。
【说明】
下面的流程图描述了对8位二进制整数求补的算法。
该算法的计算过程如下:从二进制数的低位(最右位)开始,依次向高位逐位查看,直到首次遇到“1”时,停止查看。然后,对该“1”位左面的更高位(如果有的话),逐位求反,所得的结果就是对原二进制数求补的结果。
例如:对二进制整数10101000求补的结果是01011000。
设8位二进制整数中的各位,从低位到高位,依次存放在整型数组BIT的B1T[1]~BIT[8]中。例如,二进制整数10101000存放在数组BIT后,就有BIT[1]=0,BIT[2]=0,…,BIT[7] =0,BIT[8]=1。若流程图中存在空操作,则用NOP表示。
【流程图】
注:流程图中{{U}} (1) {{/U}}处按“循环变量名:循环初值,增量,循环终值”格式描述。
问答题阅读下列说明和C++代码,回答下列问题。[说明]某咖啡店卖咖啡时,可以根据顾客的要求在其中加入各种配料,咖啡店会根据所加入的配料来计算费用。咖啡店所供应的咖啡及配料的种类和价格如表所示。咖啡及配料的种类和价格咖啡价格/杯(¥)配料价格/份(¥)蒸馏咖啡(Espresso)25摩卡(Mocha)10深度烘焙咖啡(DarkRoast)20奶泡(Whip)8[C++代码]#include<iostream>#include<string>usingnamespacestd;consrintESPRESSO_PRICE=25;constintDRAKROAST_PRICE=20;constintMOCHA_PRICE=10;constintWHIP_PRICE=8;classBeverage//饮料______:stringdescription;public:______()returndescription;______;;classCondimentDecorator:publicBeverage//配料protected:______;;classEspresso:publicBeverage//蒸馏咖啡public:Espresso()description="Espresso";intcost()returnESPRESSO_PRICE;;classDarkRoast:publicBeverage//深度烘培咖啡public:DarkRoast()description="DardRoast";intcost()returnDRAKROAST_PRICE;;classMocha:publicCondimentDecorator//摩卡public:Mocha(Beverage*beverage)this->beverage=beverage;stringgetDescription()returnbeverage->getDescription()+",Mocha";intcost()returnMOCHA_PRICE+beverage->cost();;classWhip:publicCondimentDecorator//奶泡public:Whip(Beverage*beverage)this->beverage=beverage;stringgetDescription()returnbeverage->getDescription()+",Whip";intcost()returnWHIP_PRICE+beverage->cost();intmain()Beverage*beverage=newDarkRoast();beverage=newMocha(______);beverage=newWhip(______);cout<<beverage->getDescription()<<"¥"<<beverage->cost()end1;return0;编译运行上述程序,其输出结果为:DarkRoast,Mocha,Whip¥38。
问答题【说明】 假定用一个整型数组表示一个长整数,数组的每个元素存储长整数的一位数字,则实际的长整数m表示为: m=a[k]×10k-2+a[k-1]×10k-3+…+a[3]×10+a[2] 其中a[1]保存该长整数的位数,a[0]保存该长整数的符号:0表示正数,1表示负数。 运算时先决定符号,再进行绝对值运算。对于绝对值相减情况,总是绝对值较大的减去绝对值较小的,以避免出现不够减的情况。注:不考虑溢出情况,即数组足够大。 【函数】 int cmp(int *LA, int *LB); /*比较长整数LA与LB的绝对值大小*/ /*若LA绝对值较大返回正值,LA较小返回负值,相等则返回0*/ int ADD(int *LA, int*LB, int *LC) /*计算长整数LA与LB的和,结果存储于LC中*/ /*注意:正数与负数的和相当于正数与负数绝对值的差*/ /*数据有误返回0,正常返回1*/ { if(LA==NULL || LB==NULL || LC==NULL)return 0; int *pA, *pB,i,N,carry,flag; flag=LA[0]+LB[0]; switch(flag){/*根据参与运算的两个数的符号进行不同的操作*/ case 0: case 2: LC[0]=LA[0];/*LA与LB同号,结果符号与LA(LB)相同*/ pA=LA; pB=LB; {{U}} (1) {{/U}}; break; case 1:/*LA与LB异号*/ /*比较两者的绝对值大小,结果符号与较大者相同*/ flag={{U}} (2) {{/U}}; if(flag>0){/*LA较大*/ LC[0]=LA[0]; pA=LA; pB=LB; } else if(flag<0){/*LB较大*/ LC[0]=LB[0]; pA=LB; pB=LA; } else{/*LA与LB相等*/ LC[0]=0; LC[1]=0; return 1; } flag=-1; break; default: return 0; break; }/*switch*/ /*绝对值相加减*/ /*注意对于减法pA指向较大数,pB指向较小数,不可能出现不够减的情况*/ {{U}} (3) {{/U}}; N=LA[1]>LB[1]?LA[1]:LB[1]; for(i=0;i<N;i++){ if(i>=pA[1]){/*LA计算完毕*/ carry+=flag *pB[i+2]; } else if(i>=pB[1]){/*LB计算完毕*/ carry +=pA[i+2]; } else{ carry +=pA[i+2]+flag *pB[i+2]; } LC[i+2]=Carry%10; carry /=10; if({{U}} (4) {{/U}}){/*需要借位,针对减法*/ LC[i+2]+=10; carry--; } }/*for*/ if({{U}} (5) {{/U}}){/*最高进位,针对加法*/ LC[i+2]=carry; i++; } if(LC[i+1]==0)i--;严若最高位为零,针对减法*/ LC[1]=i; return 1; };/*ADD*/
问答题【问题2】
请给出问题1中住宿关系的主键和外键。
问答题【说明】
C++语言本身不提供对数组下标越界的判断。为了解决这一问题,在程序6中定义了相应的类模板,使得对厂任意类型的二维数组,可以在访问数组元素的同时,对行下标和列下标进行越界判断,并给出相应的提示信息。
#include<iostream.h>
template <class T> class Array;
template <class T> class ArrayBody {
friend {{U}} (1) {{/U}}
T* tpBody;
int iRows, iColumns, iCurrentRow;
ArrayBody (int iRsz, int iCsz) {
tpBody = {{U}}(2) {{/U}}
iRows = iRsz; iColumns =iCsz; iCurrentRow =-1;
}
public:
T
row_error=column_error=false;
try{
if (iCurrentRow < 0 || iCurrentRow >=iRows)
row_error=true;
if (j < 0 || j >=iColumns)
column_error=true;
if ( row_error==true || column_error == true)
{{U}} (3) {{/U}}
}
catch (char) {
if (row_error==true)
cerr << "行下标越界[" << iCurrentRow << "] ";
if (column_error== true )
cerr << "列下标越界[" <<j << "]";
cout << "/n";
}
return tpBody[iCurrentRow * iColumns +j];
};
~ArrayBody ( ) { delete[] tpBody; }
};
template <class T> class Array {
ArrayBody<T> tBody;
public:
ArrayBody<T>
}
Array (int iRsz, int iCsz) : {{U}}(5) {{/U}}{}
};
void main()
{ Array<int>a1(10,20);
Array<double>a2(3,5);
int b1;
double b2;
b1=a1[-5][10]; //有越界提示:行下标越界[-5]
b1=a1[10][15]; //有越界提示:行下标越界[10]
b1=a1[1][4]; //没有越界提示
b2=a2[2][6]; //有越界提示:列下标越界[6]
b2=s2[10][20]; //有越界提示:行下标越界[10]列下标越界[20]
b2=a2[1][4]; //没有越界提示
}
问答题阅读下列说明和图,回答问题1至问题4,将解答填入对应栏内。【说明】在线会议审稿系统(OnlineReviewingSystem,ORS)主要处理会议前期的投稿和审稿事务,其功能描述如下:1.用户在初始使用系统时,必须在系统中注册(register)成为作者或审稿人。2.作者登录(login)后提交稿件和浏览稿件审阅结果。提交稿件必须在规定提交时间范围内,其过程为先输入标题和摘要、选择稿件所属主题类型、选择稿件所在位置(存储位置)。上述几步若未完成,则重复;若完成,则上传稿件至数据库中,系统发送通知。3.审稿人登录后可设置兴趣领域、审阅稿件给出意见以及罗列录用和(或)拒绝的稿件。4.会议委员会主席是一个特殊审稿人,可以浏览提交的稿件、给审稿人分配稿件、罗列录用和(或)拒绝的稿件以及关闭审稿过程。其中,关闭审稿过程须包括罗列录用和(或)拒绝的稿件。系统采用面向对象方法开发,使用UMi进行建模。在建模用例图时,常用的方式是先识别参与者,然后确定参与者如何使用系统来确定用例,每个用例可以构造一个活动图。参与者名称、用例和活动名称分别参见以下各表。参与者列表名称说明名称说明User用户Author作者Reviewer审稿人PCChair委员会主席 用例名称列表名称说明名称说明login登录系统register注册submitpaper提交稿件browsereviewresults浏览稿件审阅结果closereviewingprocss关闭审稿过程assignpapertoreviewer分配稿件给审稿人setpreferences设定兴趣领域enterreview审阅稿件给出意见list accepted/rejectedpapers罗列录用或/和拒绝的稿件browse submittedpapers浏览提交的稿件活动名称列表名称说明名称说明selectpaperlocation选择稿件位置uploadpaper上传稿件selectsubjectgroup选择主题类型sendnotification发送通知entertitleandabstract输入标题和摘要 系统的部分用例图和提交稿件的活动图分别见下图。
问答题阅读下列说明以及图3-1和图3-2,回答问题1、问题2和问题3。
[说明] 下面是某公司开发的电梯管理系统,系统功能如下:
1.响应用户召唤指令。当用户需要电梯时可以通过按楼层面板召唤。
2.进入电梯后,乘客可以通过电梯面板选择目的楼层。
3.当电梯到达调度楼层后,判断是否响应停止运行,开启电梯门,完成调度。
4.当电梯到达非调度楼层时,不作响应,继续运行。
5.乘客在电梯中能够知道电梯的运动状态,如运动方向、电梯运行到的楼层等。 6.电梯超载报警。
系统采用面向对象方法进行开发。在开发过程中某设计室设计的电梯管理系统用例如表9-4所示。电梯管理系统用例图如图9-4所示。
{{B}}表9-4
系统用例说明{{/B}}
用例名称
描述
电梯召唤
当用户需要使用电梯时,通过按楼层面板通知电梯管理系统
目的地请求
进入电梯后,乘客可以通过电梯面板选择目的楼层
电梯到达调度楼层
当电梯到达调度楼层后,判断是否响应,如果响应则停止运行,开户电梯门,完成调度,否则继续运行
电梯到达非调度楼层
当电梯到达非调度楼层时,不作响应,继续运行
电梯就绪
电梯不处于忙状态,但符合运行要求,随时可以召唤
电梯超载
电梯所载重量超过额定载荷,给出报警信号,停止运行
电梯不超载
电梯所载重量没有超过额定载荷,可以正常运行
根据说明,回答下面问题:
问答题[问题2]
识别关联的多重度是面向对象建模过程中的一个重要步骤。根据说明中给出的描述,完成图中的(1)~(6)。
问答题阅读以下说明和数据流图,回答问题1~3问题。
[说明]
干部信息管理系统(CMIS)是用于对干部信息进行管理的特定系统。利用该系统,干部科可以对本单位干部信息进行管理,根据不同命令对信息进行增、删、改、内部调动,打印人事表格,进行统计、检索。干部科输入的系统命令需要合法性检查才能被接受、处理。系统命令可以是检索命令、统计命令、打印命令、维护命令中的任何一种。干部科的输入的干部信息数据包括输入信息、检索项、统计项、打印项、维护项等条目。一个完整的输入信息应包括干部的档号、干部的姓名、干部的性别、干部的年龄、干部的级别、干部的职称、干部的政治面貌等内容。系统进行检索处理时可以根据干部的档号、姓名或年龄进行简单检索,也可以根据“档号+姓名”或者“性别+年龄”进行组合检索。系统进行统计处理时,可以根据干部的性别、年龄或职称进行简单统计,也可以根据“年龄+职称”或“性别+职称”进行综合统计。通过系统授权,用户可以对系统进行维护。当用户需要对系统进行维护时,输入维护命令,得到合法性确认后,可以对系统数据库信息进行修改维护。维护命令包括:增加命令,根据输入信息增加干部信息;修改命令,根据修改项修改干部信息;检索命令,根据检索项检索干部信息。系统可以输出统计信息、人事表格、检索信息以供干部科用户使用。
干部信息管理系统的顶层图如图9-1所示;干部信息管理系统的第0层DFD图如图9-2所示,其中,加工3的细化图如图9-3所示。
问答题[说明]一般的树结构常采用孩子—兄弟表示法表示,即用二叉链表做树的存储结构,链表中节点的两个链域分别指向该节点的第一个孩子节点和下一个兄弟节点。例如,如图1-15(a)所示树的孩子—兄弟表示如图1-15(b)所示。函数LevelTraverse()的功能是对给定树进行层序遍历。例如,对如图1-15所示的树进行层序遍历时,节点的访问次序为DBAEFPC。对树进行层序遍历时使用了队列结构,实现队列基本操作的函数原型如表1-11所示。Bool、Status类型定义如下:树的二叉链表节点定义如下:表1-11实现队列基本操作的函数原型表函数原型说明voidInitQueue(Queue*Q)初始化队列BoolIsEmpty(QueueQ)判断队列是否为空,若是则返回true,否则返回falsevoidEnQueue(Queue*Q,TreeNodep)元素入队列voidDeQueue(Queue*Q,TreeNode*p)元素出队列[C函数程序]
问答题[说明]一般的树型结构常采用孩子-兄弟表示法表示,即用二叉链表作树的存储结构,链表中节点的两个链域分别指向该节点的第一个孩子节点和下一个兄弟节点。例如,下图(a)中所示的树的孩子-兄弟表示如下图(b)中所示。函数LeVelTraVerse()的功能是对给定树进行层序遍历。例如,对图中所示的树进行层序遍历时,节点的访问次序为DBAEFPC。对树进行层序遍历时使用了队列结构,实现队列基本操作的函数原型如下表所示。实现队列基本操作的函数原型函数原型说明voidInitQueue(Queue*Q)初始化队列boolIsEmpty(QueueQ)判断队列是否为空,若是则返回TRUE,否则返回FALSEvoidEnQueue(Queue*Q,TreeNodep)元素入队列voidDeQueue(Oueue*Q,TreeNode*p)元素出队列Bool、Status类型定义如下:typedefenum{FALSE=0,TRUE=1}Bool;typedefenum{OVERFLOW=-2,UNDERFLOW=-1,ERROR=0,OK=1}Status;树的二叉链表节点定义如下:typedefstructNode{chardata;structNode*firstchild,*nextbrother;}Node,*TreeNode;函数LevelTraverse的代码如下:StatUSLevelTraverse(TreeNoderoot){/*层序遍历树,树采用孩子-兄弟表示法,root是树根节点的指针*/QueuetempQ;TreeNodeptr,brotherptr;if(!root)returnERROR;InitQueue(______;brotherptr=root→nextbrother;while(brotherptr){EnQueue(______;}/*end-while*/while______{______;printf("%c\t",ptr→data);if(______)continue;______;brotherptr=ptr→firstchild→nextbrother;while(brotherptr){EnQueue(______;}/*end-while*/}/*end-while*/returnOK;}/*LevelTraverse*/
问答题阅读以下说明和图,回答问题1和问题2,将答案写在答卷的对应栏内。
【说明】
银行客户需要从ATM取100元,他向ATM的读卡机插卡,读卡机读取卡号,然后ATM屏幕初始化,ATM提示输入PIN(密码),客户输入PIN(123456),ATM打开他的账户,密码有效,因此ATM提示选择事务,客户选择取钱,ATM提示输入金额,客户输入100元,
ATM验证账户上有足够的钱,就从账上减去100元,ATM吐出100元,并退出客户的卡。
问答题[问题1]
数据流图8-5缺少了一条数据流,请给出此数据流的起点和终点,并采用说明中的词汇给出此数据流名。
问答题选出正确的关系代数表达式。
问答题{{B}}阅读下列说明及图13-8和图13-9,回答问题,将解答填入对应栏内。{{/B}}
【说明】 某电话公司决定开发一个管理所有客户信息的交互式网络系统。系统功能如下。
(1)浏览客户信息:任何使用Internet的网络用户都可以浏览电话公司所有的客户信息(包括姓名、住址、电话号码等)。
(2)登录:电话公司授予每个客户一个帐号。拥有授权帐号的客户,可以使用系统提供的页面设置个人密码,并使用该帐号和密码向系统注册。
(3)修改个人信息:客户向系统注册后,可以发送电子邮件或者使用系统提供的页面,对个人信息进行修改。(4)删除客户信息:只有公司的管理人员才能删除不再接受公司服务的客户的信息。系统采用面向对象方法进行开发,在开发过程中认定出的类见表13-3。
{{B}}表13-3开发过程中认定的类{{/B}}
编号
类名
描述
1
InternetClient
网络用户
2
CustomerList
客户信息表,记录公司所有客户的信息
3
Customer
客户信息,记录单个客户的信息
4
CompantCustomer
公司客户
5
InternalClient
公司的管理人员