问答题问题:5.1 (15分)
阅读上述说明和C++代码,将应填入 (n) 处的字句写在答题纸的对应栏内。
问答题
问答题[问题2] 如果在游戏A中付5元,游戏B中付4元,使用风险决策树分析应该选择哪个游戏。
问答题[说明]某机器上需要处理n个作业job1,job2,…,jobn,其中:(1)每个作业jobi(1≤i≤n)的编号为i,jobi有一个收益值P[i]和最后期限值d[i];(2)机器在一个时刻只能处理一个作业,而且每个作业需要一个单位时间进行处理,一旦作业开始就不可中断,每个作业的最后期限值为单位时间的正整数倍;(3)job1~jobn的收益值呈非递增顺序排列,即p[1]≥p[2]≥…≥p[n];(4)如果作业jobi在其期限之内完成,则获得收益p[i];如果在其期限之后完成,则没有收益。为获得较高的收益,采用贪心策略求解在期限之内完成的作业序列。图3-25是基于贪心策略求解该问题的流程图。(1)整型数组J[]有n个存储单元,变量k表示在期限之内完成的作业数,J[1..k]存储所有能够在期限内完成的作业编号,数组J[1..k)里的作业按其最后期限非递减排序,即d[J[1]]≤…≤d[J[k]]。(2)为了便于在数组J中加入作业,增加一个虚拟作业job0,并令d[0]=0,J[0]=0。(3)算法大致思想是:先将作业job1的编号1放入J[1],然后,依次对每个作业jobi(2≤i≤n)进行判定,看其能否插入到数组J中。若能,则将其编号插入到数组J的适当位置,并保证J中作业按其最后期限非递减排列;否则不插入。jobi能插入数组J的充要条件是:jobi和数组J中已有作业均能在其期限之内完成。(4)流程图中的主要变量说明如下。i:循环控制变量,表示作业的编号;k:表示在期限内完成的作业数;r:若jobi能插入数组J,则其在数组J中的位置为r+1;q:循环控制变量,用于移动数组J中的元素。
问答题 阅读以下说明和流程图,回答问题1至问题3,将答案写在对应栏内。
【说明】 下面给出的是某高级公寓管理系统的一套分层数据流图。其功能描述如下所述。
(1)系统随时根据住户送来的入住单更新住户基本信息文件。
(2)每月初系统根据物业管理委员会提供的月附加费(清洁费、保安费等)表和房租调整表,计算每家住户的月租费(包括月附加费),向住户发出交费通知单。住户交费时,系统输入交费凭证,核对后输出数据给住户。
(3)系统定期向物业管理委员会提供住房分配表和交费情况表。
(4)住户因分户或换房,在更新账户基本信息文件的同时,系统应立即对这些住户做月租费计算,以了结分尸或换房前的房租。
假定题中提供的顶层图是正确的,请回答下列问题。
问答题[说明]计算机在处理算术表达式时,首先将其转换为后缀表达式。例如,表达式“46+5*120-37)”的后缀表达式形式为“46512037-*+”。计算后缀表达式时,从左至右扫描后缀表达式:若遇到运算对象,则压入栈中;遇到运算符,则从栈中弹出相关运算对象进行计算,并将运算结果压入栈中。重复以上过程,直到后缀表达式扫描结束。例如,后缀表达式“46512037-*+”的计算过程如下:a.依次将46、5、120、37压入栈中;b.遇到“-”,取出37、120,计算120-37=83,将其压入栈中;c.遇到“*”,取出83、5,计算5×83=415,将其压入栈中;d.遇到“+”,取出415、46,计算46+415=461,将其压入栈中;e.表达式结束,则计算过程完成。函数computing(charexpr[],int*result)的功能是基于栈计算后缀形式的表达式(以串形式存入字符数组expr)的值,并通过参数result返回该值。函数的返回值为-1/0,分别表示表达式有/无错误。假设表达式中仅包含数字、空格和算术运算符号,其中所有项均以空格分隔,且运算符仅包含加(“+”)、减(“-”)、乘(“*”)、除(“\”)。函数computing中所用栈的基本操作的函数原型说明如下。●voidInitStack(STACK*s):初始化栈。●voidPush(STACK*s,inte):将一个整数压栈,栈中元素数目增1。●voidPop(STACK*s):栈顶元素出栈,栈中元素数目减1。●intTop(STACKs):返回非空栈的栈顶元素值,栈中元素数目不变。●intIsEmpty(STACKs):若s是空栈,则返回1;否则返回0。[C函数]
问答题[说明]下面是一个Appkt程序,其功能是从3~100之间(包括3和100)每隔0.5秒显示一个新的数字,如果数字为素数,则显示为灰色,其他为绿色。程序运行结果如图4所示。importjava.awt.*importjava.applet.Applet<appletcode=ex2_7,classwidth=800height=400></applet>publicclassex2_7extendsAppletpublicColorcolor2_7=Color.black;privateihtn2_7=3;publicmyPrimethPrime2_7;publicvoidinit()thPrime2_7=newmyPrime(this);thPrime2_7,start();publicvoidpaint(Graphicsg)g,setColor(color2_7);g.drawString((1),50,50);publicintgetlnt()returnn2_7;publicvoidsetlnt(inti)n2_7=i;classmyPrimeextendsThreadIex2_7obj2_7;myPrime(ex2_7o)this.obj2_7=o;publicbooleanisPrime(intn)booleanbPrime=true;ihti=2;if((2))returnfalse;while(i<n-]i++;returnbPrime;publicvoidrun()inti;for(i=3;(4);i++)if(isPrime(i))obj2_7,color2_7=Color,gray;elseobj2_7,color2_7=Color.green;(5);obj2_7,repaint();trysleep(S00);catch(InterruptedExceptionie)ex2_7,html<HTML><HEAD><TITLE>ex2_7</TITLE></HEAD><BODY><appletcode="ex2_?,class"width=800height=400></applet></BODY></HTML>
问答题阅读以下说明和数据流图,根据要求回答下列问题。[说明]现准备为某银行开发一个信用卡管理系统CCMS,该系统的基本功能如下。1.信用卡申请。非信用卡客户填写信用卡申请表,说明所要申请的信用卡类型及申请者的基本信息,提交CCMS。如果信用卡申请被银行接受,CCMS将记录该客户的基本信息,并发送确认函给该客户,告知客户信用卡的有效期及信贷限额;否则该客户将会收到一封拒绝函。非信用卡客户收到确认函后成为信用卡客户。2.信用卡激活。信用卡客户向CCMS提交激活请求,用信用卡号和密码激活该信用卡。激活操作结束后,CCMS将激活通知发送给客户,告知客户其信用卡是否被成功激活。3.信用卡客户信息管理。信用卡客户的个人信息可以在CCMS中进行在线管理。每位信用卡客户可以在线查询和修改个人信息。4.交易信息查询。信用卡客户使用信用卡进行的每一笔交易都会记录在CCMS中。信用卡客户可以通过CCMS查询并核实其交易信息(包括信用卡交易记录及交易额)。图8-15和图8-16分别给出了该系统的顶层数据流图和0层数据流图的初稿。
问答题请补充函数fun(),该函数的功能是:只保留字符串中的大写字母,删除其他字符,结果仍保存在原来的字符串中,由全局变量m对删除后字符串的长度进行保存。 注意:部分源程序给出如下。 请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。 试题程序: #include<stdio.h> #include<conio.h> int m; void fun(char*s) int i=0,j=0; char *p=s; while(*(p+i)) if(*(p+i)>='A'&&*(p+i)<='Z') (1) ; (2) ; s[j]='/0'; (3) ; main() char str[80]; clrscr(); printf("/nEnter a string:"); gets(str); printf("/n/nThe string is:/%s/n",str); fun(str); printf("/n/nThe string of changing is: /%s/n",str); printf("/n/nThe length of changed strtng is:/%d/n",m);
问答题【说明】现要编写一个画矩形的程序,目前有两个画图程序:DP1和DP2,DP1用函数draw_a_line(x1,y1,x2,y2)画一条直线,DF2则用drawline(x1,x2,y1,y2)画一条直线。当实例画矩形时,确定使用DP1还是DP2。为了适应变化,包括“不同类型的形状”和“不同类型的画图程序”,将抽象部分与实现部分分离,使它们可以独立地变化。这里,“抽象部分”对应“形状”,“实现部分”对应“画图”,与一般的接口(抽象方法)与具体实现不同。这种应用称为Bridge(桥接)模式。图9-7显示了各个类间的关系。这样,系统始终只处理3个对象:Shape对象、Drawing对象、DP1或DP2对象。以下是C++语言实现,能够正确编译通过。【C++代码】classDP1{public:staticvoiddraw_a_line(doublex1,doubley1,doublex2,doubley2){//省略具体实现});classDP2{public:staticvoiddrawline(doublex1,doublex2,doubley1,doubley2){//省略具体实现}};classDrawing{public:{{U}}(1){{/U}}voiddrawLine(doublex1,doubley1,doublex2,doubley2)=0;};classV1Drawing:publicDrawing{public:voiddrawLine(doublex1,doubley1,doublex2,doubley2){DP1::draw_a_line(x1,y1,x2,y2);}};classV2Drawing:publicDrawing{public:voiddrawLine(doublex1,doubley1,doublex2,doubley2){ {{U}}(2){{/U}};}};classShape{private:{{U}}(3){{/U}}_dp;public:Shape(Drawing*dp);virtualvoiddraw()=0;voiddrawLine(doublex1,doubley1,doublex2,doubley2);};Shape::Shape(Drawing*dp){_dp=dp;}voidShape::drawLine(doublex1,doubley1,doublex2,doubley2){//画一条直线 {{U}}(4){{/U}};}classRectangle:publicShape{private:double_x1,_y1,_x2,_y2;public:Rectangle(Drawing*dp,doublex1,doubley1,doublex2,doubley2);voiddraw();};Rectangle::Rectangle(Drawing*dp,doublex1,doubley1,doublex2,doubley2):{{U}}(5){{/U}}{_x1=x1;_y1=y1;_x2=x2;_y2=y2;}voidRectangle::draw(){//省略具体实现}
问答题试题七(共15分)阅读以下说明和C程序,将应填入(n)处的字句写在答题纸的对应栏内。【说明】现有n(n<1000)节火车车厢,顺序编号为1,2,3,...,n,按编号连续依次从A方向的铁轨驶入,从B方向铁轨驶出,一旦车厢进入车站(Station)就不能再回到A方向的铁轨上;一旦车厢驶入B方向铁轨就不能再回到车站,如图7-1所示,其中Station为栈结构,初始为空且最多能停放1000节车厢。
问答题【程序说明】 定义一个多边形结构:struct polygon实现以下内容:(1)建立该结构的链表:create函数是创建链表,每输入一个结点的数据,就把该结点加入到链表当中,它返回创建的链表的头指针。(2)显示链表的各个结点数据:结点数据包括:多边形顶点数、各顶点的纵横坐标、当多边形顶点数为0时,链表创建结束。(3)编写一个函数disp,删除链表中的所有结点。需要注意的是:要先释放结点数据内存,再删除结点,如果在释放结点数据内存单元之前删除结点,则无法找到结点数据内存单元的地址,也就无法释放数据的内存单元。 【程序】 #include "iomanip.h" struct polygon int n; int* x; int *y; polygon * next; ; void Push(polygon * & head,int n) polygon * newNOde=newpolygon; newNOde=newpo,Ygon; newNOde->next= (1) ; newNOde->x=new int [n]; newNOde->y=new int[n]; newNOde->n= (2) ; for(int i=0;i<= (3) ;i++) cout<<“请输入多边形各顶点x、y坐标,坐标值之间用空格分隔:”; cin>>newNOde->x[i]>>newNOde->y[i]; (4) =head; //在head前不需要额外的。 head=newNOde; polygon * create() polygon * head=NULL; polygon * tail; int n; cout<<“请输入多边形顶点的个数(顶点个数为0时结束):”; cin>>n; if(n==0)return (5) ; Push(head, (6) ; tail=head; cout<<“请输入多边形顶点的个数(顶点个数为0时结束):”; cin>>n; while(n!=0) Push(tail->next, (7) ; //在tail->next增加结点 tail =tail->next; //advance tail to point to last node cout<<“请输入多边形顶点的个数(顶点个数为0时结束):”; cin>>n; return head; void disp(polygon * head) int i,No=1; cout<<setw(10)<<"x" <<setw(6)<<"y"<<end1; while(head!=NULL) cout<<“第” <<No<<“结点:” <<end1; for(i=0;i<=head->n-1;i++) cout<<setw(10)<<head- >x[i]<<setw(6)<<head- >y[i]<<endl; (8) ; head= (9) ; //Match while statement void del(polygon * head) polygon * p; while(head!=NULL) p= (10) ; head=head->next; delete p->x; delete P->y; deletep; //Match while statement void main() polygon * head; head=create(); disp(head); del(head);
问答题[说明]某医院的门诊管理系统实现了为患者提供挂号、处方药品收费的功能。具体的需求及设计如下。(1)医院医师具有编号、姓名、科室、职称、出诊类型和出诊费用,其中出诊类型分为专家门诊和普通门诊,与医师职称无关;各个医师可以具有不同的出诊费用,与职称和出诊类型无关。(2)患者首先在门诊挂号处挂号,选择科室和医师,根据选择的医师缴纳挂号费(医师出诊费)。收银员为患者生成挂号单,如下表所示,其中,就诊类型为医师的出诊类型。××医院门诊挂号单收银员:13011 时间:2007年2月1日08:58就诊号姓名科室医师就诊类型挂号费20070205015叶萌内科杨玉明专家门诊5元(3)患者在医师处就诊后,凭借挂号单和医师手写处方到门诊药房交费买药。收银员根据就诊号和医师处方中开列的药品信息,查询药品库(如表1所示),生成门诊处方单(如表2所示)。(4)由于药品价格会发生变化,因此门诊管理系统必须记录处方单上药品的单价。表1药品库药品编码药品名称类型库存货架编号单位规格单价/元12007牛蒡子中药51590B1410G炒0.034011090百部中药36950B1523G片0.0313表2 ××医院门诊处方单时间:2007年2月1日10:31就诊号20070205015病人名称叶萌医师姓名杨玉明金额总计0.65项目总计2收银员21081药品编码药品名称数量单位单价/元金额/元12007牛蒡子10G0.03400.3411090百部10G0.03130.31根据需求阶段收集的信息,设计的实体联系图和关系模式(不完整)如下。[实体联系图](见下图)[关系模式]挂号单(就诊号,病患姓名,医师编号,时间,______)收银员(编号,姓名,级别)医师(编号,姓名,科室,职称,出诊类型,出诊费用)门诊处方(______,收银员,时间)处方明细(就诊号,______)药品库(药品编码,药品名称,______)
问答题【说明】 本题将有向网(带权有向图)定义为类Adjacency WDigraph。类中的数据成员n表示有向网中的顶点数;a为带权邻接矩阵,用于存储有向网中每一对顶点间弧上的权值;c为二维数组,存储有向网中每一对顶点间的最短路径长度;kay为二维数组,存储最短路径,kay[i][j]=k表示顶点i到达顶点j的最短路径必须经过顶点k。类中的主要成员函数有: Input():输入有向网的顶点数、各条弧及权值,建立带权领接矩阵a。若顶点i到顶点j有弧,则a[i][j]取弧上的权值,否则a[i][j]的值取NoEdge。 AllPairs();用弗洛伊德(Floyd)算法求有向网中每一对顶点间的最短路径长度。 OutShortestPath (int i, int j:计算顶点i到顶点j的最短路径。 outputPath(int i, int j):输出顶点i到顶点j的最短路径上的顶点。 Floyd算法的基本思想是递推地产生一个矩阵序列C0,C1,C2,…,Cn,其中C0是已知的带权邻接矩阵,a,Ck(i, j(0≤i,j<)表示从顶点i到顶点j的中间顶点序号不大于k的最短路径长度。如果i到j的路径没有中间顶点,则对于0≤k<n,有Ck(i,j)=C0(i,j)= a[i][j]。递推地产生C1,C2,…,Cn的过程就是逐步将可能是最短路径上的顶点作为路径上的中间顶点进行试探,直到为全部路径都找遍了所有可能成为最短路径上的中间顶点,所有的最短路径也就全部求出,算法就此结束。【C++代码】#include < iostream. h >#define NoEdge 10000// 当两个顶点之间没有边相连时,在邻接矩阵中用NoEdge表示void Make2DArray(int * * class AdjacencyWDigraph {private int n; //有向网中的顶点数目 int* *a; //存储顶点间弧上的权值 int* *c; //存储计算出的最短路径长度 int* * kay; //存储求出的最短路径pubic: int Vertices( )const j return n;} void AllPairs( ); void Input( ); //输入有向网的顶点数、各条弧及权值,建立邻接矩阵a void OutShortestPath(int i, int j); //计算顶点i到j的最短路径(试卷中未列出) ~ AdjacencyWDigraph ( ); //析构函数(试卷中未列出)private: void outputPath(int i, int j);};void AdjacencyWDigraph: :AllPairs( ) int i,j,k,t1,t2,t3; for(i=1;i<=n; k++) for(j=1;j<=n; ++j) {c[i][j]={{U}} (1) {{/U}}; kay[i][j]=0;} for(k=1;k<=n; k++) for(i=1;i<=n; i++){ if(i= =k) continue; t1=c[i][k]; for(j=1;j<=n; j++){ if(j==k||j==i) continue; t2 =c[k] [j]; t3 =c[i] [j]; if( t1 ! = NoEdge kay[i][j]={{U}} (3) {{/U}};} }//for }//forvoid AdjacencyWDigraph:: outputPath(int i, int j){ //输出顶点i到j的最短路径上的顶点 if(i==j) return; if(kay[i] [j]==0)cout<<j <<"; else { outputPath(i,{{U}} (4) {{/U}}); outputPath({{U}} (5) {{/U}});}}void Adjacency WDigraph: :lnput( ){int i,j,u,v,w,E;cout << "输入网中顶点个数:";cin> >n;cout << "输入网中弧的个数:"; cin> >E;Make2DArray (a, n+1, n+1);for(i=1;i<=n; i++) for(j=1; j<=n; j++) a[i][j]=NoEdge;for(i=1;i< =n; i++) a[i][i]=0;Make2DArray(c, n+1, n+1);Make2DArray(kay, n+1, n+1)for(i=1;i<=E; i++){cout<<"输入弧的信息(起点终点权值); "; cin> >u> >v> >w; a[u][v] =w;}}void Make2DArray(int * * x=new int* [rows+1];for(i=0;i<rows+1;i ++ ) x[i]=new int [cols+1];for(i=1;i<= rows; i ++) for(j=1;j<=cols; j++) x[i][j]=0;
问答题【说明】 假定用一个整型数组表示一个长整数,数组的每个元素存储长整数的一位数字,则实际的长整数m表示为: m=a[k]×10k-2+a[k-1]×10k-3+…+a[3]×10+a[2] 其中a[1]保存该长整数的位数,a[0]保存该长整数的符号:0表示正数,1表示负数。 运算时先决定符号,再进行绝对值运算。对于绝对值相减情况,总是绝对值较大的减去绝对值较小的,以避免出现不够减的情况。注:不考虑溢出情况,即数组足够大。 【函数】 int cmp(int *LA, int *LB); /*比较长整数LA与LB的绝对值大小*/ /*若LA绝对值较大返回正值,LA较小返回负值,相等则返回0*/ int ADD(int *LA, int*LB, int *LC) /*计算长整数LA与LB的和,结果存储于LC中*/ /*注意:正数与负数的和相当于正数与负数绝对值的差*/ /*数据有误返回0,正常返回1*/ if(LA==NULL || LB==NULL || LC==NULL)return 0; int *pA, *pB,i,N,carry,flag; flag=LA[0]+LB[0]; switch(flag)/*根据参与运算的两个数的符号进行不同的操作*/ case 0: case 2: LC[0]=LA[0];/*LA与LB同号,结果符号与LA(LB)相同*/ pA=LA; pB=LB; (1) ; break; case 1:/*LA与LB异号*/ /*比较两者的绝对值大小,结果符号与较大者相同*/ flag= (2) ; if(flag>0)/*LA较大*/ LC[0]=LA[0]; pA=LA; pB=LB; else if(flag<0)/*LB较大*/ LC[0]=LB[0]; pA=LB; pB=LA; else/*LA与LB相等*/ LC[0]=0; LC[1]=0; return 1; flag=-1; break; default: return 0; break; /*switch*/ /*绝对值相加减*/ /*注意对于减法pA指向较大数,pB指向较小数,不可能出现不够减的情况*/ (3) ; N=LA[1]>LB[1]?LA[1]:LB[1]; for(i=0;i<N;i++) if(i>=pA[1])/*LA计算完毕*/ carry+=flag *pB[i+2]; else if(i>=pB[1])/*LB计算完毕*/ carry +=pA[i+2]; else carry +=pA[i+2]+flag *pB[i+2]; LC[i+2]=Carry%10; carry /=10; if( (4) )/*需要借位,针对减法*/ LC[i+2]+=10; carry--; /*for*/ if( (5) )/*最高进位,针对加法*/ LC[i+2]=carry; i++; if(LC[i+1]==0)i--;严若最高位为零,针对减法*/ LC[1]=i; return 1; ;/*ADD*/
问答题阅读下列说明和图表,回答问题1到问题3。 [说明] 在多道程序系统中,各个程序之间是并发执行的,共享系统资源。CPU需要在各个运行的程序之间来回地切换,这样的话,要想描述这些多道的并发活动过程就变得很困难。为此,操作系统设计者提出了进程的概念。 进程是具有独立功能的程序关于某个数据集合上的一次动态执行过程,是系统进行资源分配和调度的独立单位。
问答题[问题4](3分)
根据说明,给出数据流“转账请求”、“顾客订单物流查询请求”和“商家订单物流查询请求”的各组成数据项。
问答题阅读以下说明和图,根据要求回答问题1~问题4。[说明]某电子商务公司开办了在线电子商务网站,主要为各注册的商家提供在线商品销售功能。为更好地吸引用户,该公司计划为注册的商家提供商品(Commodity)促销(Promotion)功能。商品的分类(Category)不同,促销的方式和内容也会有所不同。注册商家可发布促销信息。商家首先要在自己所销售商品的分类中,选择促销涉及的某一具体分类,然后选出该分类的一个或多个商品(一种商品仅属于一种分类),接着制定出一个比较优惠的折扣政策和促销活动的优惠时间,最后由系统生成促销信息并将该促销信息公布在网站上。商家发布促销信息后,网站的注册用户便可通过网站购买促销商品。用户可选择参与某一个促销(Promotion)活动,并选择具体的促销商品(Commodity),输入购买数量等购买信息。系统生成相应的一份促销订单(POrder)。只要用户在优惠活动的时间范围内,通过网站提供的在线支付系统,确认在线支付该促销订单(即完成支付),就可以优惠的价格完成商品的购买活动,否则该促销订单失效。系统采用面向对象方法开发,系统中的类及类之间的关系用UML类图表示,如图6-18所示是该系统类图中的一部分;系统的动态行为采用UML序列图表示,如图6-19所示是发布促销的序列图。
问答题创建S表时,SNo使用CHAR(5)并且唯一,SName使用CHAR(30),Status使用CHAR(8),City使用CHAR(20)。请在下列用于创建表S的SQL语句空缺处填入正确的内容。
CREATE TABLE S(SNo CHAR(5),
SName CHAR(30),
Status CHAR(8),
City CHAR(20),
______;
问答题【说明】某考务处理系统主要功能是考生管理和成绩管理:1.对考生送来的报名表进行检查。2.对合格的报名表编好准考证号码后将准考证送给考生,将汇总后的考生名单送给阅卷站。3.对阅卷站送来的成绩表进行检查,并根据考试中心指定的合格标准审定合格者。4.填写考生通知单(内容包含该考生的准考证号、姓名、各课程成绩及最终合格/不合格标志),送给考生。5.根据考生信息及考试成绩,按地区、年龄、文化程度和职业进行成绩分类统计及试题难度分析,产生统计分析表。考务处理系统的顶层图如图1-1所示,第0层图如图1—2所示,加工2子图如图1-3所示。【数据流图】1.【问题1】指出哪张图的哪些文件可以不必画出。