问答题阅读以下说明和流程图,回答问题将解答填入对应栏。[说明]下面的流程图,用来完成求字符串t在s中最右边出现的位置。其思路是:做一个循环,以s的每一位作为字符串的开头和t比较,如果两字符串的首字母是相同的,则继续比下去,如果一直到t的最后一个字符也相同,则说明在s中找到了一个字符串t;如果还没比较到t的最后一个字符,就已经出现字符串不等的情况,则放弃此次比较,开始新一轮的比较。当在s中找到一个字符串t时,不应停止寻找(因为要求的是求t在s中最右边出现位置),应先记录这个位置pos,然后开始新一轮的寻找,若还存在相同的字符串,则更新位置的记录,直到循环结束,输出最近一次保存的位置。如果s为空或不包含t,则返回-1。注:返回值用pos表示。[问题]将流程图的(1)~(5)处补充完整。
问答题试题六(共15分)阅读以下说明和Java程序,填充程序中的空缺,将解答填入答题纸的对应栏内。[说明]下面的程序用来计算并寻找平面坐标系中给定点中最近的点对(若存在多对,则输出其中的一对即可)。程序运行时,先输入点的个数和一组互异的点的坐标,通过计算每对点之间的距离,从而确定出距离最近的点对。例如,在图6-1所示的8个点中,点(1,1)与(2,0.5)是间距最近的点对。[java代码]
问答题阅读以下技术说明和问题模型图,根据要求回答问题1和问题2。【说明】某大学城图书馆需要在无线阅览厅的某些位置上放置无线接入点AP(AccessPoin)。假设每个无线AP覆盖范围的半径是6米,因此必须使得每台笔记本电脑上的无线网卡到某个无线AP的直线距离不超过6米。为了简化问题,假设所有无线网卡在同一直线上,并且无线AP沿该直线放置。该问题可以建模为如图1-16所示,其中直线表示无线网卡所在的直线,实心正方形表示无线网卡。现利用贪心策略实现用尽可能少的无线AP覆盖所有的无线网卡。实现贪心算法的流程如图1-17所示。其中,①d[i](1≤i≤N)表示第i张无线网卡到通道A端的距离,N表示无线网卡的总数,无线网卡的编号按照无线网卡到通道A端的距离从小到大进行编号;②s[k]表示第k(k≥1)个无线AP到通道A端的距离。算法结束后k的值为无线AP的总数。
问答题[说明] 本程序实现了雇员信息管理功能,其中封装了雇员信息及其设置、修改、删除操作。已知当输入为“Smith 31 2960.0”时,程序的输出是: 姓名:Smith 年龄:31 工资:2960 姓名:Smith 年龄:31 工资:3500 姓名:Mary 年龄:23 工资:2500[C++程序]#include <iostream.h>#include <string.h>class employee char *name; //雇员姓名 short age; //年龄 float salary;//工资 public: employee(); void set_name(char *); void set_age(short a) age=a; void set_salary(float s) salary=s; (1) ; ~ employee()delete[] name;;employee::employee() name=""; age=0; salary=0.0;void employee::set_name(char *n) name=new char[strlen(n)+1]; (2) (name,n);void employee::print() cout<<"姓名":"<<name<<" 年龄:"<<agc<<" 工资:" <<salary<<endl;void main() char *na; short ag=0; float sa=0; (3) ; na=new char[10]; cin>>na>>ag>>sa; emp.set_name(na); emp.set_age(ag); emp.set_salary(sa); emp.print(); (4) (3500.0); emp.print(); (5) ; emp.set_name("Mary"); emp.set_age(23); emp.set_salary(2500.0); emp.print();
问答题(5)
问答题【说明】
函数DelA_InsB(LinkedList La,LinkedList Lb,int key1,int key2,int len)的功能是:将线性表A中关键码为key1的结点开始的len个结点,按原顺序移至线性表B中关键码为key2的结点之前,若移动成功,则返回0;否则返回-1。线性表的存储结构为带头结点的单链表,La为表A的头指针,Lb为表B的头指针。单链表结点的类型定义为
typedef struct node {
int key;
struct node * next;
} *LinkedList;
【函数】
int DelA_InsB ( LinkedList La, LinkdeList Lb,int key1,int key2,,int len)
{ LinkedList p,q,s,prep,pres;
int k;
if( ! La->next || ! Lb-> next ||| en <=0)return-1;
p = La -> next;prep = La;
while(pp = p -> next;
}
if( ! p) return - 1; /*在表A中不存在键值为key1的结点*/
q=p;k=1;
while(q k++;
}
if( ! q)return -1; /*表A中不存在要被删除的len个结点*/
s = Lb -> next; {{U}}(3) {{/U}};
while(s s =s->next;
}
if( ! s) return - t; /*表B中不存在键值为key2的结点*/
{{U}}(4) {{/U}}=q-> next; /*将表A中的len个结点删除*/
q->next={{U}} (5) {{/U}};
pres -> next = p; /*将len个结点移至表B */
return 0;
}
问答题阅读以下技术说明和流程图,根据要求回答问题1至问题3。[说明]图4-8的流程图所描述的算法功能是将给定的原字符串中的所有前部空白和尾部空白都删除,但保留非空字符。例如,原字符串“FileName”,处理变成“FileName”。图4-9、图4-10和图4-11分别详细描述了图4-8流程图中的处理框A、B、C。假设原字符串中的各个字符依次存放在字符数组ch的各元素ch(1)、ch(2)、…、ch(n)中,字符常量KB表示空白字符。图4-8所示的流程图的处理过程是:先从头开始找出该字符串中的第一个非空白字符ch(i),再从串尾开始向前找出位于最末位的非空白字符ch(j),然后将ch(i)、……、ch(j)依次送入ch(1)、ch(2)、……中。如果字符串中没有字符或全是空白字符,则输出相应的说明。在图4-8流程图中,strlen()是取字符串长度函数。图4-8算法总流程图图4-9处理框A对应的流程图图4-10处理框B对应的流程图图4-11处理框C对应的流程图
问答题【说明】 编写程序,生成一个新文本文件,它由一个已知文本文件的所有偶数行组成。要求已知文本文件名和新文本文件名均从键盘输入。请填空完善程序。 【C语言程序】 #include<stdio.h> main() FILE *oldf,*newf; char ch,fname[20]; int i; do printf("Enter name of existed text file to be read:"); scanf("%s",fname); if((oldf=fopen(fname,"r"))==NULL) printf("File %s can't open!/n",fname); while(oldf==NULL); do printf("Enter mane of new text file to be written:"); scanf("%s",fname); if(( (1) ==NULL) printf("File %s can't open!/n",fname); while( (2) ); i=1; while(!feof(oldf)) while((ch=fgetc(oldf))!= (3) ) if(i%2== (4) ) fputc(ch,newf); fputc('/n',newf); (5) ; fclose(oldf); fclose(newf);
问答题[说明]
本程序的功能是产生一个抽奖游戏中的随机数组合。抽奖的规则是从自然数1至50中无重复抽取6个数。为了保证抽取的无重复性,将50个自然数放在数组source中。每抽取了一个数,就用数组的最后一个数来改写这个被抽中的数,并把数组的长度减1。为使输出更为清晰,把抽取出来的6个数放在数组target中,经过排序(Arrays类中的sou方法实现排序)然后输出。注:Math.random方法返回一个在0(包含)到1(不包含)之间的随机浮点数。
[Java代码]
import java. util. *;
public class DrawOut
{ public static void main (String[ ] args) {
int n =50;
int k =6;
int[ ] source = new int[n];
for(int i=0; i <{{U}} (1) {{/U}};i++)
source[i] = i + 1;
int[ ] target = new int[k];
//将抽中的数字从source数组中取出,放入到target数组
for (int i = 0; i <{{U}} (2) {{/U}}; i+ +) {
int r = (int) (Math. random() *{{U}} (3) {{/U}});
target[i] = source[r];
.... [r] ={{U}} (4) {{/U}};
{{U}} (5) {{/U}};
}
Arrays. sort(target);
for (int i = 0; i < target, length; i + + )
System. out. prinfln ( target [i] );
}
}
问答题试题六(15 分,每空3 分)
阅读以下说明、Java 代码和HTML 文档,将应填入 (n) 处的字句写在答题纸的对应栏内。
[说明]
当用户启动html 浏览器并首次打开下面的html 文档时,Java Applet 小程序在显示面板上显示字符串“Welcome !”;当html 页面被其它窗口遮挡后再次显示时,小程序在显示面板上显示“Welcome back !”。
[Java 代码]
import java.awt.*;
import java.applet.*;
public class HelloApplet extends (1) {
public void paint( (2) ){
g.drawString(message,10,20);
message = "welcome back ! ";
}
public void (3) (){
message = "Welcome ! ";
}
private (4) message;
}
[HTML 文档]
HTML Test HelloApplet Page
Test HelloApplet 小程序
问答题【说明】在VisualBasic程序中,设计一个“个人所得税计算器”,其应用程序的运行窗口如图6-16所示。窗口中的3个文本框和两个按钮的名称分别为Txt_salary、Txt_base、TxL_tax、Cmd_compute和Cmd_quit。“个人所得税计算器”程序运行时,文本框Txt_base中存放的是免税金额基数(应扣除的基本费用)。当用户在文本框Txt_salary中输入月收入(工资或薪金)并单击【计算】按钮(Cmd_compute后,Txt_tax框中就显示计算所得的应纳税额。文本框Txt_base和Txt_tax在运行时不接受用户输入,Txt_base的内容以灰色显示。个人工资(或薪金)所得税是按照超额累进的税率来征收的,其计算方法如下:以每月收入总额减去免税金额基数后的余额作为该月的月应纳税所得额,再将应纳税所得额按相应级数采用相应的税率进行累进计算。目前的免税金额基数为1600元,税率如表6-15所示。表6-15个人所得税税率表(工资、薪金所得适用)级 数全月应纳税所得额税率(%) 1 不超过500元的 5 2 超过500元至2000元的部分 10 3 超过2000元至5000元的部分 15 4 超过5000元至20000元的部分 20 5 超过20000元至40000元的部分 25 6 超过40000元至60000元的部分 30 7 超过60000元至80000元的部分 35 8 超过80000元至100000元的部分 40 9 超过100000元的部分 45(注:本表所称全月应纳税所得额是指依照本法第六条的规定,以每月收入额减除费用1600元后的余额或者减除附加减除费用后的余额)设某个人的全月应纳税所得额为M(元),用下面的公式计算其应缴纳的个人所得税额S(元):若0<M≤500,则S=M×5%;若500<M≤2000,则S=500×5%+(M-500)×10%;若2000<M≤5000,则S=500×5%+1500×10%+(M-2000)×15%;若5000<M≤20000,则S=500×5%+1500×10%+3000×15%+(M-5000)×20%;假设某程序员2008年5月份工资总额为4700元,减去1600元后,应纳税所得额为3100元,其应缴纳的个人所得税额为500×5%+1500×10%+1100×15%=340元。在开发过程中,需要编写的程序代码如下。【VisualBask程序】OptionBase0PrivateSubCmdcompute-Click()Dimpaylevel,taxPratepaylevel=Array(0,500,2000,5000,20000,40000,60000,80000,100000,1000001taxPrate=Array(5,10,15,20,25,30,35,40,45)M=(1)S=0If(M>0)ThenForj=1To9If(2)Thens=s+(paylevel(j)-paylevel(j-1))*taxPrate(j-1)/100Else(3)ExitForEndifNextjEndif(4)=Str$(S)EndSubPrivateSubCmd_quit_Click()EndEndSubPrivateSubForm_Load()Txt_tax.Text=""Txt_salary.Text=""Txt_base.Text=1600Txt_tax.Locked=TrueTxt_base.Enabled=(5)EndSub
问答题【说明】
下面C程序代码的功能是:对于输入的一个正整数n(100≤n<1000),先判断其是否是回文数(正读反读都一样的数)。若不是,则将n与其反序数相加,再判断得到的和数是否为回文数,若还不是,再将该和数与其反序数相加并进行判断,依此类推,直到得到一个回文数为止。例如,278不是回文数,其反序数为872,相加后得到的1150还不是回文数,再将1150与其反序数511相加,得到的1661是回文数。
函数int isPalm(long m)的功能是:将正整数m的各位数字取出存入数组中,然后判断其是否为回文数。若m是回文数则返回1,否则返回0。
【C程序代码】
#include <stdio.h>
#include <stdlib.h>
int isPalm(long m)
{ /*判断m是否为回文数*/
int i = 0, k = 0;
char str[32];
while (m > 0) { /*从个位数开始逐个取出m的各位数字并存入字符数组str*/
str[k++] = {{U}}(1) {{/U}} + '0';
m = m / 10;
}
for(i = 0; i < k/2; i++) /*判断str中的k个数字字符序列是否是回文*/
if ( str[i] != str[{{U}} (2) {{/U}}] ) return 0;
return 1;
}
int main ( )
{
long n, a, t;
printf("input a positive integer:"); scanf("%ld",
if (n < 100 || n > =1000) return -1 ;
while({{U}} (3) {{/U}}) { /*n不是回文数时执行循环*/
printf("%ld-> ", n);
for(a = 0, t = n; t > 0; ) { /*计算n的反序数并存入a*/
a = {{U}}(4) {{/U}}*10 + t % 10; t = t / 10;
} /*end of for*/
n ={{U}} (5) {{/U}}; /*与反序数求和*/
} /*end of while*/
printf ("%id/n",n);
system("pause"); return 0;
}
问答题试题五(共15分)阅读以下说明和C++代码,填充代码中的空缺,将解答填入答题纸的对应栏内。[说明]下面的程序用来计算并寻找平面坐标系中给定点中最近的点对(若存在多对,则输出其中的一对即可)。程序运行时,先输入点的个数和一组互异的点的坐标,通过计算每对点之间的距离,从而确定出距离最近的点对。例如,在图5-1所示的8个点中,点(1,1)与(2,0.5)是间距最近的点对。[C++代码]
问答题[说明]本程序实现的功能是查看磁盘上的图片及其基本信息。程序运行界面如下图所示,用户只要逐步选择适当的驱动器、目录和图片文件,图片内容随即显示在界面中央,文件的基本信息则呈现于右侧文本框中。用户还可以删除或复制选中的图片文件。在开发过程中,驱动器列表框名为Drivel,目录列表框名为Dir1,文件列表框名为File1,图片的显示由Image控件对象Image1来实现,文件信息文本框名为Text1,按钮“删除文件”和“复制到…”分别名为CmdDel和CmdCpy。[VisualBasic代码]DimfilenameAsStringDimfsoAsNew{{U}}(1){{/U}},fileAsfilePrivateSubForm_Load()Setfso=CreateObject("Scripting.FileSystemObject")Drivel.Drive="F:"EndSubPrivateSubDir1_Change()File1.path=Dirl.path’更新文件列表框的路径EndSubPrivateSubDrive1_Change()Dir1.path={{U}}(2){{/U}}’更新目录列表框的路径EndSubPrivateSubFile1_Click()’文件列表框的单击事件响应代码IfRight(Dir1.path,1)<>"/"Thenfilename=Dir1.path&"/"&Filel.filenameElsefilename=Dir1.path&Filel.filenameEndIfImage1.Picture={{U}}(3){{/U}}Setfile=fso.GetFile(filename)Text1.Text="文件名称:"&file.Name&vbCrLf&_"文件大小:"&file.Size&"字节"&vbCrLf&_"文件类型:"&file.Type&vbCrLf&_"创建日期:"&file.DateCreated&vbCrLf&_"修改日期:"&file.DateLastModifiedEndSubPrivateSubCmdCpy_Chck()’按钮“复制到…”的单击事件响应代码DimpathAsStringpath=InputBox("请输入目标路径(含文件名):"){{U}}(4){{/U}}EndSubPrivateSubCmdDel_Click()’按钮“删除文件”的单击事件响应代码{{U}}(5){{/U}}EndSub
问答题[说明]某订单管理系统的部分UML类图如图3-21所示。图3-21某订单管理系统的部分分类图在图3-21中,Product表示产品,ProductList表示所销售产品的列表,Order表示产品订单,OrdeItem表示产品订单中的一个条目,OrderList表示订单列表,SalesSystem提供订单管理系统的操作接口。各个类的部分属性和方法说明如表3-16所示。表3-16某订单管理系统各个类的部分属性和方法说明表类成员说明ProductListArrayListproductsProductStringcode产品编号Stringdescription产品描述doubleprice产品单价Booleanequals(Objectobject)若两个产品相同则返回true,否则返回falseOrderItemProductproduct订单项中的产品intquantity产品的订购数量ProductgetProduct()获取订单项中的产品OrderArrayList(OrderItem)items订单中饮食的订单项OrderListArrayList(Order)Orders订单voidaddOrder(OrderOrder)向订单列表中添加新订单intgetNumberOfOrders()获取订单列表中的订单总数SalesSystemProductListcatalog产品目录OrderListsales订单列表voidstatistic()依次统计产品目录中每个产品的订购总量,并打印出每个产品的编号、说明、订购总量和订购金额可以使用类java.util.ArrayList<E>来实现对象的聚集关系,如图3-21所示OrderList与Order之间的聚集关系。For...each循环提供了一种遍历对象集合的简单方法。在for...each循环中,可以指定需要遍历的对象集合及用来接收集合中每个元素的变量,其语法如下:for(用来接收集合中元素的变量:需要遍历的对象集合)如果要使用for-each循环来遍历对象集合,那么包含该对象集合的类必须实现接口java.util.Iterable<T>。[Java程序7-1]和[Java程序7-2]分别给出了类OrderList和方法statistic的Java代码。[Java程序7-1]importjava.util.*.publicclassOrderList(1)privateArrayList<Order>orders;publicOrderList()this.orders=newArrayList(Order)"();publicvoidaddOrder(Orderorder)this.orders,add(order);publicIterator<Order>iterator()return(2);publicintgetNumberOfOrders()returnthis.orders,size();[Java程序7-2]importjava.util.*;publicclassSalesSystemprivateProductListcatalog;privateOrderListsales;privatestaticPrintWriterstdOut=newPrintWriter(System.out,true);publicvoidstatistic()for(Productproduct:(3)intnumber=0;for(Orderorder:(4)for((5):order)if<product.ecluals(item.getProduct()))number+=item.getQuantity();stdOut.println(product.getCode()+""+product.getDescription()+""+number+""+number*product.getPrice());//其余的方法未列出
问答题[说明] 本程序包含的函数及其功能说明如下: (1)函数first_insert()的功能是在已知链表的首表元之前插入一个指定值的表元; (2)函数reverse_copy()的功能是按已知链表复制出一个新链表,但新链表的表元链接顺序与 已知链表的表元链接顺序相反; (3)函数Print_link()用来输出链表中各表元的值; (4)函数free_link()用来释放链表全部表元空间。[程序] #include <stdio. h >#include <malloe. h >typodef struct node int val; struct node * next; NODE;void first_insert(NODE * * p,int v) NODE *q = (NODE *) malloe(sizeof(NODE)); q->val = v; q->next = *p; /* 为新表元赋值*/ * p = (1) ; NODE * reverse_copy( NODE * p) NODE * u; for(u=NULL; p!=NULL; p=p->next) first_insert( (2) ); return u; void printlink(NODE * p ) for(; (3) ) prinff("%d/t", p->val); printf(" /n");void free_link( NODE * p) NODE * u; while(p! =NULL) u=p->next;free(p); (4) ; void main( ) NODE * link1 , * link2; int i; link1 = NULL; for(i=1; i<= 10; i+ + )first_insert( link2 = reverse_copy(link1 ); (5) ; free_link( linkl ) ;free_link(link2);
问答题试题七(15分)阅读以下应用说明以及用VisualBasic编写的程序代码,将应填入(n)处的字句写在答题纸的对应栏内。[应用说明]本应用程序的运行窗口中将显示一个简单的模拟时钟如下:该圆形钟面上有时针、分针和秒针在运动,不断显示系统的当前时间。在开发该应用时,首先建立一个圆形Shape控件作为钟面(背景为白色)。设圆心为象素坐标(X0,Y0),半径为940。再在圆心处建立一个小的实心圆Shape控件作为轴心。钟面上的刻度3,6,9,12为四个标签。时针、分针、秒针(红色)为线型控件,名称分别为LineH、LineM、LineS,线宽属性值分别为:3,2,1,线长属性值分别为500,700,900。这三个线型控件的起点坐标都固定在(X0,Y0),其终点坐标随转角θ而动态变化:设置定时器Timer1使该时钟能反映系统的当前时间,其定时间隔为0.5秒,该定时器的Interval属性值应设置为(1)。每隔0.5秒,秒针需要调整位置,但分针和时针只是在初始显示时以及在每次秒计数为0时才需要调整位置(可节省计算量)。[程序代码]ConstPi=3.1416ConstX0=1750ConstY0=1150ConstLH=500,LM=700,LS=900PublicfirstAsBooleanPrivateSubForm_Load()LineS.X1=X0'秒针的起点位置LineS.Y1=Y0LineM.X1=X0'分针的起点位置LineM.Y1=Y0LineH.X1=X0'时针的起点位置LineH.Y1=Y0first=TrueEndSubPrivateSubTimer1_Timer()S=Second(Time)S_seta=Pi*(2)'秒针的转角LineS.X2=X0+LS*Sin(S_seta)'秒针的终点位置LineS.Y2=Y0-LS*Cos(S_seta)If((3))ThenM=Minute(Time)LineM.X2=X0+LM*Sin(Pi*M/30)'分针的终点位置LineM.Y2=Y0-LM*Cos(Pi*M/30)H=Hour(Time)If(H>=12)ThenH=H-12H_seta=Pi*((4))'时针的转角LineH.X2=X0+LH*Sin(H_seta)'时针的终点位置LineH.Y2=Y0-LH*Cos(H_seta)first=(5)EndIfEndSub
问答题[说明]某银行新近开通外汇定期存款业务。为方便用户查询不同存款方式下的日利率、计算本利,特开发了日利率查询及本利计算程序,其运行窗口如下图所示。用户只要在界面上选择相应的存款方式(包括外汇币种、存期等),便可单击按钮一查询存款日利率。若输入一定数量的本金。程序还会根据所选择的存期计算并输出本利和。在开发过程中,选择币种和存期的组合框(ComboBox)名分别为Combo1和Combo2,单旋钮(CommandButton)“个人单位”和“金融机构”分别名为Option1和Option2,用于输入本金的文本框(TextBox)名为Price,“输出日利率”和“计算本利和”按钮(CommandButton)分别名为Command1和Command2。且已知,第i类币种、第j类存期之下,个人单位与金融机构的存款日利率分别存放于数组元素interestRate(i,j,0)和interestRate(i,j,1)中,其中i,j从0开始计数。[VisualBasic代码]DiminterestBate(50,10,2)AsSingle’通用声明PrivateSubForm_Load()……’为数组interestRate赋初值EndSub’根据所选择的币种、存期等信息确定日利率FunctiongetInterestRate()DimstrCurrency,strTimeAsString,i,j,k,intDaysAsIntegerstrCurrency=Combo1.TextstrTime=Combo2.TextFori=0ToCombol.ListCount-1IfCombol.List(i)=strCurrencyThen{{U}}(1){{/U}}NextForj=0ToCombo2.ListCount-1IfCombo2.List(j)=strTimeThen{{U}}(1){{/U}}NextIf{{U}}(2){{/U}}=TrueThenk=0Else:k=1EndIf{{U}}(3){{/U}}=interestRate(i,j,k)EndFunction’输出日利率PrivateSubCommund1_Click()MsgBox"日利率为"&getInterestRate()EndSub’输出本利和PrivateSubCommand2_Click()DimstrTimeAsString,intDaysAsInteger,sngCorpus,sngResultAsSinglestrTime=Combo2.TextsngCorpus=CSng(Text1.Text){{U}}(4){{/U}}’计算存款天数(以每月30天计)Case"一个月":intDays=30Case"三个月":intDays=90Case"六个月":intDays=120EndSelect’计算并输出本利和sngResult=sngCorpus+{{U}}(5){{/U}}MsgBox"本利之和为:"&sngResultEndSub
问答题【说明】已知对某载客车辆(Car)进行类建模,如图7-1所示,其中类Engine表示发动机引擎,类Wheel表示车轮,类Body表示车身,类Driver表示司机,类Passenger表示乘客。【Java代码】classBody{//此处代码省略);//车身类classPassenger{//此处代码省略)///乘客类classWheel{//此处代码省略);//车轮类classDriver{//司机类publicStringname;//表示第几路公交车司机publicDriver(StringdriverName){name=driverName/)//构造函数};classEngine{//引擎类publicStringengineNo;//引擎编号publicEngine(StringengineNo){this.engineNo=engineNo;)//构造函数};publicclassCar{//汽车类staticfinalint{{U}}(1){{/U}}=7;//定义最多载客数staticfinalintMAXWHEELS =5;//定义最多轮胎数protectedEngineengine;protectedDriverdriver;protectedBodybody=newBody();protectedWheel[]wheels;protectedPassenger[]passengers;publicCar(Driverdriver){//构造函数{{U}}(2){{/U}}.driver=driver;engine=newEngine("TX6536型号引擎");wheels=newWheel[MAXWHEELS];passengers=newPassenger[MAX_PASSENGERS];for(intindex=0;index<MAX_WHEELS;index++){wheels[index]=newWheel();}for(intindex=0;index<MAX_PASSENGERS;index++){passengers[index]=null;}}intgetPassengerNumber(){//获取车上乘客数量//此处代码省略}voidgetOnPassenger(PassengeraPassenger){//乘客上车//此处代码省略}voidrun(){//开车if({{U}}(3){{/U}}){System.out.println("司机尚未上车!");return;}//此处代码省略}publicstaticvoidmain(Stringargs[]){Driverdriver=newDriver("第五路公交车司机");Carcar=newCar({{U}}(4){{/U}});for(intindex=0;index<MAX_PASSENGERS;index++)car.getOnPassenger({{U}}(5){{/U}}Passenger());car.run();}}
问答题阅读以下说明和C++代码,将应填入{{U}} (n) {{/U}}处的字句写在答题纸的对应栏内。
{{B}}[{{/B}}说明{{B}}]{{/B}}
已知类LinkedList表示列表类,该类具有四个方法:addElement()、lastElement()、 numberOfElement()以及removeLastElement()。四个方法的含义分别为:
void addElement(Object):在列表尾部添加一个对象;
Object lastElement():返回列表尾部对象;
int numberOfElement():返回列表中对象个数;
void removeLastElement():删除列表尾部的对象。
现需要借助LinkedList来实现一个Stack栈类,C++代码1和C++代码2分别采用继承和组合的方式实现。
{{B}}[{{/B}}C++代码1{{B}}]{{/B}}
class Stack :public LinkedList {
public :
void push (Object o) {addElement (o); }; //压栈
Object peek() {return{{U}} (1) {{/U}};}; //获取栈顶元素
bool i sEmpty (){ //判断栈是否为空
return numberOfElement ( ) == 0;
);
Object pop () { //弹栈
Object o = lastElement();
{{U}} (2) {{/U}};
return o;
};
};
{{B}}[{{/B}}C++代码2{{B}}]{{/B}}
class Stack {
private:
{{U}} (3) {{/U}};
public:
void push (Object o) { //压栈
list. addElement (o);
};
Object peek() { //获取栈顶元素
return list.{{U}} (4) {{/U}};
};
bool isEmpty () { //判断栈是否为空
return list. numberOfElement ( ) = = 0;
Object pop() { //弹栈
Object o = list. lastElement ();
list. removeLastElement ( );
return o; };
}
{{B}}[{{/B}}问题{{B}}]{{/B}}
若类LinkedList新增加了一个公有的方法removeElement(int index),用于删除列表中第 index个元素,则在用继承和组合两种实现栈类Stack的方式中,哪种方式下Stack对象可访问方法removeElement(int index)?{{U}} (5) {{/U}}(A.继承 B.组合)
