填空题
阅读下列说明和C程序,将应填入{{U}} (n) {{/U}}处的字句写在对应栏中。 [说明]
借助一个栈结构,可实现二叉树的非递归遍历算法。InOrderTraverse数实现中序非递归遍历,遍历
过程如下:
若不是空树,根节点入栈,进入左子树;若已经是空树,则栈顶元素出栈,访问该元素(根节点),进入该节点的右子树,继续直到遍历完成。
函数中使用的预定义符号如下: typedef struct BiTNode{
int data; struct BiTNode *iChiid,*rChiid;
} BiTNode,*BiTree; typedef struct SNode{/*链栈的节点类型*/
BiTree elem; struct SNode *next;
}SNode; [函数] int InOrderTraverse(BiTree
root) { BiTree P; SNode
*q,*stop=NULL;/*不带头节点的单链表作为栈的存储结构*/ P=root;
while(p !=NULL || stop !=NULL){ if({{U}} (1)
{{/U}}){ /*不是空树*/ q=(SNode*)malloc(sizeof q);
if(q==NULL)return-1; /*根节点指针入栈*/
{{U}} (2) {{/U}}; q->elem=P;
stop=q; P={{U}} (3) {{/U}};
/*进入根的左子树*/ }else{ q=stop;
{{U}} (4) {{/U}}; /*栈顶元素出栈*/
printf("%d|,q->elem->data); /*防问根节点*/ P={{U}}
(5) {{/U}}; /*进入根的右子树*/ free(q);
/*释放原栈顶元素*/ }/*if*/ }/*while*/
return 0; }/*InOrderTraverse*/
填空题[说明] 编写程序,把从键盘上输入的一批整数(以-1作为终止输入的标志)保存到文本文件“a: xxk1. dat”中。
{{U}} (1) {{/U}}
# include <fstream. h >
# include < stdlib. h >
void main ( ) {
{{U}} (2) {{/U}}
if ( ! four) {
cerr < <“文件没有找开!” < <end1;
exit (1);
}
int x;
cin > >x;
while({{U}} (3) {{/U}}){
{{U}} (4) {{/U}}
cin> >x;
}
{{U}}(5) {{/U}}
}
填空题阅读以下说明和c++代码,将应填入 (n) 处的字句写在答题纸对应栏内。 [说明] 很多时候,希望某些类只有一个或有限的几个实例,典型解决方案是所谓单身(Singleton)模式。但在多线程情况下,Singleton模式有可能出现问题,需要进行同步检查。如果对“检查Singleton对象是否已经创建”进行同步,则存在严重的瓶颈,所有的线程都必须等待检查对象是否存在。解决方式是一种称为Double-Checked-Locking模式,其意图是将非必须的锁定优化掉,同步检查最多只发生一次,因此不会成为瓶颈。以下是c++语言实现,能够正确编译通过。 [C++代码] class USTax (1) : USTax();//构造函数 public: static USTax* getInstance(); private: static USTax*instance; ; (2) =NULL; USTax*USTax::get Instance() if(instance==NULL) //进行某种同步 cout if( (3) ) cout instance= (4) ; cout else cout else cout return (5) ;
填空题设基本表:Student(SNo,SName,Sex,Age,Year,Major),Course(CNo,Cname,Period,Credit),Grade(SNo,CNo,Grade)通过如下SQL语句建立,请在SQL语句空缺处填入正确的内容。 CREATE TABLE Student(SNO CHAR(6)NOT NULL, SName CHAR(20), Sex CHAR(1), Age INTEGER, Year CHAR(4), Major CHAR(20), (1) ); CREATE TABLE Course(CNo CHAR(6)NOT NULL, CName CHAR(20), Period INTEGER, Credit INTEGER, (2) ); CREATE TABLE Grade(SNo CHAR(6)NOT NULL, CNo CHAR(6)NOT NULL, Grade REAL, (3) , (4) , (5) );
填空题[问题3] 能否产生“正确”结果但不可串行化的调度?
填空题[说明] 编写一工资调整程序。若基本工资大于等于800元,工资增加20%,若小于800元大于 600元,则工资增加15%,若小于600元则工资增加10%。要求在文本框Text1 中增加某职工的基本工资,单击“计算”按钮,在标签框Label1中输出增加后的工资。
Private Sub Command1_ Click( )
Dim x As Integer, y As Single
{{U}} (1) {{/U}}
Select Case x
Case Is > = 800
y=x*1.2
Case Is > = 600
y=x, 1.5
{{U}}(2) {{/U}}
y=x*1.1
{{U}}(3) {{/U}}
Label1. Caption = y
{{U}} (4) {{/U}}
Private Sub Command2_ Click()
Unload Me
End Sub
填空题[说明] 利用c++的各种控制语句编写一个万年历程序,要求:显示任何年份的日历,日历以月份顺序排列,每月以星期顺序排列,类似于一般挂历上的格式。本程序包含如下两个函数:Leap ()用于判定指定的年份是闰年,Week ()用于计算year年份的1月1日是星期几,其判定规则为:
(1) 如果year 年份为1994年,则为星期六。
(2) 如果year 年份大于1994年,则星期值weekno 按下列公式计算:
differ=(year-1994)*(365%6)+(year-1993)/4-(year-2001)/100+(year-2001)/400 date=6+differ%7
weekno=(date6)? date-7:date
(3) 如果year 年份小于1994年,则星期值weekno 按下列公式计算:
differ=(1994-year)*(365%7)+(1996-year)/4-(2001-year)/100+(2000-year)/400 weekno=6-dder%7
# include "iostream. h"
# include "iomanip. h"
int leap(int n)
{
if({{U}} (1) {{/U}})
return 0
else
return 1;
}
int week( int year )
{
int a1, differ, date, weekno;
if (year = = 1994)
a1 =0;
else if (year > 1994)
a1=1;
else a1= -1;
switch(a1)
{
case 0: return 6; break;
case 1:
{
{{U}} (2) {{/U}}
date = 6 + differ% 7; weekno = ( date > 6) ? date - 7 date;
}
return weekno; break;
case - 1:
{
differ = ( 1994 - year) * (365%7) + (1996 - year)/4 - (2001 - year)/100 + (2000 - year)/400;
weekno =6-differ%7; } return weekno; break;
}
}
void main( )
}
int i,year,m2,n,j;
cout < < “Please input 某年数:”;
cin> >year;
if ( ! leap(year) )
{{U}} (3) {{/U}};
else
m2 =28;
int month [12]: {31 ,m2,31,30,31,30,31,31,30,31,30,31 };
{{U}} (4) {{/U}}
for ( i=0; i<12; i+ + )
{
cout< < < <end1< <setw(4*n) < <";
for(j=1 ;j< =month [i] ;j+ +)
{
cout< <setw(4) < <j;
n+ +;
if(n> =7)
{
{{U}} (5) {{/U}}
cout < < end1;
}
}
}
}
填空题[说明]某学校的教学系统描述如下:学生信息包括:学号(SNo)、姓名(Sname)、性别(Sex)、年龄(Age)、入学年份(Year)、主修专业(Major),其中学号是入学时唯一编定的。课程信息包括:课程号(CNo)、课程名称(CName)、学时(Period)、学分(Credit),其中课程号是唯一编定的。一个学生可选多门课,每个学生选每门课有一个成绩。图是经分析得到的E-R图。
填空题[问题3] 将关系模式R分解到BCNF
填空题阅读以下说明和C代码,将应填入 (n) 处的字句写在对应栏内。 [说明] 下面程序用来将打乱的单词还原为原来的次序,比如将rty还原为try。单词的原来次序存储于wordlist.txt文件中,原则上可用穷举法(rty对应的穷举为:rty、ryt、try、tyr、ytr、yrt),但考虑到破译速度,采用如下方法。 注意到单词列表中不存在组成字符完全相同的单词(如Hack12与Hack21包含完全相同的字符),因此将单词中的字符进行重组再进行比较,例如,try单词重组为rty(按ASCⅡ码顺序),这样不管打乱的单词是什么顺序,只要是由r、t、y三个字母组成的均破译为try,大大提高破译速度。程序中借助二叉排序树以进一步提高查找效率,二叉排序树左子树(如果有)上的节点对应的值均小于根节点的值,右子树(如果有)上的节点对应的值均大于根节点的值。 函数中使用的符号定义如下: #define NumberofWords 1275//单词总数 #define MaxLength 10//最长单词所含字符数 char WordList[NumberofWords][MaxLength];//存储单词列表 int cmp(Node *q,Node *p);//q与p比较。p小,返回负值;P大返回正值:相等,返回0 typedef struct Node(//二叉树节点 char *eleLetters;//重组后的字符串 int index;//对应单词表中的下标 struct Node *lChiId,*rChiid;//左右子节点 Node; [C代码] void reCompose(Node *p,char *temp) //重纰,亦即将temp字符串中的字符升序排序,存储于p节点中 //采用直接插入排序法 char c; strcpy(p->eleLetters,temp);// int len=strlen(temp); int i,j,k; for(i=0;i<len-1;i++) k=i; for(j=i+1;j<lan;j++) if(p->eleLetters[j]<P->eleLetters[k])k=J; if( (1) ) C=P->eleLetters[i]; P->eleLetters[i]=P->eleLetters[k]; P->eleLetters[k]=c; //if //for ; int find(Node root,char *temp) //在二叉排序树root中查找与temp匹配的单词。 //若匹配返回相应单词在WordList中下标;若查找失败,返回-1 Node *P,*q; int flag; P= (2) ;//临时存储 reCompose(p,temp);//将temp重组 q=root; while((flag= (3) )&&q !=NULL) if(flag<0)//搜索左子树 q=q->lChiid; else(//搜索右子树 q=q->rChild; //while if(flag==0)//找到匹配的,保存下标 return (4) ; if( (5) )//查找失败 printf("cant unscramble the following word:%s",temp);; return -1; ;
填空题如下的SQL语句是用于查询“每个学生的选修课程数、总成绩、平均成绩”的不完整语句,请在空缺处填入正确的内容。 SELECT Student.SNo, (1) ,SUM(Grade),AVG(Grade) FROM Student,Grade WHERE Student.SNo=Grade.SNo, GROUP BY (2) ;
填空题阅读下列函数说明和C代码,将应填入 (n) 处的字句写在对应栏内。 [说明] HufTman树又称最优二叉树,是一类带权路径长度最短的树,在编码中应用比较广泛。 构造最优二叉树的Huffman算法如下: ①根据给定的n各权值W1,w2,…,wn)构成n棵二叉树的集合F=T1,T2,…,Tn,其中每棵树Ti中只有一个带权为wi的根节点,其左右子树均空。 ②在F中选取两棵根节点的权值较小的树作为左右子树,构造一棵新的二叉树,置新构造二叉树的根节点的权值为其左右予树根节点的权值之和。 ③从F中删除这两棵树,同时将新得到的二叉树加入到F中。 重复②③,直到F中只剩一棵树为止。 函数中使用的预定义符号如下: #define INT MAX 10000 #define ENCODING LENGTH 1000 typedef enum(none,left_child,right_child) Which; /*标记是左孩子还足右孩子*/ typedef char Elemtype; typedef struct TNode//Huffman树节点 Elemtype letter; int weight; //权值 int parent; //父节点 Which sigh; char *code; //节点对应编码 HTNode,*HuffmanTree; int n; char coding[50];//储存代码 [函数] void Select(HuffmanTree HT,int end,int *sl,int *s2) /*在0~END之间,找出最小和次小的两个节点序号,返吲S1、S2*/ int i; int min 1=INT_MAX; int min 2=INT_MAX; for(i=0;i<=end;i++)/*找最小的节点序号*/ if(( (1) )&&(HT[i].weight<minl)) *s1=i; min 1=HT[i].weight; for(i=0;i<=end;i++)/*找次小节点的序号*/ if((HT[i].parent==0)&&( (2) ) &&(min 2>HT[i].weight)) *s2=i; min 2=HT[i].weight; void HuffmanTreeCreat(HuffmanTree&HT)/*建立HUFFMAN树*/ int i; int m=2*n-1; int s1,s2; for(i=n;i<m;i++) Select( (3) ); HT[s1].parent=i; HT[s2].parent=i; HT[s1].sigh=left child; HT[s2].sigh=right child; HT[i].weight= (4) ; void HuffmanTreeEncoding(char sen[],HuffmanTree HT) /*将句子进行编码*/ int i=0; int j; while(sen[i] !='\0') for(j=0;j<n;j++) if(HT[j].letter==sen[i])(/*字母吻合则用代码取代*/ strcat(coding, (5) ); break; i++; if (Sen [1]==32) i++; printf("/n%s",coding);
填空题[说明] 假设二叉树采用连接存储结构进行存储,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;
({{U}} (1) {{/U}})
}
if (top >0)
{
({{U}} (2) {{/U}})
if (tag[top] = =1)
{
if({{U}} (3) {{/U}})
{
for (i=1; i< =top; i+ + printf ("%d" ,stack[i]- >data);
find=1;
}
else top - -;
}
if({{U}} (4) {{/U}})
{
p=p- >right;
({{U}} (5) {{/U}})
}
}
} while (find || (s! = NULL
}
填空题[说明]现要编写一个画矩形的程序,目前有两个画图程序:DP1和DP2,DP1用函数draw_a_line(x1,y1,x2,y2)画一条直线,DP2则用drawline(x1,x2,y1,y2)画一条直线。当实例化矩形时,确定使用DP1还是DP2。为了适应变化,包括“不同类型的形状”和“不同类型的画图程序”,将抽象部分与实现部分分离,使它们可以独立地变化。这里,“抽象部分”对应“形状”,“实现部分”对应“画图”,与一般的接口(抽象方法)与具体实现不同。这种应用称为Bridge(桥接)模式。图显示了各个类间的关系。这样,系统始终只处理3个对象:Shape对象、Drawing对象、DP1或DP2对象。以下是C++语言实现,能够正确编译通过。[C++代码]classDP1public:staticvoiddraw_a_line(doublex1,doubley1,doublex2,doubley2)//省略具体实现;classDP2public:staticvoiddrawline(doublex1,doublex2,doubley1,doubley2)//省略具体实现;classDrawingpublic:______voiddrawLine(doublex1,doubley1,doublex2,doubley2)=0;classViDrawing:publicDrawingpublic:voiddrawLine(doublex1,doubley1,doublex2,doubley2)DP1∷draw_a_line(x1,y1,x2,y2);;classV2Drawing:publicDrawingpublic:voiddrawLine(doublex1,doubley1,doublex2,doubley2)______;;classShapeprivate:_______dp;public:Shape(Drawing*dp);virtualvoiddraw()=0;voiddrawLine(doublex1,doubley1,doublex2,doubley2);;Shape∷Shape(Drawing*dp)_dp:dp;voidShape∷drawLine(doublex1,doubley1,doublex2,doubley2)//画一条直线______;classRectangle:publicShapeprivate:double_x1,_y1,_x2,_y2;public:Rectangle(Drawing*dp,doublex1,doubley1,doublex2,doubley2);voiddraw();;Rectangle∷Rectangle(Drawing*dp,doublex1,doubley1,doublex2,doubley2):_______x1=x1;_y1=y1;_x2=x2;_y2=y2voidRectangle∷draw()//省略具体实现
填空题[说明]某灯具厂商欲生产一个灯具遥控器,该遥控器具有7个可编程的插槽,每个插槽都有开关按钮,对应着一个不同的灯。利用该遥控器能够统一控制房间中该厂商所有品牌灯具的开关,现采用Command(命令)模式实现该遥控器的软件部分。Command模式的类图如下图所示。Command模式的类图[java代码]classLight{publicLight(){};publicLight(stringname){/*代码省略*/}publicvoidon(){/*代码省略*/}//开灯publicvoidoff(){/*代码省略*/}//关灯}:________{publicvoidexecute();}classLightonCommandimplementsCommand{//开灯命令Lightlight;publicLightonCommand(Lightlight){this.light=light;}publicVoidexecute(){________;}}classLightoffCommandimplementsCommand{//关灯命令Lightlight;publicLightoffCommand(Lightlight){this,light=ight;}publicVoidexecute(){________;}}classRemoteControl{//遥控器Command[]onCommands[7];Command[]offCommands[7];PublicRemoteControl(){/*代码省略*/}PublicvoidsetCommand(intslotCommandonCommand,CommandoffCommand){________=onCommand;________=offCommand;}PublicvoidonButtonWasPushed(intslot){________;}PublicvoidoffButtonWasPushed(intslot){________;})classremoteLoader{publicstaticvoidmain(string[]args){RemoteControlremoteControl=newRemoteControl();LightlivingRoomLight=newLight("LivingRoom");LightkitchenLight=newLight("kitchen");LightonCommandlivingRoomLighton=newLightonCommand(livingRoomLight);LightoffCommandlivingRoomLightoff=newLightoffCommand(livingRoomLight);LightonCommandkitchenLighton=newLightonCommand(kitchenLight);LightoffCommandkitchenLightoff=newLightoffCommand(kitchenLight);remoteControl.setCommand(0,livingRoomLighton,livingRoomLightoff);remoteControl.setCommand(1,kitchenLighton,kitchenLightoff);remoteControl.onButtonWasPushed(0);remoteControl.offButtonWasPushed(0);remoteControl.onButtonWasPushed(1);remoteControl.offButtonWasPushed(1);}}
填空题[说明] 从键盘输入一个字符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 ( (1) ) 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( (2) ) printf( “打不开文件!n”); return; ch = getchar( ); k=0; while( ! feof(fp) ) c = fgete(fp); if (3) s[k++ ] =c; else s[k]= "; printf ( "%dn" ,ff(s, ch) ); k=0; (4) printf( "% dn", ff( s, ch ) );
填空题[说明] 编写一个学生类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" );
{{U}} (1) {{/U}};
{{U}} (2) {{/U}}
g. drawstring( x. getPhone( ), 140,140);
}
int getAge( )
{ return age; }
boolean getsex ( )
{ return sex; }
String getPhone( )
{ return phone; }
String ToString( )
{
{{U}} (3) {{/U}}
}
}
填空题阅读以下说明和Jrdva代码,将应填入(n)处的字句写在对应栏内。[说明]在销售系统中常常需要打印销售票据,有时需要在一般的票据基础上打印脚注。这样就需要动态地添加一些额外的职责。如下展示了Decorator(修饰)模式。SalesOrder对象使用一个SalesTicket对象打印销售票据。图6-1显示了各个类间的关系。以下是Java语言实现,能够正确编译通过。[图6-1][Java代码]//Component.java文件public(1)classComponentabstractpublicvoidprtTicket();//salesTicket.java文件publicclassSalesTicketextendsComponentpublicvoidprtTicket()//SalesticketprintingcodehereSystem.out.printin("SalesTicket");//Decorator.java文件publicabstractclassDecoratorextendsComponentpublicvoidprtTicket()if(myComp!=null)myComp.prtTicket();private(2)myComp;publicDecorator(ComponentmyC)myComp=myC;//Footer.java文件publicclassFooterextendsDecoratorpublicFooter(ComponentmyC)(3);publicvoidprtTicket()(4);prtFooter();publicvoidprtFooter()//placeprintingfootercodehereSystem.out.println("Footer");//salesorder.java文件publicclassSalesOrdervoidprtTicket()ComponentmyST;myST=newFooter((5));//PrintTicketwithfootersasneededmyST.prtTicket();
填空题[说明]一般的树结构常采用孩子-兄弟表示法表示,即用二叉链表作树的存储结构,链表中节点的两个链域分别指向该节点的第一个孩予节点和下一个兄弟节点。例如,图4-1(a)所示的树的孩子-兄弟表示如图4-1fb)所示。函数LevelTraverse()的功能是对给定树进行层序遍历。例如,对图4-1所示的树进行层序遍历时,节点的访问次序为:DBAEFPC。对树进行层序遍历时使用了队列结构,实现队列基本操作的函数原型如下表所示。Bool、Status类型定义如下:typedefenumFALSE=0,TRUE=1Bool;typedefenumOVERFLOW=-2,UNDERFLOW=-1,ERROR=0,OK=1Status;树的二叉链表节点定义如下:typedefstructNodechardata;;structNode*fimrstchiid,*nextbrother;Node,*TreeNode;[函数]StatusLevelTraverse(TreeNoderoot)/*层序遍历树,树采用孩子-兄弟表示法,root是树根节点的指针*/QueuetempQ;TreeNodeptr,brotherptr;if(!root)returnERROR;InitQueue(&tempQ);(1);brotherptr=root->nextbrother;while(brotherptr)EnQueue((2);/*end-while*/while((3))(4);printf("%c\t",ptr->data);if((5))continue;(6);brotherptr=ptr->firstchild->nextbrother;while(brotherptr)EnQueue((7);/*end-while*//*end-while*/returnOK;)/*LevelTraverse*/
填空题[说明] 打印输出10行杨晖三角形。形式如下:杨晖三角形:11 11 2 11 3 3 11 4 6 4 11 5 10 10 5 11 6 15 20 15 6 11 7 21 35 35 21 7 11 8 28 56 70 56 28 8 11 9 36 84 126 126 84 36 9 1 class yanghui public static void main (String args [] ) int i, j; (1) int yanghui [] []; System. out. println( “杨晖三角形:” ); yanghui = new int [ yhleve1] []; for(i =0;i < yanghui, length; i + + ) yanghui[i] = new int [i + 1]; (2) for( (3) ) yanghui [i] [0] = 1; for(j = 1 ;j < yanghui[i], length - 1 ;j + + ) yanghui[i] [j] = yanghui[i - 1] [j - 1] + yanghui[i - 1] [j]; yanghui[i] [yanghui[i]. length - 1 ] = 1; for ( i=0; i < yanghui. length; i + + ) for(j =0;j < yanghui[i]. length; j + + ) (4) System. out. println( );