计算机类
公务员类
工程类
语言类
金融会计类
计算机类
医学类
研究生类
专业技术资格
职业技能资格
学历类
党建思政类
计算机软件水平考试
全国计算机应用水平考试(NIT)
计算机软件水平考试
计算机等级考试(NCRE)
全国高校计算机等级考试CCT
行业认证
信息素养
软件设计师(中级)
信息系统项目管理师(高级)
系统分析师(高级)
系统架构设计师(高级)
网络规划设计师(高级)
系统规划与管理师(高级)
软件评测师(中级)
软件设计师(中级)
网络工程师(中级)
多媒体应用设计师(中级)
嵌入式系统设计师(中级)
电子商务设计师(中级)
系统集成项目管理工程师(中级)
信息系统监理师(中级)
信息安全工程师(中级)
数据库系统工程师(中级)
信息系统管理工程师(中级)
软件过程能力评估师(中级)
计算机辅助设计师(中级)
计算机硬件工程师(中级)
信息技术支持工程师(中级)
程序员(初级)
网络管理员(初级)
信息处理技术员(初级)
电子商务技术员(初级)
信息系统运行管理员(初级)
网页制作员(初级)
多媒体应用制作技术员(初级)
PMP项目管理员资格认证
软件设计应用技术
软件设计基础知识
软件设计应用技术
问答题阅读以下说明和图,回答问题1至问题4,将解答填入对应栏内。【说明】某音像制品出租商店欲开发一个音像管理信息系统,管理音像制品的租借业务。需求如下:1.系统中的客户信息文件保存了该商店的所有客户的用户名、密码等信息。对于首次来租借的客户,系统会为其生成用户名和初始密码。2.系统中音像制品信息文件记录了商店中所有音像制品的详细信息及其库存数量。3.根据客户所租借的音像制品的品种,会按天收取相应的费用。音像制品的最长租借周期为1周,每位客户每次最多只能租借6件音像制品。4.客户租借某种音像制品的具体流程如下。(1)根据客户提供的用户名和密码,验证客户身份。(2)若该客户是合法客户,查询音像制品信息文件,查看商店中是否还有这种音像制品。(3)若还有该音像制品,且客户所要租借的音像制品数小于等于6个,就可以将该音像制品租借给客户。这时,系统给出相应的租借确认信息,生成一条新的租借记录并将其保存在租借记录文件中。(4)系统计算租借费用,将费用信息保存在租借记录文件中并告知客户。(5)客户付清租借费用之后,系统接收客户付款信息,将音像制品租借给该客户。5.当库存中某音像制品数量不能满足客户的租借请求数量时,系统可以接受客户网上预约租借某种音像制品。系统接收到预约请求后,检查库存信息,验证用户身份,创建相应的预约记录,生成预约流水号给该客户,并将信息保存在预约记录文件中。6.客户归还到期的音像制品,系统修改租借记录文件,并查询预约记录文件和客户信息文件,判定是否有客户预约了这些音像制品。若有,则生成预约提示信息,通知系统履行预约服务,系统查询客户信息文件和预约记录文件,通知相关客户前来租借音像制品。
进入题库练习
问答题[问题2] 收费部门业务活动数据库的部分关系模式设计如下,请根据说明补充完整,并给出其主键。 A.员工({{U}} (1) {{/U}}、姓名、{{U}} (2) {{/U}}、{{U}} (3) {{/U}}) B.队别(队别标志号、队名、{{U}} (1) {{/U}}、{{U}} (2) {{/U}})
进入题库练习
问答题问题:2.3 (5分) 现在系统要增加赞助商信息,赞助商信息主要包括赞助商名称和赞助商编号。 赞助商可以赞助某支球队,一支球队只能有一个赞助商,但赞助商可以赞助多支球队。赞助商也可以单独赞助某些球员,一名球员可以为多个赞助商代言。请根据该要求,对图2-1进行修改,画出修改后的实体间联系和联系的类型。
进入题库练习
问答题阅读下列函数说明和C代码,回答下面问题。 [说明] 冒泡排序算法的基本思想是:对于无序序列(假设扫描方向为从前向后,进行升序排列),两两比较相邻数据,若反序则交换,直到没有反序为止。一般情况下,整个冒泡排序需要进行众(1≤k≤n)趟冒泡操作,冒泡排序的结束条件是在某一趟排序过程中没有进行数据交换。若数据初态为正序时,只需1趟扫描,而数据初态为反序时,需进行n-1趟扫描。在冒泡排序中,一趟扫描有可能无数据交换,也有可能有一次或多次数据交换,在传统的冒泡排序算法及近年的一些改进的算法中[2,3],只记录一趟扫描有无数据交换的信息,对数据交换发生的位置信息则不予处理。为了充分利用这一信息,可以在一趟全局扫描中,对每一反序数据对进行局部冒泡排序处理,称之为局部冒泡排序。 局部冒泡排序的基本思想是:对于N个待排序数据组成的序列,在一趟从前向后扫描待排数据序列时,两两比较相邻数据,若反序则对后一个数据作一趟前向的局部冒泡排序,即用冒泡的排序方法把反序对的后一个数据向前排到适合的位置。扫描第—对数据对,若反序,对第2个数据向前冒泡,使前两个数据成为,有序序列;扫描第二对数据对,若反序,对第3个数据向前冒泡,使得前3个数据变成有序序列;……;扫描第i对数据对时,其前i个数据已成有序序列,若第i对数据对反序,则对第i+1个数据向前冒泡,使前i+1个数据成有序序列;……;依次类推,直至处理完第n-1对数据对。当扫描完第n-1对数据对后,N个待排序数据已成了有序序列,此时排序算法结束。该算法只对待排序列作局部的冒泡处理,局部冒泡算法的名称由此得来。 以下为C语言设计的实现局部冒泡排序策略的算法,根据说明及算法代码回答问题1和问题2。 [变量说明] #define N=100 //排序的数据量 typedef struct{ //排序结点 int key; info datatype; ...... }node; node SortData[N]; //待排序的数据组 node类型为待排序的记录(或称结点)。数组SortData[]为待排序记录的全体称为一个文件。key是作为排序依据的字段,称为排序码。datatype是与具体问题有关的数据类型。下面是用C语言实现的排序函数,参数R[]为待排序数组,n是待排序数组的维数,Finish为完成标志。 [算法代码] void Part-BubbleSort (node R[], int n) { int=0 ; //定义向前局部冒泡排序的循环变量 //暂时结点,存放交换数据 node tempnode; for (int i=0;i<n-1;i++) ; if (R[i].key>R[i+1].key) { {{U}} (1) {{/U}} while ({{U}} (2) {{/U}}) { tempnode=R[j] ; {{U}} (3) {{/U}} R[j-1]=tempnode ; Finish=false ; {{U}} (4) {{/U}} } // end while } // end if } // end for} // end function
进入题库练习
问答题阅读以下UML类图及其说明,根据要求回答问题1~问题4。[说明]某客户信息管理系统中保存着两类客户的信息:①个人客户。对于这类客户,系统保存了其客户标识(由系统生成)和基本信息(包括姓名、住宅电话和E-mail)。②集团客户。集团客户可以创建和管理自己的若干名联系人。对于这类客户,系统除了保存其客户标识(由系统生成)之外,也保存了其联系人的信息。联系人的信息包括姓名、住宅电话、E-mail、办公电话以及职位。该系统除了可以保存客户信息之外,还具有以下功能:①向系统中添加客户(addCustomer);②根据给定的客户标识在系统中查找该客户(getCustomer);③根据给定的客户标识从系统中删除该客户(removeCustomer);④创建新的联系人(addContact);⑤在系统中查找指定的联系人(getContact);⑥从系统中删除指定的联系人(removeContact)。该系统采用面向对象方法进行开发。在面向对象分析阶段,根据上述描述,得到如表5-20所示的类。{{B}}表5-20客户信息管理系统类表{{/B}}{{B}}类名{{/B}}{{B}}说明{{/B}}CustomerlnformationSystem客户信息管理系统IndividualCustomer个人客户InstitutionalCustomer集团客户Contact联系人描述该客户信息管理系统的UML类图如图5-12所示。
进入题库练习
问答题【说明】公司IT部门决定开发一个计算机管理系统以记录期刊的传阅情况。期刊在公司内部传阅,员工可以要求加入传阅队列。图书室登记公司收到的期刊,交给名单中的第一名员工。员工应在3个工作日内完成阅读,员工阅读完毕后通知系统,系统提醒下一位阅读者取书,下一个员工必须确认已收到期刊。当传阅名单中“下一位”员工出差在外时将无法进行传阅,此时将期刊传给再下一位,而将该员工做标记,再次传递此书时优先考虑该员工。最后一位员工阅读完毕后,将期刊交还图书室以便共用。系统能在员工忘记传递期刊时发出提醒信息。系统详细记录期刊传阅情况,当员工阅读完后通知系统,系统记录该员工的员工号及日期,并在备注栏注明是传出;同样,当员工收到期刊后给系统收书确认,系统记录该员工的员工号及日期,并在备注栏注明是收到。公司的员工都有一个唯一的员工号。公司订阅了多种期刊,为每一本期刊(有唯一期刊流水号)产生一份传阅名单,并详细记录传阅情况。员工的出差情况存储在系统主机中。该系统采用面向对象方法开发,系统中的类及类之间的关系用UML类图表示,图9-4是该系统的类图的一部分,图9-5描述了成功传递期刊的序列图。
进入题库练习
问答题阅读下列说明和图,回答问题1至问题3。【说明】C市刚开通了地铁线,为方便乘客,计划开发自动售票系统。该公司在每一个地铁站放置了多台自动售票机,每一台售票机有一唯一编号,售票记录统一汇总主机。自动售票机只发售从该站起始的各种地铁票,因此乘客只需输入目的站,起始站默认为该站,售票机给出从该站到达目的站的单程票。打印地铁票时为其编一个唯一的流水号,并同时打印自动售票机的编号及票价。售票机的状态变化如下:“空闲”时,显示地铁线路图,等待乘客输入目的站;当乘客输入目的站后,转入“目的站确认/票数输入”状态,同时给出票价,此时若目的站有误,可返回到空闲状态重新输入,否则,输入票数;乘客输入票数后,转入“票数确认/付款”状态,同样此时若票数有误,可返回到上一状态重新输入,否则,投入钱币付款;当付款金额足够时,“出票/找零”(有必要时进行找零);然后转入“空闲”等待输入目的站状态。该系统采用面向对象方法开发,系统中的类及类之间的关系用UML类图表示,如图9-18所示是该系统类图的一部分,图9-19描述了自动售票机的状态转换图。
进入题库练习
问答题【说明】下面是某租车信息管理系统的介绍:该车库中备有若干车辆,每辆车有车号、车牌、车名、价格等属性。车库不定期地购买并注册新车供用户借用,也可将报废的旧车注销以停止租用。车库可为众多用户提供服务。每个用户在借车之前需注册姓名、地址等内容。每个用户最多可同时借3辆车。每辆车借期7天;若有一辆车超期,则不可再借其他车。一辆车超期一天罚款250元。若一辆车超期3周不归还,则发布通告。若用户借的车丢失,在罚款处理之前不能借车,每辆报失的车罚款该车目前市价(包括折旧)的1.2倍。注册新用户不受限制;而注销用户之前,该用户必须归还所有借的车,或者报失并接受罚款。【状态图1】1.【问题1】分析车辆的状态和事件,指出图1中的(1)、(2)、(3)、(4)分别是什么?
进入题库练习
问答题阅读下列说明和图,回答问题1至问题3。【说明】某大型旅店为了便于管理,欲开发一个客房管理系统。希望实现客房预订、入住登记、账务结算、退房,以及将服务项目记入客人账单。旅客包括散客和团体,散客预订或入住时需要提供姓名、性别、身份证和联系电话,团体则提供团体名称、负责人的姓名、性别、身份证和联系电话,以及团体人数。对于散客,还要提供换房。旅店还提供了很多服务项目,比如早餐。对每一个入住客人,服务列表记录了住宿期间的各项服务,包括服务类型、日期、数量等。当然,客人也可以不要任何服务。旅店的客房有一个唯一的房间号,分为不同的类别,不同的房间床位数和价格不同。为了有效的管理,需要记录每天的客房状态。客房的状态有:空闲、占用、已预订和维修。·客人入住后,客房处于占用状态。·客人退房后,客房处于空闲状态。·客人预订后,客房处于已预订状态。·预订客人入住后,客房处于占用状态。·预订客人取消预订后客房处于空闲状态。·需要维修时客房处于维修状态。·维修完成后客房处于空闲状态。该系统采用面向对象方法开发,系统中的类及类之间的关系用UML类图表示,如图9-12所示是该系统的类图的一部分,图9-13描述了客房状态的转变情况。
进入题库练习
问答题下面是一个Applet程序,其功能是在绘图区域中通过鼠标的移动来绘制直线,并且有清除绘图区域按钮,用来清除已经绘制的图像。程序运行结果如图5所示。importjava.awt.*;importjava.applet.*;/*<appletcode=ex6_7.classwidth=800height=400></applet>*/publicclassex6_7extendsApplet{privateButtonbtn;privatebooleanbDraw,bClear;privateintupX,upY,downX,downY;publicvoidint(){setLayout(null);bClear=false;bDraw=false;btn=newButton("clear");btn.reshape(250,150,70,30);add(btn);}publicvoidpaint(Graphicsg){if(bClear){g.clearRect(0,0,getSize().width,getSize().height);{{U}}(1){{/U}};}if(bDraw){g.drawLine({{U}}(2){{/U}});bDraw=false;}}publicvoidupdate(Graphicsg){{{U}}(3){{/U}};}publicbooleanmouseDown(Eventevent,intx,inty){downX=x;downY=y;returntrue;}publicbooleanmouseup(Eventevent,intX,inty){upX=x;upY=y;{{U}}(4){{/U}};repaint();returntrue;}publicbooleanaction(Eventevent,Objectobject){if({{U}}(5){{/U}}){bClear=true;repaint();}returntrue;}}ex6_7.html<HTML><HEAD><TITLE>ex6_7</TITLE></HEAD><BODY><appletcode="ex6_7.class"width=800height=400></applet></BODY></HTML>
进入题库练习
问答题【说明】下面是一个Applet程序,其功能是通过一个按钮控制一个窗口的创建,显示与隐藏,并且以按钮文字作为提示,可以随着窗口的状态改变,即如果窗口出现,则按钮文字为"HidemyFrm",提示用户点击按钮,则隐藏窗口,反之亦然。请将横线处语句补充完整。程序运行结果如图5所示:importjava.awt.*;importjava.applet.*;<appletcode="ex8_7.class"width=800height=400></applet>*/publicclassex8_7extendsApplet{privateFramefrm;privateButtonshowBtn;publicvoidinit(){showBtn=newButton("ShowFrame");{{U}}(1){{/U}};}publicbooleanaction(Evente,Objecto){if(e.target==showBtn){if({{U}}(2){{/U}}){{{U}}(3){{/U}};frm.dispose(){{U}}(4){{/U}}showBtn,setLabel("ShowmyFrm");}else{frm=newFrame("myFrm");frm.resize(200,150);frm.setBackground(Color.gray);{{U}}(5){{/U}};showBtn,setLabel("HidemyFrm");}}returntrue;}}ex8_7,html<HTML><HEAD><TITLE>ex8_7</TITLE></HEAD><BODY><appletcode="ex8_7,class"width=800height=400></applet></BODY></HTML>
进入题库练习
问答题[说明] 快速排序是一种典型的分治算法。采用快速排序对数组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)合并:快速排序在原地排序,故不需合并操作。
进入题库练习
问答题【说明】传输门是传输系统中的重要装置。传输门具有Open(打开)、Closed(关闭)、Opening(正在打开)、StayOpen(保持打开)和Closing(正在关闭)五种状态。触发状态的转换事件有click、complete和timeout三种。事件与其相应的状态转换如下图所示。下面的Java代码1与Java代码2分别用两种不同的设计思路对传输门进行状态模拟,请填补代码中的空缺。【Java代码1】publicclassDoor{publicstaticfinalintCLOSED=1;publicstaticfinalintOPENING=2;publicstaticfinalintOPEN=3;publicstaticfinalintCLOSING=4;publicstaticfinalintSTAYOPEN=5;privateintstate=CLOSED;//定义状态变量,用不同的整数表示不同状态privatevoidsetState(intstate){this.state=state;}//设置传输门当前状态publicvoidgetState(){//此处代码省略,本方法输出状态字符串,//例如,当前状态为CLOSED时,输出字符串为"CLOSED"}publicvoidclick(){//发生click事件时进行状态转换if({{U}}(1){{/U}};)setState(OPENING);elseif({{U}}(2){{/U}};)setState{CLOSING);elseif({{U}}(3){{/U}};)setState(STAYOPEN);}//发生timeout事件时进行状态转换publicvoidtimeout(){if(state==OPEN)setState(CLOSING);}publicvoidcomplete(){//发生complete事件时进行状态转换if(state==OPENING)setState(OPEN);elseif(state==CLOSING)setState(CLOSED);}publicstaticvoidmain(String[]args){DooraDoor=newDoor();aDoor.getState();aDoor.click();aDoor.getState();aDoor.complete();aDoor.getState();aDoor.click();aDoor.getState();aDoor.click();aDoor.getState();return;}}【Java代码2】publicclassDoor{publicfinalDoorStateCLOSED=newDoorClosed(this);publicfinalDoorStateOPENING=newDoorOpening(this);publicfinalDoorStateOPEN=newDoorOpen(this);publicfinalDoorStateCLOSING=newDoorClosing(this);publicfinalDoorStateSTAYOPEN=newDoorStayOpen(this);privateDoorStatestate=CLOSED;//设置传输门当前状态publicvoidsetState(DoorStatestate){this.state=state;}publicvoidgetState(){//根据当前状态输出对应的状态字符串System.out.println(state.getClass().getName());}publicvoidclick(){{{U}}(4){{/U}};}//发生click事件时进行状态转换publicvoidtimeout(){{{U}}(5){{/U}};}//发生timeout事件时进行状态转换publicvoidcomplete(){{{U}}(6){{/U}};)//发生complete事件时进行状态转换publicstaticvoidmain(String[]args){DooraDoor=newDoor();aDoor.getState();aDoor.click();aDoor.getState();aDoor.complete();aDoor.getState();aDoor.timeout();aDoor.getState();return;}}publicabstractclassDoorState{//定义所有状态类的基类protectedDoordoor;publicDoorState(Doordoer){this.door=door;}publicvoidclick(){}publicvoidcomplete(){}publicvoidtimeout(){}}classDoorClosedextendsDoorState{//定义一个基本的Closed状态publicDoorClosed(Doordoor){super(door);}publicvoidclick(){{{U}}(7){{/U}};)//该类定义的其余代码省略}//其余代码省略
进入题库练习
问答题选出正确的关系代数表达式。
进入题库练习
问答题[说明] 某公司拟开发一多用户电子邮件客户端系统,部分功能的初步需求分析结果如下。 (1)邮件客户端系统支持多个用户,用户信息主要包括用户名和用户密码,且系统中的用户名不可重复。 (2)邮件账号信息包括邮件地址及其相应的密码,一个用户可以拥有多个邮件地址(如user1@123.com)。 (3)一个用户可拥有一个地址簿,地址簿信息包括联系人编号、姓名、电话、单位地址、邮件地址1、邮件地址2、邮件地址3等信息。地址簿中一个联系人只能属于一个用户,且联系人编号唯一标识一个联系人。 (4)一个邮件账号可以含有多封邮件,一封邮件可以含有多个附件。邮件主要包括邮件号、发件人地址、收件人地址、邮件状态、邮件主题、邮件内容、发送时间、接收时间。其中,邮件号在整个系统内唯一标识一封邮件,邮件状态有已接收、待发送、已发送和已删除4种,分别表示邮件是属于收件箱、发件箱、已发送箱和废件箱。一封邮件可以发送给多个用户。附件信息主要包括附件号、附件文件名、附件大小。一个附件只属于一封邮件,且附件号仪在一封邮件内唯一。
进入题库练习
问答题试题五(共15分)阅读下列说明和C++代码,将应填入____(n)___处的字句写在答题纸的对应栏内。[说明]某咖啡店售卖咖啡时,可以根据顾客的要求在其中加入各种配料,咖啡店会根据矽加入的配料来计算费用。咖啡店所供应的咖啡及配料的种类和价格如下表所示。
进入题库练习
问答题【说明】 函数DeleteNode (Bitree *r, int e)的功能是:在树根结点指针为r的二叉查找(排序)树上删除键值为e的结点,若删除成功,则函数返回0,否则函数返回-1。二叉查找树结点的类型定义为: typedef struct Tnode int data; /*结点的键值*/ struct Tnode *Lchild, *Rchild; /*指向左、右子树的指针*/ *Bitree: 在二叉查找树上删除一个结点时,要考虑3种情况: ①若待删除的结点p是叶子结点,则直接删除该结点; ②若待删除的结点p只有一个子结点,则将这个子结点与待删除结点的父结点直接连接,然后删除结点p; ③若待删除的结点p有两个子结点,则在其左子树上,用中序遍历寻找关键值最大的结点s,用结点s的值代替结点p的值,然后删除结点s,结点s必属于上述①、②情况之一。 【函数】 int DeleteNode (Bitree *r,int e) Bitree p=*r,pp,s,c; while ( (1) ) /*从树根结点出发查找键值为e的结点*/ pp=p; if(e<p->data) p=p->Lchild; else p=p->Rchild; if(!P) return-1; /*查找失败*/ if(p->Lchild p->data=s->data; p=s; /*处理情况①、②*/ if ( (4) ) c=p->Lchild; else c=p->Rchild; if(p==*r) *r=c; else if ( (5) ) pp->Lchild=c; else pp->Rchild=c; free (p); return 0;
进入题库练习
问答题【问题3】 若将上述各关系直接实现为对应的物理表,现需查询在2005年1月1日到2005年 12月31日期间,在该宾馆住宿次数大于5次的客人身份证号,并且按照入住次数进行降序排列。下面是实现该功能的SQL语句,请填补语句中的空缺。 SELECT 住宿.身份证号,count (入住日期) FROM 住宿,客人 WHERE 入住日期>='20050101'AND入住日期<='20051231' AND 住宿.身份证号=客人.身份证号 GROUP BY {{U}}(2) {{/U}} {{U}} (3) {{/U}} count(入住日期)>5 {{U}} (4) {{/U}}
进入题库练习
问答题【说明】某超市的销售业务由一个销售业务管理系统进行管理,该系统每完成一次交易都需要提供顾客发票,其格式如表1-1所示。对于这样一个销售业务管理系统,分别给出了以下两种关系数据库的设计(下划线表示主关键字)设计一:顾客Customer(顾客代码Cno,姓名name,住址address,联系电话phone)收银员Salesman(收银员代码Sno,身份证号idno,姓名flame,住址address,联系电话phone)商品Merchandise(商品代码Milo,商品名称Mname,价格price)发票Invoice(发票号码Ino,交易日期Idate,顾客代码Cno,收银员代码Sno,商品代码Mno,单价unitprice,数量amount)设计二:顾客Customer(顾客代码Cno,姓名name,住址address,联系电话phone)收银员Salesman(收银员代码Sno,身份证号idno,姓名name,住址address,联系电话吵one)商品Merchandise(商品代码Mno,商品名称mllame,价格pnce)发票Invoice(发票号码Ino,交易日期Idate,顾客代码Cno,收银员代码Sno)发票明细Invoicedetail(发票号码Ino,商品代码Uno,单价unitprice,数量amount)
进入题库练习
问答题[说明1]B树是一种多又平衡查找树。一棵m阶的B树,或为空树,或为满足下列特性的m叉树。(1)树中每个节点至多有m棵子树。(2)若根节点不是叶子节点,则它至少有两棵子树。(3)除根之外的所有非叶子节点至少有[m/2]棵子树。(4)所有的非叶子节点中包含下列数据信息:(n,A0,K1,A1,K2,A2,…,Kn,An)。其中,Ki(i=1,2,…,n)为关键字,且Ki<Ki+1(i=1,2,…,n-1),Ai(i=0,1,…,n)为指向树根节点的指针,且指针Ai-1所指子树中所有节点的关键字均小于ki,Ai+1所指子树中所有节点的关键字均大于ki;n为节点中关键字的数目。(5)所有的叶子节点都出现在同一层次上,并且不带信息(可以看作是外部节点或查找失败的节点,实际上这些节点不存在,指向这些节点的指针为空)。例如,一棵4阶B树如图1所示(节点中关键字的数目省略)。B树的阶M、bool类型、关键字类型及B树节点的定义如下:#defineM4/*B树的阶*/typedefenum{FALSE=0,TRUE=1}bool;typedefintElemKeyType;typedefStructBTreeNode{intnumkeys;/*节点中关键字的数目*/structBTreeNode*parent;/*指向父节点的指针,树根的父节点指针为空*/structBTreeNode*A[M];/*指向子树节点的指针数组*/ElemgeyTypeK[M];/*存储关键字的数组,K[0]闲置不用*/}BTreeNode;函数SearchBtree(BTreeNode*root,ElemKeyTypeakey,BTreeNode**ptr)的功能是:在给定的一棵M阶B树中查找关键字akey所在节点,若找到则返回TRUE,否则返回FALSE。其中,root是指向该M阶B树根节点的指针,参数ptr返回akey所在节点的指针,若akey不在该B树中,则ptr返回查找失败时空指针所在节点的指针。例如,在图1所示的4阶B树中查找关键字25时,ptr返回指向节点e的指针。注:在节点中查找关键字akey时采用二分法。函数SearchBtree的代码如下:boolSearchBtree(BTreeNode*root,ElemKeyTypeakey,BTreeNode**ptr){intlw,hi,mid;BTreeNode*P=root;*ptr=NULL;while(p){lw=1;hi=______;while(lw<=hi){mid=(lw+hi)/2;if(p→K[mid]==akey){*ptr=P;returnTRUE;}elseif______hi=mid-1;elselw=mid+1;}*ptr=p;p=______;}returnFALSE;}
进入题库练习