问答题假定SP表存储供应情况,如下的SQL语句是用于查询“产地为‘Beijing’、零件号为‘P101’的零件的所供应的总数(包括所有供应商)”的不完整语句,请在空缺处填入正确的内容。
SELECT SUM(Qty) FROM SP WHERE
PNo=”P101’ {{U}} (1) {{/U}}PNo{{U}} (2) {{/U}}
(SELECT PNo FROM{{U}} (3) {{/U}}
WHERE city="Beijing") {{U}} (4)
{{/U}}PNo;
问答题请补充函数fun(),该函数的功能是将字符串tt中的大写字母都改为对应的小写字母,其他字符不变。例如,若输入“Are you come from Sichuan?”,则输入“are you come from si- chuan?”。 注意:部分源程序给出如下。 请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。 试题程序: #include<stdio.h> #include<stnng.h> #include<conlo.h> char *fun(char tt[]) int i; for(i=0; tt[i];i++) if((tt[i]>='A')&&( (1) )) (2) ; return( (3) ); main() charn[81]; printf("/nPlease enter a string:"); gets(tt); printf("/nThe result string is:/n%s",fun(tt));
问答题阅读以下说明和流程图,回答问题1和问题2,将答案写在答卷的对应栏内。【说明】本流程图实现从比赛成绩文件生成赛车成绩一览表。某国际高等级赛车比赛使用如图所示的成绩处理流程,比赛成绩记录在成绩文件F0中,其记录格式如下:赛车号车手姓名第1赛段成绩第2赛段成绩…第n赛段成绩由该成绩文件生成如下所示的车手成绩一览表。生成的车手成绩一览表按总名次(系统会根据总成绩和分段成绩按规定方式计算得出总名次,不会有相同名次存在)降序排列。表中第n赛段的名次是该车手相应赛段在全部车手中的名次,成绩是根据规定方式计算而得的成绩,总名次是总成绩在所有车手中排名的名次。赛车号车手姓名赛段1…赛段n全程成绩名次……成绩名次总成绩总名次 流程图中的顺序文件F0是车手成绩文件,F0文件经处理l处理后产生顺序文件F,然后经处理2至处理4对文件F进行处理和更新,在处理5中,仅仅对文件F的记录进行车手成绩一览表的编排输出,不进行排序和增加名次等处理。
问答题问题:1.4 (5分)
图1-2所示的数据流图中,功能(6)发送通知包含创建通知并发送给学生或老师。请分解图1-2中加工(6),将分解出的加工和数据流填入答题纸的对应栏内。(注:数据流的起点和终点须使用加工的名称描述)
问答题【问题2】
经改写后的文法是否是LL(1)的?指出它的预测分析表中(1)~(3)处的内容。
问答题[问题1]
在需求分析阶段,采用UML的用例图(use case diagram)描述系统功能需求,如图4-4所示。指出图中的A,B,C和D分别是哪个用例?
问答题函数intToplogical(LinkedWDigraphG)的功能是对图G中的顶点进行拓扑排序,并返回关键路径的长度。其中图G表示一个具有n个顶点的AOE网,图中顶点从1~n依次编号,图G的存储结构采用邻接表表示,其数据类型定义如下:typedefstructGnode{/*邻接表的表结点类型*/intadjvex;/*邻接顶点编号*/intweight;/*弧上的权值*/structGnode*nextarc;/*指示下一个弧的结点*/}Gnode;typedefstructAdjlist{/*邻接表的头结点类型*/charvdata;/*顶点的数据信息*/structGnode*Firstadj;/*指向邻接表的第一个表结点*/}Adjulist;typedefstructLinkedWDigraph{/*图的类型*/intn,e;/*图中顶点个数和边数*/structAdjlist*head;/*指向图中第一个顶点的邻接表的头结点*/}LinkedWDigraph;例如,某AOE网如图1所示,其邻接表存储结构如图2所示。图1AOE网图2AOE网邻接表存储结构[函数代码]intToplogical(LinkedWDigraphG){Gnode*p;intj,w,top=0;int*Stack,*ve,*indegree;ve=(int*)malloc((G.n+1)*sizeof(int));indegree=(int*)malloc((G.n+1)*sizeof(int));/*存储网中各项点的入度*/stack=(int*)malloc((G.n+1)*sizeof(int));/*存储入度为0的顶点的编号*/if(!ve||!indegree||!Stack)exit(0);for(j=1;j<=G.n;j++){ve[j]=0;indegree[j]=0;}/*for*/for(j=1;j<=G.n;j++){/*求网中各项点的入度*/p=G.head[j].Firstadj;while(p){{{U}}{{U}}{{/U}}{{/U}};p=p->nextarc;}/*while*/}/*for*/for(j=1;j<=G.n;j++)/*求网中入度为0的顶点并保存其编号*/if(!indegree[j])Stack[++top]=j;while(top>0){w={{U}}{{U}}{{/U}}{{/U}};printf("%c",G.head[w].vdata);p=G.head[w].Firstadj;while(p){{{U}}{{U}}{{/U}}{{/U}};if(!indegree[p->adjvex])Stack[++top]=p->adjvex;if({{U}}{{U}}{{/U}}{{/U}})ve[p->adjvex]=ve[w]+p->weight;p=p->nextarc;}/*while*/}/*while*/return{{U}}{{U}}{{/U}}{{/U}};}/*Toplogical*/
问答题试题六(15分,每空3分)阅读以下说明和C++代码,将应填入(n)处的字句写在答题纸的对应栏内。[说明]通常情况下,用户可以对应用系统进行配置,并将配置信息保存在配置文件中。应用系统在启动时首先将配置文件加载到内存中,这些内存配置信息应该有且仅有一份。下面的代码应用了单身模式(Singleton)以保证Configure类只能有一个实例。这样,Configure类的使用者无法定义该类的多个实例,否则会产生编译错误。
问答题【说明】下面是一个Applet程序,其功能是通过一个按钮控制一个窗口的创建,显示与隐藏,并且以按钮文字作为提示,可以随着窗口的状态改变,即如果窗口出现,则按钮文字为"HidemyFrm",提示用户点击按钮,则隐藏窗口,反之亦然。请将横线处语句补充完整。程序运行结果如图5所示:importjava.awt.*;importjava.applet.*;<appletcode="ex8_7.class"width=800height=400></applet>*/publicclassex8_7extendsAppletprivateFramefrm;privateButtonshowBtn;publicvoidinit()showBtn=newButton("ShowFrame");(1);publicbooleanaction(Evente,Objecto)if(e.target==showBtn)if((2))(3);frm.dispose()(4)showBtn,setLabel("ShowmyFrm");elsefrm=newFrame("myFrm");frm.resize(200,150);frm.setBackground(Color.gray);(5);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>
问答题【说明】本程序ExceptionTester实现功能:读入两个整数,第1个数除以第2个数,之后输出。若第2个数为0,则自动进行异常处理。 程序如下: (1) ; public class ExceptionTester public static void main(String args[]) int result; int number[]=new int[2]; boolean valid; for(int i=0;i<2;i++) valid= (2) ; while(!valid) try System.out.println("Enter number"+(i+1)); number[i]=Integer.valueOf(Keyboard.getString()).intValue(); valid=true; catch(NumberFormatExceptione) System.out.println("Invalid integer entered.Please try again."); by result=number[0]/number[1]; System.out.print(number[0]+"/"+number[1]+"="+result); catch( (3) ) System.out.println("Second number is 0,cannot do division!"); 其中,Keyboard类的声明为: impon java.io.*; public class Keyboard static BufferedReader inputStream=new (4) (new InputStreamReader(System.in)); public static int getInteger() try return(Integer,valueOf(inputStream.readLlne().trim()).intValue()); catch(Exceptione) e.printStackTrace(); return 0; public (5) by return(inputStream.readLine()); catch(IOExceptione) return "0";
问答题【说明】栈(Stack)结构是计算机语言实现中的一种重要数据结构。对于任意栈,进行插入和删除操作的一端称为栈顶(StockTop),而另一端称为栈底(StockBottom)。栈的基本操作包括:创建栈(NewStack)、判断栈是否为空(IsEmpty)、判断栈是否已满(IsFull)、获取栈顶数据(Top)、压栈/入栈(Push)、弹栈/出栈(Pop)。当设计栈的存储结构时,可以采取多种方式。其中,采用链式存储结构实现的栈中各数据项不必连续存储(如下图所示)。以下C代码采用链式存储结构实现一个整数栈操作。【C代码】typedefstructList{intdata;//栈数据structList*next;//上次入栈的数据地址}List;typedefstructStack{List*pTop;//当前栈顶指针}Stack;Stack*NewStack(){return(Stack*)calloc(1/sizeof(Stack));}intIsEmpty(Stack*S){//判断栈S是否为空栈if({{U}}(1){{/U}})return1;return0;}intTop(Stack*s){//获取栈顶数据。若栈为空,则返回机器可表示的最小整数if(IsEmpty(S))returnINT_MIN;return{{U}}(2){{/U}};}voidPush(Stack*S,inttheData){//将数据theData压栈List*newNode;newNode=(List*)calloc(1/sizeof(List));newNode->data=theData;newNode->next=S->pTop;S->pTop={{U}}(3){{/U}};}voidPop(Stack*S){//弹栈List*lastTop;if(IsEmpty(S))return;lastTop=S->pTop;S->pTop={{U}}(4){{/U}};free(lastTop);}#defineMD(a)a<<2intmain(){inti;Stack*myStack;myStack=NewStack();Push(myStack,MD(1));Push(myStack,MD(2));Pop(myStack);Push(myStack,MD(3)+1);while(!IsEmpty(myStack)){printf("%d",Top(myStack));Pop(myStack);}return0;}以上程序运行时的输出结果为:{{U}}(5){{/U}}
问答题【程序5说明】 著名的四色定理指出任何平面区域图均可用四种颜色着色,使相邻区域着不同的颜色。本程序对给定的区域图找出所有可能的不超过四种颜色的着色方案。 程序中用1~4表示四种颜色。要着色的N个区域用0~N-1编号,区域相邻关系用 adj[][]矩阵表示,矩阵的i行j列的元素为1,表示区域i与区域j相邻;矩阵的i行j列的元素为0,表示区域i与区域j不相邻。数组color[]用来存储着色结果,color[i]的值为区域i所着颜色。 【程序5】 #include<stdio.h> #define N 10 void output(int color[])/*输出一种着色方案*/ int i; for(i=0;i<N;i++) printf("%4d",color[i]); printf("/n"); int back (int * ip,int color[])/*回溯*/ int c=4; while(c==4) if(*ip<=0)return 0; --(*ip); c= (1) ; color[*ip]=-1; return c; /*检查区域i,对c种颜色的可用性*/ int colorOk(int i,int c,int [][N],int color[] int j; for(j=0;j<i;j++) if( (2) ) return 0; return 1; /*为区域i选一种可着的颜色*/ int select (int i,int c,int adj[][N],int color[]) int k; for(k=c;k<=4;k++) if(colorOK( (3) )) return k; return 0; int coloring(int adj[][N])/*寻找各种着色方案*/ int color[N],i,c,cnt; for(i=0;i<N;i++)color[i] =-1; i=c=0;cnt=0; while(1) if((c= (4) )==0) c=back(&i,color); if(c==0)return cnt; else (5) ;i++; if(i==N) output(color); ++cnt; c=back(&i,color); else c=0; void main() int adj[N][N]= 0,1,0,1,1,1,1,1,1,1, 1,0,1,1,0,1,1,1,1,0, 0,1,0,1,0,1,1,0,1,1, 1,1,1,0,1,1,0,0,1,1, 1,0,0,1,0,1,0,0,0,0, 1,1,1,1,1,0,1,0,0,1, 1,1,1,0,0,1,0,0,1,0, 1,1,0,0,0,0,0,0,1,1, 1,1,1,1,0,0,1,1,0,1, 1,0,1,1,0,1,0,1,1,0 ; printf("共有%d组解./n",coloring(adj));
问答题[说明]
以下JAVA程序设计了类CSet,使用同一个名称(set)的method来传入数据。仔细阅读[代码6-1)、[代码6-2]和[代码6-3]和相关注释,将程序补充完整。
[代码6-1]
import java.io.*;
class CSet
{
private int width;
private int height;
(1)
public void set(String color)
{
col=color; //(a)可输入长方形的颜色
}
public void set (iht w, int h)
{
width=w; //(b)可输入长方形的宽和高
height=h;
}
public void set (String color, int w, int h)
{
col=color; //(c)可输入长方形的颜色、宽和高
width=w;
height=h;
}
public void show ( )
{
System.out.println ("n/长方形的颜色为: "+col);
System.out.println ("n/长方形宽为: "+width+" 长方形高为: "+height");
}
}
[代码6-2]
public class hw8_3
{
public static void main (String args[]) throws IOException
{
intw, h; //声明宽、长变量,并给予赋值
String color, k;
CSet rect1;
rect1=new CSet ( );
System.out.print ("/n请输入颜色:: ");
color=input ( );
System.out.print ("请输入宽度:: ");
k=input ( );
w=Integer.parseInt (k);
System.out.print ("请输入高度:: ");
k=input( );
h=Integer.parseInt (k);
(2) //设置长方形的颜色
(3) //设置长方形的宽、高
rectl.show ( );
(4) //设置长方形的颜色和宽、高
rectl.show ( );
}
[代码6-3]
public static String input( ) throws IOException//输入函数
{
String str;
BufferedReader buf;
(5)
str=buf.readLine ( )
return str;
}
}
问答题[说明](1)对给定的字符集合及相应的权值,采用哈夫曼算法构造最优二叉树,并用结构数组存储最优二叉树。例如,给定字符集合a,b,c,d)及其权值2、7、4、5,可构造如图3-26所示的最优二叉树,以及相应的结构数组Ht(如表3-12所示,其中数组元素Ht[0]不用)。表3-12结构数组Ht数组下标chweightparentlchildrchild1a25002b77003c45004d5600566136180267结构数组Ht的类型定义如下:(2)用“0”或“1”标识最优二叉树中分支的规则是:从一个结点进入其左(右)孩子结点,就用“0”(或“1”)标识该分支(示例见图3-26)。(3)若用上述规则标识最优二叉树的每条分支后,从根结点开始到叶子结点为止,按经过分支的次序将相应标识依次排列,可得到由“0”、“1”组成的一个序列,称此序列为该叶子结点的前缀编码。例如图3-26所示的叶子结点a、b、c、d的前缀编码分别是110、0、111、10。[函数说明1]函数voidLeafCode(introot,intn)的功能是:采用非递归方法,遍历最优二叉树的全部叶子结点,为所有的叶子结点构造前缀编码。其中,形参root为最优二叉树的根结点下标;形参n为叶子结点个数。在函数voidLeafCode(introot,intn)构造过程中,将Ht[p].weight域用做被遍历结点的遍历状态标志。[函数4.1][函数说明2]函数voidDecode(char(作图)buff,introot)的功能是:将前缀编码序列翻译成叶子结点的字符序列,并输出。其中,形参root为最优二叉树的根结点下标;形参buff指向前缀编码序列。[函数4.2]
问答题阅读下列说明和流程图2-3,将应填入 (n) 的字句写在答题纸的对应栏内。 【说明】 下面的流程图描述了对8位二进制整数求补的算法。 该算法的计算过程如下:从二进制数的低位(最右位)开始,依次向高位逐位查看,直到首次遇到“1”时,停止查看。然后,对该“1”位左面的更高位(如果有的话),逐位求反,所得的结果就是对原二进制数求补的结果。 例如:对二进制整数10101000求补的结果是01011000。 设8位二进制整数中的各位,从低位到高位,依次存放在整型数组BIT的B1T[1]~BIT[8]中。例如,二进制整数10101000存放在数组BIT后,就有BIT[1]=0,BIT[2]=0,…,BIT[7] =0,BIT[8]=1。若流程图中存在空操作,则用NOP表示。 【流程图】 注:流程图中 (1) 处按“循环变量名:循环初值,增量,循环终值”格式描述。
问答题【说明】 某城市电信局受理了许多用户申请在指定电话上开设长话业务。长话包括国内长途和国际长途。电信局保存了长话用户档案和长话业务档案。 长话用户档案的记录格式为 用户编码 用户名 用户地址 长话业务档案的记录格式为 电话号码 用户编码 国内长途许可标志 国际长途许可标志 电话用户每次通话的计费数据都自动地记录在电信局程控交换机的磁带上。计费数据的记录格式为 日期 电话号码 受话号码 通话开始时间 通话持续时间 该电信局为了用计算机自动处理长话收费以提高工作效率,开发了长话计费管理系统。该系统每月能为每个长话用户打印出长话缴费通知单。长话缴费通知单的记录格式为 用户名 用户地址 国内长途话费 国际长途话费 话费总额 流程图描述了该系统的数据处理过程。 该系统每天对原始的计费数据进行分类排序,并确定每个通话记录的通话类型(市话/国内长途/国际长途),再根据话费单价文件算出每个通话记录应收取的话费。因此,形成的日计费文件中,增加了两个数据项:通话类型和话费。该系统每日对日计费文件进行累计 (按电话号码和通话类型,对该类型的话费进行累计,得到该电话号码该通话类型的当月话费总计),形成月计费文件。 月计费文件经过长话出账处理形成长话账单文件。长话账单文件的记录格式为 月份 用户编码 电话号码 国内长途话费 国际长途话费 话费总额 长话账单文件经过处理5和处理6的处理后,就可以形成长话缴费通知单。1. 【问题1】 (1)请说明流程图1中的文件F0、F1分别是哪个文件。 (2)处理1和处理5分别按照哪些数据项进行分类?
问答题[说明]
以下程序为类类型的变量应用实例,通过异常处理检验了类CCircle的变量的合法性,即参数半径应为非负值。仔细阅读代码和相关注释,将程序补充完整。
[JAVA代码]
//定义自己的异常类
class CCircleException extends Exception
{
}
// 定义类 CCircle
class CCircle
{
private double radius;
public void setRadius ( double r ){{U}} (1) {{/U}}
{
if ( r<0 ) {
{{U}} (2) {{/U}}
}
else
{{U}} (3) {{/U}}
}
Public void show ( ) {
System. out. println ( "area="+3.14*radius*radius );
}
}
public class ciusample
{
public static void main ( String args[] )
{
CCircle cir=new CCircle( );
{{U}} (4) {{/U}}{
cir. setRadius ( -2.0 )
}
{{U}} (5) {{/U}}
{
System. out. println ( e+" throwed" ) ;
}
cir. show( ) ;
}
}
问答题[说明]栈(Stack)结构是计算机语言实现中的一种重要数据结构。对于任意栈,进行插入和删除操作的一端称为栈顶(StackTop),而另一端称为栈底(StackBottom)。栈的基本操作包括创建栈(NewStack)、判断栈是否为空(IsEmpty)、判断栈是否已满(IsFull)、获取栈顶数据(Top)、压栈/入栈(Push)、弹栈/出栈(Pop)。当设计栈的存储结构时,可以采取多种方式。其中,采用链式存储结构实现的栈中各数据项不必连续存储,如下图所示。以下C代码采用链式存储结构实现一个整数栈操作。[C程序]typedefstructList{intdata;//栈数据structList*next;//上次入栈的数据地址}LiSt;typedefstructStack{List*pTop;//当前栈顶指针}Stack;Stack*NewStack(){return(Stack*)calloc(1,sizeof(Stack));)intIsEmpty(Stack*S)//判断栈S是否为空栈{If(______)return1;return0;}intTop(Stack*S)//获取栈顶数据。若栈为空,则返回机器可表示的最小整数{if(IsEmpty(S))returnINT_MIN;return______;}VoidPush(Stack*S,inttheData)//将数据theData压栈{LiSt*newNode;newNode=(List*)calloc(1,Sizeof(List));newNode→data=theData;newNode→next=S→pTop;S→Top=______;}VoidPop(Stack*S)//弹栈{List*lastTop;If(IsEmpty(S))return;lastTop=S→pTop;S→pTop=______;Free(lastTop);}#defineMD(a)a<<2intmain(){inti;Stack*myStack;myStack=NewStack();Push(myStack,MD(1));PuSh(myStack,MD(2));Pop(myStack);Push(myStack,MD(3)+1);while(!IsEmpty(myStack)){printf("%d",Top(myStack));Pop(myStack);}return();}以上程序运行时的输出结果为______。
问答题[说明] 操作系统中,死锁(Deadlock)是指多个进程在运行的过程中因争夺资源而造成的一种僵局。当进程处于这种僵持状态时,若无外力作用,它们都将无法再向前推进。 面对死锁问题有两个解决方案:预防死锁和避免死锁。 预防死锁是一种较简单和直观的事先预防方法。该方法是通过设置某些限制条件,去破坏产生死锁的四个必要条件中的一个或多个,以此来预防死锁的发生。预防死锁由于较易实现,已被广泛应用,但由于所施加的限制条件往往太严格,可能会导致系统资源利用率和系统吞吐量的降低。 避免死锁同样是属于事先预防的策略,但它无须事先采取各种限制措施去破坏产生死锁的四个必要条件,而是在资源分配过程中,用某种方法去防止系统进入不安全状态,从而避免发生死锁。 银行家算法(Banker's algorithm)是Dijkstra于1965年提出的一个经典的避免死锁的算法。形象地描述银行发放贷款不能使有限可用资金匮乏而导致整个银行无法运转的思路,也就是说每次请求贷款,银行要考虑他能否凭着贷款完成项目,并还清贷款使银行运转正常。令Request(i)是进程P(i)请求向量,如果Request(i)[j]=k则进程P(i)希望请求j类资源k个。具体算法步骤如下: (1)如果Request(i)>Need(i)则出错(请求量超过申报的最大量),否则转到(2); (2)如果Request(i)>Available则P(i)等待,否则转(3); (3)系统对P(i)所请求的资源实施试探分配,并更改数据结构中的数值; (4) Available = Available - Request(i): Allocation(i) = Allocation(i) + Request(i); Need(i) = Need(i) - Request(i); (5)执行安全性算法,如果是安全的,则承认试分配,否则废除试分配,让进程P(i)继续等待。 所谓系统是安全的,是指系统中的所有进程能够按照某一种次序分配资源,并且依次运行完成,这种进程序P1, P2, …, Pn就是安全序列。如果存在这样一个安全序列,则系统是安全的;如果系统不存在这样一个安全序列,则系统是不安全的。
问答题[说明]某旅馆共有N间客房。每间客房的房间号、房间等级、床位数及占用状态分别存放在数组ROOM、RANK、NBED和STATUS中。房间等级值为1、2或3。房间的状态值为0(空闲)或1(占用)。客房是以房间(不是床位)为单位出租的。本算法根据几个散客的要求预订一间空房。程序的输入为人数M、房间等级要求R(R=0表示任意等级都可以)。程序的输出为所有可供选择的房间号。
