填空题[说明]某游戏公司现欲开发一款面向儿童的模拟游戏,该游戏主要模拟现实世界中各种鸭子的发声特征、飞行特征和外观特征。游戏需要模拟的鸭子种类及其特征如下表所示。为支持将来能够模拟更多种类鸭子的特征,采用策略设计模式(Strategy)设计的类图如图6-1所示。其中,Duck为抽象类,描述了抽象的鸭子,而类RubberDuck、MallardDuck、CottonDuck和RedHeadDuck分别描述具体的鸭子种类,方法fly()、quack()和display()分别表示不同种类的鸭子都具有飞行特征、发声特征和外观特征;接口FlyBehavior与QuackBehavior分别用于表示抽象的飞行行为与发声行为;类FlyNoWay与FlyWithWings分别描述不能飞行的行为和用翅膀飞行的行为;类Quack、Squeak与QuackNoWay分别描述发出“嘎嘎”声的行为、发出橡皮与空气摩擦声的行为与不发声的行为。请填补以下代码中的空缺。[Java代码](1)FlyBehaViorpublicvoidfly(););(2)QuackBehaviorpublicvoidquack();;ClassFlyWithWingsimplementsFlyBehaviorpublicvoidfly()System.out.println("使用翅膀飞行!");;ClassFlyNoWayimplementsFlyBehaViorpublicvoidfly()System.out.printin("不能飞行!");;ClassQuackimplementsQuackBehaviorpubiicvoidquack()System>out>println("发出\'嘎嘎'\声!");;classSqueakimplementsQuackBehaviorpublicvoidquack()System.out.println("发出空气与橡皮摩擦声!");;ClassQuackNoWayimplementsQuackBehaviorpublicvoidquack()(System.out.println("不能发声!');;AbstractclassDuckprotectedFlyBehavior(3);protectedQuackBehaVior(4);publicvoidfly()(5);;publicvoidquack()(6);;public(7)voiddisplay();;classRubberDuckextendsDuckpublicRubberDuck()flyBehavior=new(8);quackBehavior=new(9);publicvoiddisplay()/*此处省略显示橡皮鸭的代码*/;//其他代码省略
填空题[说明] 从键盘输入一个字符ch,输出该字符在文本文件input.txt 的每一行中出现的次数。(必须调用函数鳋统计ch的出现次数,函数ff (str,ch)的功能是统计并返回字符ch在字符串str 中出现的次数。)。
例如:如果文件input. txt 中存放了下列数据:
every
121
I am a student
运行程序,并输入e后,输出:
2
0
1
int ff( char * str, char ch)
{ int count =0;
while ({{U}} (1) {{/U}}) {
if( *str= =ch) count++;
str ++;
}
return count;
}
# include < stdio. h >
# include < stdlib. h >
void main( )
{ char ch, c, s [80];
int k;
FILE *fp;
if({{U}} (2) {{/U}}){
printf( “打不开文件!n”); return;
}
ch = getchar( );
k=0;
while( ! feof(fp) ) {
c = fgete(fp);
if{{U}} (3) {{/U}}
s[k++ ] =c;
else {
s[k]= ";
printf ( "%dn" ,ff(s, ch) );
k=0;
}
}
{{U}} (4) {{/U}}
printf( "% dn", ff( s, ch ) );
}
填空题[问题4] 用SQL语言写出操作:把数学系全体学生的成绩置零。
填空题[说明] 编写一个函数根据用户输入的偶对(以输入。表示结束)建立其有向图的邻接表。一个图的邻接表存储结构定义如下: # include < stdio. h > # define MAXVEX 30 struct edgenode int adjvex; char info; struct edgenode * next; struct vexnode char data; struct edgenode * link; typedef struct vexnode adjlist [MAXVEX]; 实现要求的函数如下: void creatadjlist ( adjlist g) int i, j, k; street vexnode * s; for( k=1; k< =n; k+ +) (1) g [k]. link = NULL; printf ( “输一个对:” ); scanf ("%d, %d", while (2) (3) s- >adjvex =j; (4) g [i].link =s; (5)
填空题[问题2] 假设上述关系模式RS上存在函数依赖:A1→A3。上述关系模式RS最高满足第几范式(在1NF~BCNF 之内)?为什么?
填空题发生缺页时,通常需要进行页面置换,页面置换算法的优劣将会影响虚拟存储系统的性能。常用的页面置换算法有理想页面置换算法(OPT:Optimal)、先进先出页面置换算法(FIFO:First-In First-Out)以及最近最少使用页面置换算法(LRU:Least Recently Used)。 某程序在内存中分配3页,初始为空,页面走向为4、3、2、1、4、3、5、4、3、2、1、5。给出采用先进先出(FIFO)、最近最少使用(LRU)和理想(OPT)页面置换算法所得到的内存中的页面变化序列。 注:缺页标记栏,用○表示没有缺页,用×表示发生了缺页。 OPT 4 3 2 1 4 3 5 4 3 2 1 5 页1 页2 页3 缺页标记 FIFO 4 3 2 1 4 3 5 4 3 2 1 5 页1 页2 页3 缺页标记 LRU 4 3 2 1 4 3 5 4 3 2 1 5 页1 页2 页3 缺页标记
填空题[说明] 编写一个学生类Student,要求: (1) 学生类Student 属性有: id: long 型,代表学号 name: String类对象,代表姓名 age: int 型,代表年龄 sex: boolen 型,代表性别(其中:true 表示男,false 表示女) phone: String 类对象,代表联系电话 (2) 学生类Student 的方法有: Student (long i,String n,int a,boolean s,String p) :有参构造函数,形参表中的参数分别初始化学号、姓名、 年龄、性别和联系电话。 int getAge ():获取年龄作为方法的返回值。 boolean getSex ():获取性别作为方法的返回值。 String getPhone ():获取联系电话作为方法的返回值。 public String to String ():以姓名:性别:学号:联系电话的形式作为方法的返 import java. applet. Applet; import java. awt.* ; public class Student extends Applet long id; String name, phone; int age; boolean sex; Student(long i, String n, int a, boolean s, String p) id=i; name = n; age = a; sex= s; phone = p; public void paint( Graphics g) Student x= new Student (5000," xiaoliu" , 89, true, " 8989898" ); (1) ; (2) g. drawstring( x. getPhone( ), 140,140); int getAge( ) return age; boolean getsex ( ) return sex; String getPhone( ) return phone; String ToString( ) (3)
填空题[说明] 编写一个完整的JavaApplet 程序使用复数类Complex 验证两个复数1+2i 和3+4i 相加产生一个新的复数4+6i。
复数类Complex 必须满足如下要求:
(1) 复数类Complex 的属性有:
RealPart: int 型,代表复数的实数部分
ImaginPart: int 型,代表复数的虚数部分
(2) 复数类Complex 的方法有:
Complex():构造函数,将复数的实部和虚部都置0
Complex (intr,inti):构造函数,形参r为实部的初值,i为虚部的初值。
ComplexeomplexAdd (Complexa):将当前复数对象与形参复数对象相加,所得的结果仍是一个复数值,返回给此方法的调用者
String ToString():把当前复数对象的实部、虚部组合成s+ bi 的字符串形式,其中a和b分别为实部和虚部的数据。
importjava. applet. * ;
importjava. awt. * ;
publicclassabcextends Applet
{
Complex a, b, c;
publi cvoid init( )
{
a = newComplex(1,2);
b = newComplex(3,4);
c = newComplex();
}
publievoidpaint (Graphicsg)
{
{{U}} (1) {{/U}}
g. drawstring( “第一个复数:” + a. toString(), 10,50);
g. drawstring( “第二个复数:” + b. toString( ), 10,70 );
g. drawstring( “两复之和:” + c. toString( ), 10,90);
}
}
class Complex
{
int RealPart;
int ImaginPart;
Complex( ) {{{U}} (2) {{/U}}}
Complex( intr , inti)
{{{U}} (3) {{/U}}}
ComplexeomplexAdd (Complexa)
{
Complextemp = newComplex( );
temp. BealPart = RealPart + a. BealPart;
{{U}}(4) {{/U}}
returntemp;
}
public StringtoString( )
{ return( RealPart + " + " + ImaginPart + " i "); }
}
填空题[问题2] 使用关系代数表达式写出查询所有年龄在20岁以下的学生姓名和年龄。
填空题[说明]在一个分布网络中,资源(石油、天然气、电力等)可从生产地送往其他地方。在传输过程中,资源会有损耗。例如,天然气的气压会减少,电压会降低。我们将需要输送的资源信息称为信号。在信号从信源地送往消耗地的过程中,仅能容忍一定范围的信号衰减,称为容忍值。分布网络可表示为一个树型结构,如图4-1所示。信号源是树根,树中的每个节点(除了根)表示一个可以放置放大器的子节点,其中某些节点同时也是信号消耗点,信号从一个节点流向其子节点。每个节点有一个d值,表示从其父节点到该节点的信号衰减量。例如,在图4-1中,节点w、p、q的d值分别为2、1、3,树根节点表示信号源,其d值为0。每个节点有一个M值,表示从该节点出发到其所有叶子的信号衰减量的最大值。显然,叶子节点的M值为0。对于非叶子j,M(j)=maxM(k)+d(k)|k是j孩子节点,在此公式中,要计算节点的M值,必须先算出其所有子节点的M值。在计算M值的过程中,对于某个节点i,其有一个子节点k满足d(k)+M(k)大于容忍值,则应在k处放置放大器,否则,从节点i到某叶子节点的信号衰减量会超过容忍值,使得到达该叶子节点时信号不可用,而在节点i处放置放大器并不能解决到达叶子节点的信号衰减问题。例如,在图4-1中,从节点p到其所有叶子节点的最大衰减值为4。若容忍值为3,则必须在s处放置信号放大器,这样可使得节点p的M值为2。同样,需要在节点q、v处放置信号放大器,如图4-2阴影节点所示。若在某节点放置了信号放大器,则从该节点输出的信号源输出的信号等价。函数placeBoosters(TreeNode*root)的功能是:对于给定树型分布网络中各个节点,计算其信号衰减量的最大值,并确定应在树中的哪些节点放置信号放大器。全局变量Tolerance保存信号衰减容忍值。树的节点类型定义如下:typedefstructTreeNodeintid;/*当前节点的识别号*/intChildNum;/*当前节点的子节点数目*/intd;/*父节点到当前节点的信号衰减值*/structTreeNode**childptr;/*向量,存放当前节点到其所有子节点的指针*/intM;/*当前节点到其所有子节点的信号衰减值中的最大值*/boolboost;/*是否在当前节点放置信号放大器的标志*/TreeNode;[C语言函数]voidplaceBooster(TreeNode*root)/*计算root所指节点处的衰减量,如果衰减量超出容忍值,则放置放大器*/TreeNode*p;inti,degradation;if((1))degradation=0;root->M=0;i=0;if(i>=root->ChildNum)return;p=(2);for(;i<root->ChildNumi++,p=(3))(P->M=0;(4);if(p->d+p->M>Tolerance)/*在P所指节点中放置信号放大器*/P->boost=true;P->M=0;if(p->d+p->M>degradation)degradation=p->d+p->M;Root->M=(5);
填空题[说明] 将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。 main ( ) int n, i; printf ( "/n please input a number: /n"); scanf ( "% d" , printf ( "%d =" ,n); for( (1) ) while( (2) ) if( (3) ) printf ("%d*",i); (4) else break; printf (“%d”,n);
填空题[说明] 所谓货郎担问题,是指给定一个无向图,并已知各边的权,在这样的图中,要找一个闭合回路,使回路经过图中的每一个点,而且回路各边的权之和最小。 应用贪婪法求解该问题,程序先计算由各点构成的所有边的长度(作为边的权值),按长度大小对各边进行排序后,按贪婪准则从排序后的各边中选择组成回路的边,贪婪准则使得边的选择按各边长度从小到大选择。 函数中使用的预定义符号如下: #define M 100 typedef struct/为两端点p1、p2之间的距离, p1、p2所组成边的长度*/ float x; int p1, p2; tdr; typedef struct/*p1、p2为和端点相联系的两个端点, n为端点的度*/ int n, p1, p2; tr; typedef struct /*给出两点坐标*/ float x, y; tpd; typedef int t1[M]; int n = 10; [函数] float distance(tpd a, tpd b);/*计算端点a、b之间的距离*/ void sortArr(tdr a[M], int m); /*将已经计算好的距离关系表按距离大小从小到大排序形成排序表, m为边的条数*/ int isCircuit(tr r[M], int i, int j); /*判断边(i, J)选入端点关系表r[M]后,是否形成回路, 若形成回路返回0*/ void selected(tr r[M], int i, int j);/*边(i,J)选入端点关系表r*/ void course(tr r[M], t1 1 [W]);/*从端点关系表r中得出回路轨迹表*/ void exchange(tdr a[M], int m, int b); /*调整表排序表, b表示是否可调, 即是否有长度相同的边存在*/ void travling(tpd pd[M], int n, float dist, t1 locus[M]) /*dist记录总路程*/ tdr dr[M];/*距离关系表*/ tr r[M];/*端点关系表*/ int i, j, k, h, m;/*h表示选入端点关系表中的边数*/ int b;/*标识是否有长度相等的边*/ k = 0; /*计算距离关系表中各边的长度*/ for(i = 1; i < n; i++) for(j = i + 1; j <= n; j++) k++; dr[k].x = ______; dr[k].p1 = i; dr[k].p2 = j; m = k; sortArr (dr, m);/*按距离大小从小到大排序形成排序表*/ do b = i; dist = 0; k = h = 0; do k++; i = dr[k].p1; j = dr[k].p2; if((r[i].n <= 1) h++; dist += dr[k].x; else if(______) selected(r, i, j); /*最后一边选入r成回路,完成输出结果*/ h++; dist += dr[k].x; while((k != n) if((h == n)) /*最后一边选入构成回路, 完成输出结果*/ course(r, locus); else/*找不到解, 调整dr, 交换表中边长相同的边在表中的顺序, 并将b置0*/ ______; while(!b);
填空题[问题4] 在E-R模型中,如果实体间是1:N的联系,如何设计相应部分的关系模型?
填空题[问题1] 如果将上述应用的数据库设计成如下关系模式;
RS (A#,A1,A2,A3,B#,B1,B2,D1),请指出该关系模式的候选键。
填空题[问题1] 试解释这个对象联系图。
填空题[问题2] 用边界值分析法设计测试用例,检查逻辑覆盖标准。
填空题[问题2] 试用ORDB的定义语言,定义这个数据库。
填空题[说明] 假设二叉树采用连接存储结构进行存储,root 指向根接点,p 所指结点为任一给定的结点,编写一个求从根结点到p所指结点之间路径的函数。 void path (root, p) btree * root, * p; Btree *stack[m0], *s; int tag[m0], top =0, i, find =0; s =root; do while (s ! = NULL) stack [top] = s; tag[top] =0; ( (1) ) if (top >0) ( (2) ) if (tag[top] = =1) if( (3) ) for (i=1; i< =top; i+ + printf ("%d" ,stack[i]- >data); find=1; else top - -; if( (4) ) p=p- >right; ( (5) ) while (find || (s! = NULL
填空题#include <stdio. h> void main( ) int digit; long in , s; seanf(" % Id", (1) ; (2) ; while(in >0) (3) ; s = s + digit* digit; (4) ; pfinff( "sum = % 1dn", s );
填空题[说明]在销售系统中常常需要打印销售票据,有时需要在一般的票据基础上打印脚注。这样就需要动态地添加一些额外的职责。如下展示了Decorator(修饰)模式。SalesOrder对象使用一个SalesTicket对象打印销售票据,先打印销售票据内容,然后再打印脚注。图显示了各个类间的关系。以下是C++语言实现,能够正确编译通过。[C++代码]classComponentpublic:______voidprtTicket()=0;;classSalesTicket:publicComponentpublic:voidprtTicket()cout<<"SalesTicket!"<<endl;;classDecorator:publicComponentpublic:virtualvoidprtTicket();Decorator(Component*myC);private:______myComp;;Decorator∷Decorator(Component*myC)myComp=myC;voidDecorator∷prtTicket()myComp->prtTicket();classFooter:publicDecoratorpublic:Footer(Component*myC);voidprtTicket();voidprtFooter();;Footer∷Footer(Component*myC):______voidFooter∷prtFooter()cout<<"Footer"<<end1;voidFooter∷prtTicket()______;prtFooter();classSalesOrderpublic:voidprtTicket();;voidSalesOrder∷prtTicket()Component*myST;myST=newFooter______;myST->prtTicket();
