问答题【程序说明】 该程序定义了两个子函数strsort和strmerge。它们分别实现了将一个字符串按字母顺序排序和将两个字符串合并排序,并删去相同字符。在主函数里,先输入两个字符串s1和s2,然后调用strsort函数对它们分别排序,然后调用strmerge函数将s1和s2合并,将合并后的字符串赋给字符串s3,最后输出字符串s3。 【程序】 #include<stdio.h> void strmerge(char,a,char *b,char *c) //将字符串a,b合并到字符串c中 char t,*w; w=c; while( (1) ) //找到字符串a,b当前字符中较小的字符 if(*a< *b) t= *a; (2) ; else if (*a>*b) t= *b; (3) ; else //字符串a,b当前字符相等 t= *a; a++; b++; if( (4) ) //开始,可直接赋值 *w=t; else if(t!=*w) //如果a,b中较小的当前字符与c中当前字符不相等,才赋值 (5) ; if(*a!=/'/0') //如果字符串a还没有结束,则将a的剩余部分赋给C while(*a!='/0') if(*a!=*w) *(++w)=*a; a++; else (6) ; if(*6!='/0') //如果字符串b还没有结束,则将b的剩余部分赋给c while(*b!='/0') if(*b! = *w) *(++w)=*b; b++; else b++; (7) ; void strsort(char*s) //将字符串S中的字符排序 int i,j,n; char t,*w; W=S; for(n=0;*w!='/0';n++) //得到字符串长度n w++; for(i=0;i<n-1;i++) //对字符串s进行排序,按字母先后顺序 for(j=i+1;j<n;j++) if( (8) ) t=s[i]; s[i]=s[j]; (9) ; void main() char s1[100],s2[100],s3[100]; printf("/nPlease,input the first string:"); scanf("%s",s1); printf("/nPlease input the second string:"); scanf("%s",s2); strsort(s1); //将字符串s1排序 strsort(s2); //将字符串s2排序 printf("%s/n",s1); printf("%s/n",s2); s3[0]='/0'; //字符串s3的第一个字符先置'/0'结束标志 (10) //将s1和s2合并,按照字母顺序排列, //且要删去相同字符,存入s3中 printf("%s",s3);
问答题【说明】某医院收费系统的主要功能是收取病人门诊的各项费用。系统的收费功能分为3个方面:病历收费、挂号收费和根据处方单内容收取检查或药物费用。1.病人初次来该医院看病,首先购买病历,记录病人基本情况。2.病人看病前要挂号。根据病人的病历和门诊部门(内科、外科等),系统提供相应的挂号单和处方单,并收取费用。3.病人根据处方单进行进一步检查或取药前需交纳各项费用。系统首先根据病人基本情况检查处方单中病历号是否正确,记录合格的处方单,并提供收据。4.所有收费都必须依据定价表中的定价来计算,且所有收费都必须写入收费记录中。医院收费系统的顶层图如图2所示;医院收费系统的第0层DFD图如图3所示。其中,加工1的细化图如图4所示,加工2的细化图如图5所示。假定顶层图是正确的,“定价表”文件已由其他系统生成。【数据流图】
问答题【说明】某公司的用品采购流程如下所述。(1)由营业部门提出需求用品清单。(2)将需求用品清单交采购部门建立采购采买单据。(3)采购部门建立采购采买单据后,交财务部门,向财务部申请款项,预支定金。(4)财务部建立应付帐款单据后,核支款项。(5)采购部门再收到款项后,进行采买。(6)采买完成,执行:①发票核剩余款项交财务部,即由财务部门处理。②用品点交营业部门发放,即由营业部门处理。(7)进行财务结算处理,执行:①采购部门:采购单据结案。②财务部门:帐款冲销结案。【问题】完成下面的UML活动图对象流分析,1~11为活动,设计此采购活动的流程。
问答题【说明】某学校的教学系统描述如下。学生信息包括:学号(Sno)、姓名(Sname)、性别(Ssex)、年龄(Sage)、入学年份(Syear)、主修专业(Smajor),其中学号是入学时唯一编定的。教师信息包括:教工号(Tno)、姓名(Tname)、性别(Tsex)、年龄(Tage)、职称(Ttitle),其中教工号是唯一编定的。课程信息包括:课程号(Cno)、课程名称(Cname)、学时(Cperiod)、学分(Ccredit),其中课程号是唯一编定的。每个专业每个年级只有一个班级,这样班级就可用入学年份标识。每位教师只教授特定的一门的课程,每门课程可以有多个教师教授,各位老师的上课地点及上课时间有所不同。注意:一门课程至少有一位教师教授,否则这门课程就视为不存在。每位学生可以同时选修多门不同的课程,一门课程至少要有10位学生选修,否则就取消这门课程的开设。注意:选修课程时要指定任课教师,不能重复选修同一门课程。课程结束后,任课教师给选修该课程的学生一个成绩(Grade)。注意:教师不能给没有选修他所教授课程的学生成绩,即使选修了其他教师教授的同一门课也不行。如图9-11所示是经分析得到的E-R图。1.【问题1】根据题意,给出联系的属性。实体间的联系有“一对一”、“一对多”和“多对多”,指出各联系分别属于哪一种。
问答题【说明】某网络故障诊断系统,使用故障代理(aZent、Sm4PTrap等)来检测各种意外情况,如大幅丢包、路由冲突、广播风暴等。网络管理员可以在安装该系统时配置安全监控程序(如故障代理程序、实时诊断程序、报警器等),也可以在系统运行时修改配置,通过网络状态采集器和故障特征数据库,并通过控制面板上的键盘与系统进行信息交互。在安装过程中,系统给每个故障代理赋予一个编号(即id)和类型,并设置管理员密码以启动和关闭系统,设置故障代理事件发生时应自动拨出的电话号码。当系统检测到一个故障代理事件时,就激活警报,拨出预置的电话号码,并报告关于位置和检测到的事件的性质等信息。【数据流图】
问答题请认真阅读以下关于某传输系统的技术说明、状态转换图及C++代码,根据要求回答问题1~问题2。[说明]传输门是传输系统中的重要装置。传输门具有Open(打开)、Closed(关闭)、Opening(正在打开)、StayOpen(保持打开)和Closing(正在关闭)5种状态。触发状态的转换事件有click、complete和timeout3种。事件与其相应的状态转换如图7-15所示。下面的[C++代码1]与[C++代码2]分别用两种不同的设计思路对传输门进行状态模拟,请填补代码段中的空缺语句。[C++代码1]
问答题[预备知识]①对给定的字符集合及相应的权值,采用哈夫曼算法构造最优二叉树,并用结构数组存储最优二叉树。例如,给定字符集合a,b,c,d及其权值2、7、4、5,可构造如图3所示的最优二叉树和相应的结构数组Ht(数组元素Ht[0]不用)(见表5)。结构数组HT的类型定义如下:#defineMAXLEAFNUM20structnodecharch;/*当前结点表示的字符,对于非叶子结点,此域不用*/intweight;/*当前结点的权值*/intparent;/*当前结点的父结点的下标,为0时表示无父结点*/intIchild,rchild/*当前结点的左、右孩子结点的下标,为0时表示无对应的孩子结点*/Ht[2*MAXLEAFNUM];②用'0'或'1'标识最优二叉树中分支的规则是:从一个结点进入其左(右)孩子结点,就用'0'('1')标识该分支(示例如图3所示)。③若用上述规则标识最优二叉树的每条分支后,从根结点开始到叶子结点为止,按经过分支的次序,将相应标识依次排列,可得到由'0'、'1'组成的一个序列,称此序列为该叶子结点的前缀编码。如图3所示的叶子结点a、b、c、d的前缀编码分别是110、0、111、10。【函数5.1说明】函数voidLeafCode(introot,intn)的功能是:采用非递归方法,遍历最优二叉树的全部叶子结点,为所有的叶子结点构造前缀编码。其中形参root为最优二叉树的根结点下标;形参n为叶子结点个数。在构造过程中,将Ht[p].weight域用作被遍历结点的遍历状态标志。【函数5.1】char**Hc;voidLeafCode(introot,intn)/*为最优二叉树中的n个叶子结点构造前缀编码,root是树的根结点下标*/inti,p=root,cdlen=0;charcode[20];Hc=(char**)malloc(.(n+])*sizeof(char*));/*申请字符指针数组*/for(i=1;i<=p;++i)Ht[i].weight=0;/*遍历最优二叉树时用作被遍历结点的状态标志*/while(p)/*以非递归方法遍历最优二叉树,求树中每个叶子结点的编码*/if(Ht[p],weight==0)/*向左*/Ht[p].weight=1if(Ht[p],lchild!=0)p=Ht[P].lchild;code[cdlen++]='0';]elseif(Ht[p].rchild==0)/*若是叶子结点,则保存其前缀编码*/Hc[p]=(char*)malloc((cdlen+1)*sizeof(char));(1);strcpy(He[p],code);elseif(Ht[pi,weight==1)/*向右*/Ht[p].weight=2;if(Ht[p].rchild!=0)p=Ht[p].rchild;code[cdlen++]='1';else/*Ht[p].weight==2,回退*/Ht[p].weight=0;p=(2);(3);/*退回父结点*//*while结束*/【函数5.2说明】函数voidDecode(char*buff,introot)的功能是:将前缀编码序列翻译成叶子结点的字符序列并输出。其中形参root为最优二叉树的根结点下标;形参buff指向前缀编码序列。【函数5.2】voidDecode(char*buff,introot)Iintpre=root,p;while(*buff!='/0')p=root;while(p!=0)/*存在下标为p的结点*/pre=p;if((4))p=Ht[p].lchild;/*进入左子树*/elsep=Ht[p].rchild;/*进入右子树*./buff++;/*指向前缀编码序列的下一个字符*/(5);printf("%c",Ht[pre].ch);
问答题
问答题[说明] 银行的自动柜员机(ATM)的功能描述如下: (1)金融卡与信用卡识别:包含伪卡识别以及密码验证; (2)主菜单项:这是一台ATM最主要的人机界面,提供各项功能给客户,具体有:提款、转帐、更改密码以及存款; (3)结束操作:客户执行完“菜单项”的功能后,可以选择“打印单据”或“不打印单据”,选好后就结束此次交易。 注意,ATM除了能处理本行的银行卡外,其他银行的银行卡也应该能处理,通过“金融中心”与其他银行主机进行数据交换。另外,为了方便,ATM还提供快捷提款,并提供代交费功能(代交费是以转帐的方式处理的)。 该系统采用面向对象方法开发,系统中的类以及类之间的关系用UML类图表示。
问答题从下列的3道试题(试题五至试题七)中任选1道解答,如果解答的试题数超过1道,则题号小的1道解答有效。试题五(15分)阅读以下说明和C++代码,将应填入(n)处的字句写在答题纸的对应栏内。[说明]某绘图系统存在Point、Line、Square三种图元,它们具有Shape接口,图元的类图关系如图5-1所示。现要将Circle图元加入此绘图系统以实现功能扩充。已知某第三方库已经提供了XCircle类,且完全满足系统新增的Circle图元所需的功能,但XCircle不是由Shape派生而来,它提供的接口不能被系统直接使用。代码5-1既使用了XCircle又遵循了Shape规定的接口,既避免了从头开发一个新的Circle类,又可以不修改绘图系统中已经定义的接口。代码5-2根据用户指定的参数生成特定的图元实例,并对之进行显示操作。绘图系统定义的接口与XCircle提供的显示接口及其功能如下表所示:[图5-1]
问答题[说明]图书馆藏书管理系统,完成用户信息管理,借阅归还信息管理,馆藏书目的信息管理,违规处罚管理和各种查询等功能。系统的用户可分为超级用户和普通用户两类,超级用户负责系统维护,包括对藏书信息,用户信息,借阅和归还信息,违规处罚信息的录入,修改,查询,删除等。普通用户即借阅者则只是具有查询书目信息,查询本人的借阅情况,违规处罚信息和预定书目的权限。用户通过身份验证后进入主界面。主界面为超级用户提供6项选择:图书信息管理,用户信息管理,图书的借阅和归还信息管理,违规处罚信息管理,口令修改。普通用户有4项功能选择:书目查询,借阅归还信息,违规处罚信息,口令修改。图书信息管理:超级用户可以增加,修改,删除图书信息,也可以查看书目信息。用户信息管理:超级用户可以增加,修改,删除用户信息,也可以查找用户信息。借阅归还信息:超级用户可以加入,修改,删除借阅纪录,查看某本书的借阅情况,查询指定的书目借阅和归还信息。违规处罚管理:超级用户可以给普通用户增加,修改,删除违规处罚信息,普通用户如果逾期不还图书,系统将暂时终止普通用户的借阅权利,直到用户接受违规处罚后,方可以恢复正常的借阅权利。口令修改:用户需要输入原口令,并且两次输入新口令一致后,系统即用新口令代替旧口令。图书馆藏书借阅系统信息流如图10-5所示,图书馆藏书管理系统的E-R模型图如图10-6所示。
问答题[说明]一个印制电路板的布线区域可分成n×m个方格,如图1(a)所示,现在需要确定电路板中给定的两个方格的中心点之间的最短布线方案。电路只能沿水平或垂直方向布线,如图1(b)中虚线所示。为了避免线路相交,应将已布过线的方格作成封锁标记,其他线路不允许穿过被封锁的方格。设给定印制电路板的起始方格x与目的方格y尚未布线,求这两个方格间最短布线方案的基本思路是:从起始方格x开始,先考查距离起始方格距离为k的某一个可达方格就是目标方格y时为止,或者由于不存在从x到y的布线方案而终止。布线区域中的每一个方格与其相邻的上、下、左、右4个方格之间的距离为1,依次沿下、右、上、左这4个方向考查,并用一个队列记录可达方格的位置。下表给出了沿这4个方向前进1步时相对于当前方格的相对偏移量。沿4个方向前进1步时相对于当前方格的相对偏移量搜索顺序i方向行偏移量列偏移量0上-101右012上-103左0-1例如,设印制电路板的布线区域可划分为一个6×8的方格阵列,如图2(a)所示,其中阴影表示已封锁方格。从起始方格x(位置[3,2],标记为0)出发,按照下、右、上、左的方向依次考查,所标记的可达方格如图2(a)所示,目标方格为y(位置[4,7],标记为10),相应的最短布线路径如图2(b)中虚线所示。图3和图4所示的流程图即利用上述思路在电路板方格阵列中进行标记,图中使用的主要符号如下表所示。在图3中,设置电路板初始格局,即将可布线方格置为数值-1、已布线方格(即封锁方格)置为-9。设置方格阵列“围墙”的目的是省略方格位置的边界条件判定,方法是在四周附加格,并将其标记为-9(与封锁标记相同)。图中使用的主要符号符号含义Grid全局二维数组Grid[N+2,M+2]表示电路板方格阵列,初始时数组元素Grid[ij]的值为-1时,表示当前方格可布线;为-9时,表示当前方格不可布线Offset一维数组offset[4]:offset[i](0≤i≤3)的分量为r(行偏移量)和c(列偏移量),按照上表的内容设置其值Startpos、Endpos、Curpos、T分别表示起始方格、目标方格、当前方格和临时方格,其位置用分量度row和col确定Q.insert(s)将方格s的位置信息加入队列Q.delete()删除非空队列的队头元素,并返回该元素Q.empty()若队列Q为空,则返回true;否则返回false供选择的答案:[a]Found≠true[b]Found=true[c]T=EndPos[d]Q.insert(T)[e]T←Q.delete()[f]CurPos=EndPos[g]i≥4[h]CurPos←Q.delete()[i]Grid[T.row,T.col]=-1[j]Grid[T.row,T.col]≠-1
问答题【说明】 类Queue表示队列,类中的方法如下表所示。
isEmpty()
判断队列是否为空。如果队列不为空,返回true;否则,返回false
enqueue(Object newNode)
入队操作
dequeue()
出队操作。如果队列为空,则抛出异常 类Node表示队列中的元素;类EmptyQueueException给出了队列操作中的异常处理操作。 public class TestMain { //主类 public static viod main (String args[]){ Queue q=new Queue(); q.enqueue("first!"); q.enqueue("second!"); q.enqueue("third!"); {{U}} (1) {{/U}}{ while(true) System.out.println(q.dequeue()); } catch({{U}} (2) {{/U}}){ } } public class Queue { //队列 Node m_FirstNode; public Queue(){m_FirstNode=null;} public boolean isEmpty(){ if(m_FirstNode==null)return true; else return false; } public viod enqueue(Object newNode) { //入队操作 Node next=m_FirstNode; if(next==null)m_FirstNode=new Node(newNode); else{ while(next.getNext()!=null)next=next.getNext(); next.setNext(new node(newNode)); } } public Object dequeue(){{U}} (3) {{/U}}{ //出队操作 Object node; if (isEempty()) {{U}} (4) {{/U}}; //队列为空, 抛出异常 else{ node=m_FirstNode.getObject(); m_FirstNode=m_FirstNode.getNext(); return node; } } } public class Node{ //队列中的元素 Object m_Data; Node m_Next; public Node(Object data) {m_Data=data; m_Next=null;} public Node(Object data, Node next) {m_Data=data; m_Next=-next;} public void setObject(Object data) {m_Data=data;} public Object getObject(Object data) {return m_data;} public void setNext(Node next) {m_Next=next;} public Node getNext() {return m_Next;} } public class EmptyQueueException extends{{U}} (5) {{/U}}{ //异常处理类 public EmptyQueueException() { System.out.println("队列已空! "); }}
问答题[说明]以下VisualBasic代码实现了系统登录时对用户进行合法性检查。界面如图9-6所示。阅读下面代码,将{{U}}(n){{/U}}处代码补充完整。[代码7-1]BeginVB.Formform1BackColor=&H00808080&Caption="系统登录"//...窗体描述(略)BeginVB.Labe1Labe12Backstyle=0'TransparentCaption="密码:"//…窗体描述(略)EndBeginVB.Labe1Labe11Backstyle=0'TransparentCaption="操作员:"//...窗体描述(略)End//...窗体描述(略)End[代码7-2]DimTIMAsIntegerDimmydbAsDatabaseDimmyrsAsRecordsetDimsq1AsStringPrivateSubFormACdvate()Setmydb=Workspaces(0).OpenDatabase(App.Path&"/CIUID.mdb")'打开数据库sq1="select操作员fromqxsz"Setmyrs=mydb.OpenRecordset(sq1)If{{U}}(1){{/U}}Thenmyrs.MoveLastIf{{U}}(2){{/U}}Thenmyrs.MoveFirstFori=0TOmyrs.RecordCount-1{{U}}(3){{/U}}{{U}}(4){{/U}}NextiIf{{U}}(5){{/U}}Thenmaster.Listlndex=0myrs.Closemydb.Closemaster.SetFocusEndSub[代码7-3]PrivateSubCmdok_Click()'确认操作员和密码DimMESSAGEAsStringIfmaster.Text<>'''ThenSetmydb=Workspaces(0).OpenDatabase(App.Path&"/CIUID.mdb")Setmyrs=mydb.OpenRecordset("qxsz",dbOpenDynaset)myrs.Findfirst"操作员="+Chr(34)+master.Text+Chr(34)+""'查找操作员If{{U}}(6){{/U}}ThenMsgBox("无此操作员!")ElseIfpassword.Text=myrs.Fields("密码")Then'确认密码MsgBox"系统登录成功!"'系统登录成功ElseIfTIM=3ThenMESSAGE=MsgBox("密码输入错误,请向系统管理员查询!",0,"")IfMESSAGE=vbOKThenEndEndIfMsgBox("密码错误,请重新输入密码!")TIM=TIM+1'密码输入错误次数password.SetFocusEndIfEndIfEndIfEndSub
问答题[问题3](2分)
两个长度分别为n1和n2的已排好序的子数组进行归并,根据上述C代码,则元素之间比较次数为____(9)____。
问答题【说明】某医院收费系统的主要功能是收取病人门诊的各项费用。系统的收费功能分为3个方面:病历收费、挂号收费和根据处方单内容收取检查或药物费用。1.病人初次来该医院看病,首先购买病历,记录病人基本情况。2.病人看病前要挂号。根据病人的病历和门诊部门(内科、外科等),系统提供相应的挂号单和处方单,并收取费用。3.病人根据处方单进行进一步检查或取药前需交纳各项费用。系统首先根据病人基本情况检查处方单中病历号是否正确,记录合格的处方单,并提供收据。4.所有收费都必须依据定价表中的定价来计算,且所有收费都必须写入收费记录中。医院收费系统的顶层图如图3—2所示;医院收费系统的第0层D四图如图3—3所示。其中,加工1的细化图如图3—4所示,加工2的细化图如图3-5所示。假定顶层图是正确的,“定价表”文件已由其他系统生成。【数据流图】
问答题【问题3】 说明输入串(a,a)#是否为G的句子。
问答题请认真阅读以下关于电子政务信息整合的叙述,根据要求回答问题1~问题4。
[说明]
公共服务、社会监督和宏观调控是我国政府的3个主要职能。实施电子政务建设,可以改善政府的公共服务质量,提高社会监管的效率和准确性,加强宏观经济调控的科学性。
某城市企业开业登记并正常经营的流程如下。
申请者先到工商行政管理局(简称工商局)取得营业执照,为此需要填写表4-13;然后到地税局或国税局办理税务登记,获得营业发票,为此需要填写表4-14;表4-14中的组织机构代码信息需要到负责法人(包括企业、事业、机关、社团等)登记的质量技术监督。局(简称质监局)获取,为此需要填写表
4-15;最后,还要到银行办理经营账户开户手续。
{{B}}表4-13 某营业执照申请表{{/B}}
企业名称
住所(或经营场所)
联系电话
邮政编码
法定代表人(负责人、投资人、执行合伙企业事务的合伙人)
注册资本(万元)
经营范围
营业期限
副本数(份)
从业人员
其中,本市人数: 外地人数: 安置下岗失业人数:
企业登记注册号
(该信息由工商局核定)
{{B}}表4-14 某业务发票申请表{{/B}}
纳税人名称
邮政编码
组织机构代码
网站网址
注册地
经营范围
经营地
注册资本
单位电话
法人代表(负责人)
{{B}}表4-15 某企业法人登记申请表{{/B}}
单位名称
单位电话
经营范围
经济行业
单位地址
经济类型
邮政编码
投资国别
行政区划
登记注册号
法人代表
拨款形式
身份证号
职工人数
注册资金
有效期
组织机构代码
(该信息由质量技术监督局核定)
[注]
以上叙述(包括表格内容)为考试而设计,与现实情况不一定完全吻合。
上述单位中的政府部门,都投入了大量资金实施电子政务项目,各自针对表4-13、表4-14和表4-15等信息项目建设了管理信息系统。在企业开业运营后,如要变更相关信息,需要分别到工商局、税务局和质监局办理,因此,在工商管理信息系统中还包括了企业变更信息、注销登记(或吊销登记)信息、企业年检信息等;在税务管理信息系统中还包括企业注销税务登记信息等。
政府对企业监管的重要内容是有效减少漏管户,防止偷逃税;同时政府在企业登记注册、年检、纳税等环节应向企业提供优质服务。
假设该市已经完成了电子政务专网(外网)建设(ATM光纤骨干)和网络应用规划。目前,工商局、质监局、地(国)税局欲在此网络平台上建立自己的电子政务系统。
问答题{{B}}阅读以下说明及图,回答问题。{{/B}}【说明】Web页面与数据库的连接是Web数据库的基本要求。目前基于Web数据库的连接方案主要有服务器端方案和客户端方案两种类型。服务器端方案的实现技术有ASP等,客户端方案的实现技术有JDBC、DHTML等。其中,ASP是微软开发的脚本语言技术,嵌入在IIS中,因此,ASP成为大部分用户的首选脚本语言。图13-10给出了ASP的工作原理。
问答题【说明】 快速排序是一种典型的分治算法。采用快速排序对数组A[p..r]排序的3个步骤如下。 1.分解:选择一个枢轴(pivot)元素划分数组。将数组A[p..r]划分为两个子数组 (可能为空)A[p..q-1]和A[q+1..r],使得A[q]大于等于A[p..q-1)中的每个元素,小于 A[q+1..r]中的每个元素。q的值在划分过程中计算。 2.递归求解:通过递归的调用快速排序,对子数组A[p..q-1]和A[q+1..r]分别排序。 3.合并:快速排序在原地排序,故不需合并操作。
