软件水平考试(中级)软件设计师下午(应用技术)试题模拟试卷1(共162题)_第1页
软件水平考试(中级)软件设计师下午(应用技术)试题模拟试卷1(共162题)_第2页
软件水平考试(中级)软件设计师下午(应用技术)试题模拟试卷1(共162题)_第3页
软件水平考试(中级)软件设计师下午(应用技术)试题模拟试卷1(共162题)_第4页
软件水平考试(中级)软件设计师下午(应用技术)试题模拟试卷1(共162题)_第5页
已阅读5页,还剩99页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

软件水平考试(中级)软件设计师下午(应用技术)试题模拟试卷1(共9套)(共162题)软件水平考试(中级)软件设计师下午(应用技术)试题模拟试卷第1套一、必答题(本题共13题,每题1.0分,共13分。)【说明】某直达列车车票预售系统接受顾客的订票、取票和售票处工作人员的查询业务。1.顾客为了提前订票,可向系统提供个人信息及其预订购的车次及日期,系统根据个人信息是否齐全以及车次是否正确来判断订票单是否合格。对于合格的订票单系统,如果相应的车次有剩余票,则记录顾客个人信息以及订票信息,并向顾客提供取票单。2.到了可以取票的时间,顾客向系统提供取票单,在检查单据合格的情况下,系统向顾客提供火车票。3.售票处的工作人员可以利用系统查询各车次车票的售票情况。该直达列车车票预售系统的分层数据流图中部分数据流和文件的组成如下:文件:火车时刻表=车次+开车时间+到站时间+起始站+终点站+上铺票价+下铺票价订票信息表=车次+车票日期+旅客身份证号+座位号+是否领票旅客信息表=旅客身份证号+姓名+性别+联系电话座位表=车次+座位号数据流:订票单=旅客姓名+性别+身份证号+联系电话+车次十车票日期车票=车次+起始站生终点站+开车日期+开车时间+座位号+票价假定顶层图是正确的,“火车时刻表”和“座位表”文件已由其他系统生成。1、指出哪张图的哪个文件可以不必画出。标准答案:0层图中文件“座位表”是局部数据文件,不必画出。知识点解析:“不必画出”是指在数据流图中,只画流程图中各加工之间的公共数据文件,隐藏某加工的局部数据文件,这个规则只是为了使整个数据流图的层次结构更科学、更清晰,不过画出“不必画出的数据文件”对数据流图不会造成理解错误。在0层图中有文件“火车时刻表”、“订票信息表”、“旅客信息表”和“座位表”,其中“座位表”是加工1“顾客订票”的局部数据文件,所以不必画出。2、指出数据流图4-1和数据流图4-2中错误的数据流。标准答案:(1)数据流图4-1中从加工“1.1检查订票单”到文件“列车时刻表”的数据流。(2)数据流图4-1中从文件“旅客信息表”到加工“1.3填写取票单”的数据流。(3)数据流图4-2中从加工“2.1枪查取票单”到文件“旅客信息表”的数据流。知识点解析:本题是找出错误的数据流。解决这种问题的关键是父图与子图的平衡,即子图的输入输出数据流与父图相应的加工的输入输出数据必须一致。从0层图中可以看到对于加工1“顾客订票”,有到文件“旅客信息表”的输出流,从文件“列车时刻表”得到的输入流,以及与文件“订票信息表”的输入输出流。而加工l子图中只有从加工1.1到文件“列车时刻表”的数据流,与父图不一致,因此是错误的,应该为从文件“列车时刻表”到加工1.1的数据流。同理,从文件“旅客信息表”到加工1.3的数据流也与父图不一致,应该改为从加工1.3到文件“旅客信息表”的数据流。0层图中加工2“顾客取票”中存在从文件“旅客信息表”到加工2的数据流,而加工2子图中从加上2.1到文件“旅客信息表”的数据流是与0层图相悖的,因此也是错误的。应该改成从文件“旅客信息表”到加工2.1“检查信息表”的数据流。3、根据题中说明和数据流图分析,“查询处理”是否可以查询出剩余票的信息?为什么?标准答案:不可以。从0层图中可以看出,加工3“查询处理”仅有从文件“订票信息表”的输入流,而从说明中的文件组成可以看出,订票信息表仅记录了旅客订票和取票的信息,不能知道总的座位数,因此加工3能查询已订购和已售出的车票情况,而不能查询出剩余票的情况。知识点解析:每个加工的功能要从提供给该加工的文件的信息量决定。从0层图中可以看出,加工3“查询处理”仅有从文件“订票信息表”的输入流,而从说明中的文件组成可以看出,订票信息表仅记录了旅客订票和取票的信息,不能知道总的座位数,因此加上3能查询己订购和已售出的车票情况,而不能查询出剩余票的情况。要向查询出剩余票的情况,需要利用文件“座位表”来了解车次座位的总的情况,再利用文件“订票信息表”的已订和已售车票信息共同得出剩余票信息。【算法说明】下面是一段插入排序的程序,将R[k+1]插入到R[1...k]的适当位置。R[0]=R[k+1];j=k;while(R[j]>R[0]){R[j+1]=R[j];j--;}R[j+1]=R[0];【测试用例设计】(while循环次数为0、1、2次)4、指出算法的流程图中(1)~(3)处的内容。标准答案:(1)F(2)R[j+1]=R[0](3)T知识点解析:暂无解析5、指出测试用例设计中(4)~(9)处的内容。标准答案:(4)①③(5)①②②③(6)①②②③(7)><(8)1(9)3知识点解析:本题考查用路径覆盖方法为算法设计足够的测试用例,属于基本概念的送分题。这类题拿分的关键是考生平时对于理论的理解和临场的细心。对文法G[S]:S→a|∧|(T);T→T,S|S:回答问题1~问题3。6、对文法G进行改写,然后对每个非终结符写出不带回溯的递归子程序。标准答案:改写文法为:(0)S→d(1)S→∧(2)S→(T)(3)T→SN(4)N→,SN(5)N→ε非终结符FIRST集FOLLOW集S{a,∧,(}{#,,,}}T{a,∧,(}{}}…N{,,ε}.{}}…对左部为N的产生式可知:FIRST(→,SN);{,}FIRST(→ε):{ε}FOLLOW(N)={}}知识点解析:暂无解析7、经改写后的文法是否是LL(1)的?指出它的预测分析表中(1)~(3)处的内容。标准答案:文法是LL(1)的。(1)→SN(2)→(T)(3)→C知识点解析:暂无解析8、说明输入串(a,a)#是否为G的句子。标准答案:输入串(a,a)#是文法的句子。知识点解析:对于文法S→d|^|(T)T→T,S|S由于SELECT(N→,SN)∩SELECT(N→ε)={,}∩{}}=,所以文法是。LL(1)的。也可由预测分析表中无多重入口判定文法是LL(1)的。(3)对输入串(a,a)#的分析过程为:栈当前输入符剩余输入符所用产生式(STACK)(CURCHAR)(1NOUTSTRING)(OPERATION)#S(a,a)#.....#)T((a,a)#...S→(T)#)Ta,a)#....#)NSa,a)#...T→SN#)Naa,a)..S→a#)N,a)#....#)NS,,a)#...N→,SN#)NSa)#....#)Naa)#...S→a#)N)#....#))#...N→ε##可见输入串(a,a)#是文法的句子。阅读下列程序和控制流图,将应填入(n)的字句写在答题纸的对应栏内。【程序】下面是一段求最大值的程序,其中datalist是数据表,n是datalist的长度+intGetMax(intn,intdatalist[]){intk=0;for(intj=1;j<n;j++)if(datalist[j]>datalist[k])k=j;retumk;9、该程序的控制流图中A~E分别是什么?标准答案:(1)j<n(2)returnk;(3)datalist[j]>datalist[k](4)k=j;(5)j++;知识点解析:暂无解析10、计算控制流图的McCabe环路复杂性。标准答案:McCabe环路复杂性为3。知识点解析:暂无解析11、用基本路径覆盖法给出测试路径。标准答案:测试路径:Path1:①→③Path2:①→②→④→⑥→...Path3:①→②→⑤→⑥→…知识点解析:暂无解析12、为各测试路径设计测试用例。标准答案:测试用例:Path1:取n=1,datalist[0]=1,预期结果:k=0Path2:取n=2,datalist[0]=1,datalist[1]=0,预期结果:k=OPath3:取n=2,datalist[0]=0,datalist[1]=1,预期结果:k=1知识点解析:本题考查对软件测试概念和过程的理解,结合具体实例运用各种测试技术,学会测试用例设计、软件测试与程序调试的方法。软件测试是为了发现错误而执行程序的过程,其目的在于以最少的时间和人力系统地找出软件中潜在的各种错误和缺陷。根据2004新大纲和最近两次软件设计师考试的真题,不难发现各类系统分析理论的实例化考核比例逐渐升温,只要读者平时对这部分知识的实例多分析、多思考,这部分分数其实不难拿到。13、阅读下列程序说明和C程序,将应填入(n)处的字句写在答卷纸的对应栏内。【程序说明】该程序定义了两个子函数strsort和strmerge。它们分别实现了将一个字符串按字母顺序排序和将两个字符串合并排序,并删去相同字符。在主函数里,先输入两个字符串s1和s2,然后调用strsort函数对它们分别排序,然后调用strmerge函数将s1和s2合并,将合并后的字符串赋给字符串s3,最后输出字符串s3。【程序】#include<stdio.h>voidstrmerge(char*a,char*b,char*c)//将字符串a,b合并到字符串c{chart,*w;W=c;while((1)){//找到字符串a,b当前字符中较小的字符if(*a<*b){t=-*a,(2)}elseif(*a>*b){t=*b;(3)}else//字符串a,b当前字符相等{t=-*a;a-H-;b-H-;}if((4))//开始,可直接赋值*w=t;elseif(t!=*w)//如果a,b中较小的当前字符与c中当前字符不相等,才赋值(5)}if(*a!=’\O’)//如果字符串a还没有结束,则将a的剩余部分赋给cwhile(*a!=’\0’)if(*a!=*w){*(++w)=*a;a++;}else(6)if(*b!=",’\0’)//如果字符串b还没有结束,则将b的剩余部分赋给cwhile(*b!=’\0’)if(*b!=*w){*(++w)=*b;b++;}elseb++;(7)}voidstrsort(char*s)//将字符串s中的字符排序{inti,j,n;chart,*w;w=s;for(n=O;*w!=’\O’;n++)//得到字符串长度nw++;for(i=O;i<n-1;i++)//对字符串s进行排序,按字母先后顺序forO=i+1;j<n;j++)if((8){t=s[i];s[i]=s[j];(9)}}voidmainO{chars1[100],s2[100],s3[100];prinff("\nlPleaseinputthefirststring:");scanfC("%s",s1);prinff("\nPleaseinputthesecondstring:");scanf("%s",s2);strsort(s1);//将字符串s1排序strson(s2);//将字符串s2排序prinff("%s\n’,s1);printfC%sW’,s2);s3[0]=’\O’;//字符串s3的第一个字符先置’\0’结束标志(10);//将s1和s2合并,按照字母顺序排列,prinff("%s",s3);}标准答案:(1)(*a!=’\0\)&&(*b!=’\0’)(2)a++(3)b++(4)*w==’\0’(5)*(++w)=t(6)a++(7)*(++w)=’\0’(8)s[i]>s[j](9)s[j]=t(10)strmerge(s1,s2,s3)知识点解析:根据题意,对字符串的处理分为三步:第一步是从键盘上输入两个字符串:第二步是将两个字符串分别排序;第三步是将字符串合并;第四步是显示处理结果。第一步和第四步容易实现,关键是第二步和第三步的处理,下面分别加以说明。字符串排序是指将一个字符串中各个字符按照ASCII码值的大小排序。例如,字符串“Beijing”由小到大的排序结果应该是:”Bejiign"。排序算法很多,第二个例子,我们就要介绍快速排序算法。在这里使用简单的冒泡排序算法:即将字符串中的每一个字符一个个进行比较,找出最小的字符,然后再在剩下的字符中找最小的字符。例如,字符“Beijing”的排序过程如下:第一次将字符“Beijing”中的每一个字符:’B’、’e’、’i’、’j’、’i’、’n’、’g’进行比较,找到最小的字符’B’。第二次在剩下的字符’e’、’i’、’j’、’n’、’g’中,找到最小的字符’e’。第三次在剩下的字符’i’、’j’、’i’、’n’、’g’中,找到最小的字符’j’。第三步是合并字符串,合并后的字符串仍然由小到大排序。由于待合并的两个字符串已经排好序。假定两个排好序的字符串分别为A和B,合并后的字符串为巴要使待合并后的字符串仍然由小到大排序,可采取下述步骤:1.从前往后取A中的字符,并按从前往后的顺序与B中的字符比较,若A中的字符较小,则将该字符存入C,并移到A的下一个字符,继续与B中的字符比较。2.若A中的字符较大,则将B中的字符存入C,并移到B的下一个字符,继续与A中的字符比较。3.若A与B中的字符相等,则将A或B中的字符存入C并将A和B均移到下一个字符。4.若A或B字符串到达末尾,则将B或A的剩余部分加到字符串C中。需要注意的是:A、B和C三个字符串均可以用字符数组来表示,C数组的长度不能小于A、B两数组的长度之和。另外,判别字符串是否结尾的方法是:从A或B中取出的字符是否为’\0’,所有字符串都是以’\0’结尾的。软件水平考试(中级)软件设计师下午(应用技术)试题模拟试卷第2套一、必答题(本题共4题,每题1.0分,共4分。)1、阅读以下说明,回答问题,将解答填入对应的解答栏内。[说明]给出一个接收三个数a、b、c作为三角形边长并输出三角形的类型的程序。程序代码如下所示:结点源代码行Areada,b,cBtype="scalene"Cif(a==b||b==c||a==c)Dtype="isosceles"Eif(a==b&&b==c)Ftype="equilateral"Gif(a>=b+c||b>=a+c||c>=a+b)Htype="notatriangle"Iif(a<=0||b<=0||c<=0)Jtype="badinputs"Kprinttype给出上面三角形伪码中的所有可行路径,进行每条路径测试。并找出达到C0和C1覆盖的最小测试案例集合。标准答案:知识点解析:一条路径是利用某个测试案例执行的一个唯一的程序结点序列。在上述测试矩阵中有8个子域。这8个子域每一个子域恰好是一条路径。在该例子中,有16个T和F的不同组合。但是,其中有8个组合是不可行路径。也就是说,对于诙问题的条件不存在具有这8种T和F的组合的测试案例。很难确定一条路径是不可行还是难于找到执行该路径的测试案例。下面的表给出了三角形伪代码中的8条可行路径。C0可以用三个小于或等于零的相同的值来达到,即0,0,0。C1可以用两个测试案例来达到,分别是0,0,0和一个不等边三角形(即3,4,5)。阅读以下说明,回答问题1~2,将解答填入对应的解答栏内。[说明]某银行计算机储蓄系统的功能是:将储户填写的存款单或取款单输入系统,如果是存款,系统记录存款人姓名、住址、存款类型、存款日期、利率等信息,并打印出存款单给储户;如果是取款,系统计算清单给储户。2、请用DFD图描绘该功能的需求。标准答案:知识点解析:暂无解析3、请用IDEF0。图描绘该功能的需求。标准答案:知识点解析:若用数据流图表达较为复杂问题的数据处理过程,一张数据流图是不够的。要按照问题的层次结构进行逐步分解,并以一套分层的数据流反映这种结构关系。该题功能比较简单,首先找出系统的外部环境,从而获得系统的输入输出。与该系统打交道的外部实体只有储户,输入有存取款原始单。该系统经过处理后,输出给储户正式的存款单或结算清单。这样,该系统顶层的DFD就确定了。其次,考虑该系统的内部功能。系统要检验用户填写单据的合法性及区分存款还是取款,然后分别进行存款处理和取款处理。存款处理要登记储户的存款信息,需要建立数据存储文件;而取款处理要读取数据存储文件及查阅储户的信息,取款后要修改储户信息。另外还要通过银行自己的利率计算存款利率。若要用IDEFO图表示,主要理出该活动(储蓄)的控制和机制,输入输出同DFD。该活动由银行来完成,所以机制为银行。整个系统受银行储蓄规则(包括利率计算)来约束。其他活动基本同DFD的加工。4、阅读以下说明,回答问题1~5,将解答填入对应的解答栏内。[说明]若s和t是用单链表存储的两个串,设计一个函数将s串中首次与串t匹配的字串逆置。linkstring*invert-substring(s,t)linkstring*s,*t;{linkstring*prior,*p,*t1,*r,*q,*u;prior=s;p=s;t1=t;if((1))printf("error\n");else{while{p!=NULL&&t1!=NULL){if(p->data==t1->data){p=p->link;t1=t1->link;}else{(2)p=prior->link;}t1=t->link;}if(t1!:NULL)printf("cannotfind");else{(3)r=q->link;q->link=p;while(r!=p){u=r->link;(4)q=r;r=u;}(5)}}}标准答案:(1)p=NULL||t1=NULL(2)prior=prior->link(3)q=prior->link;(4)r->link=q;(5)prior->link=q;知识点解析:设t和s是用带头结点的单链表表示的,首先在s串中查找首次与串t匹配的子串,若未找到,显示相应信息并返回;否则将该子中逆置,先将子串的第一个结点链接到p的前面,再将该子串的第二个结点链接到前面移动的第二个结点的前面,如此下去,便逆置了该于串。5、阅读以下说明,回答问题,将解答填入对应的解答栏内。[说明]将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。main(){intn,i;printf("\npleaseinputanumber:\n");scanf("%d",&u);printf("%d=",n);for((1)){while((2)){if((3)){printf("%d*",i);(4)}elsebreak;}}printf(“%d”,n);}标准答案:(1)i=2;i<=n;i++(2)n!=i(3)n%i==0(4)n=n/i;知识点解析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。(2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步。(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。二、选答题(本题共3题,每题1.0分,共3分。)6、阅读以下说明和c++码,将应填入(n)处的字名写在对应栏内。[说明]从键盘输入一个字符ch,输出该字符在文本文件input.txt的每一行中出现的次数。(必须调用函数鳋统计ch的出现次数,函数ff(str,ch)的功能是统计并返回字符ch在字符串str中出现的次数。)。例如:如果文件input.txt中存放了下列数据:every121Iamastudent运行程序,并输入e后,输出:201intff(char*str,charch){intcount=0;while((1)){if(*str==ch)count++;str++;}returncount;}#include<stdio.h>#include<stdlib.h>voidmain(){charch,c,s[80];intk;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));}标准答案:(*str)(fp=fopen(:input.txt","r"))==NULL(c!=’n’)s[k]=’’;知识点解析:暂无解析7、阅读以下说明和Java码,将应填入(n)处的字名写在对应栏内。[说明]编写一个字符界面的JavaApplication程序,接受用户输入的10个整数,并输出这10个整数的最大值和最小值。importjava.io.*;publicclassabc{publicstaticvoidmain(Stringargs[]){inti,n=10,max=0,min=0,temp=0;try{BufferedReaderbr=newBufferedReader(newInputStreamReader(System.in));(1));}catch(IOExceptione){};for(i=2;i<=n;i++){try{BufferedReaderbr=newBufferedReader(newInputStreamReader(System.in));temp=Integer.parselnt(br.readLine());if(temp>max)(2)if(temp<min)(3)}catch(IOExeeptione){};System.out.println("max="+max+"\nmin="+min);}}标准答案:max=rain=Integer.parselnt(br.readLine())max=temp;rain=temp;知识点解析:暂无解析8、阅读以下说明和VisualBasic码,将应填入(n)处的字名写在对应栏内[说明]设计一个计时程序。该程序用户界面由一个文本框(text1),两个按钮——命令按钮1(Command1)按钮、命令按钮(Command2)组成。程序运行后,用户按开始按钮,则开始计时,文本框中显示秒数,按停止按钮,则计时停止。单击窗口则退出。OptionExplicitDimIPrivateSubCommand1_Click()i=0Timer1.Interval=1000(1)EndSubPrivateSubCommand2_Click()Timer1.Enabled=FalseEndsubPrivateSubFormClick((2)EndSubPrivateSubForm_Load()Timer1.Enabled=False(3)EndSubPrivateSubTimer1_Timer()i=i+1(4)EndSub标准答案:Timer1.Enabled=TrueUnloadMeText1.Text=0Text1.Text=i知识点解析:暂无解析软件水平考试(中级)软件设计师下午(应用技术)试题模拟试卷第3套一、必答题(本题共16题,每题1.0分,共16分。)阅读以下某房屋租赁服务系统的技术说明和数据流图,根据要求回答问题1~问题4。[说明]某房屋租赁公司欲建立一个房屋租赁服务系统,统一管理房主和租赁者的信息,从而快速地提供租赁服务。该系统具有以下功能。(1)登记房主信息:对于每名房主,系统需登记其姓名、住址和联系电话,系统还将为其分配一个唯一的身份标识(ID)和密码,并将这些信息写入房主信息文件。(2)登记房屋信息:所有在系统中登记的房屋都有一个唯一的识别号(对于新增加的房屋,系统会自动为其分配一个识别号)。除此之外,还需登记该房屋的地址、房型(如平房、带阳台的楼房、独立式住宅等)、最多能够容纳的房客数、租金及房屋状态(待租赁、已出租)。这些信息都保存在房屋信息文件中。一名房主可以在系统中登记多个待租赁的房屋。(3)收取手续费:房主登记完房屋后,系统会生成一份费用单,房主根据费用单交纳相应的费用。(4)登记租赁者信息:所有想通过该系统租赁房屋的租赁者,必须首先在系统中登记个人信息,租赁者信息包括姓名、现住址、电话号码、出生年月、性别,以及系统分配的唯一身份标识(ID)和密码。这些信息都保存在租赁者信息文件中。(5)租赁房屋:已经登记在系统中的租赁者,可以得到一份系统提供的待租赁房屋列表。一旦租赁者从中找到合适的房屋,就可以提出看房请求。系统将安排租赁者与房主见面的时间和地点,并将见面信息(包含见面双方的基本信息)通知租赁者和房主。对于每次看房,系统会生成一条看房记录并将其写入看房记录文件中。(6)变更房屋状态:当租赁者与房主达成租房或退房协议后,房主向系统提交变更房屋状态的请求。系统将根据房主的请求,修改房屋信息文件。该房屋租赁服务系统的顶层数据流图如图5-10所示,图5-11是其第0层数据流图。1、请使用[说明]中给出的词汇,将该房屋租赁服务系统顶层数据流图(见图5-10)中(1)~(4)空缺处的数据流补充完整。标准答案:这是一道要求读者掌握分层DFD父图与子图平衡原则和输入榆出平衡原则的综合分析题。本题的解答思路如下。①仔细阅读题干给出的[说明]信息,并注意到关键信息“收取手续费:房主登记完房屋后,系统会生成一份费用单,房主根据费用单交纳相应的费用”可知,在图5-10中处理“房屋租赁服务系统”应有一个“费用单”数据流输出至外部实体“房主”。这一点也体现在图5-11中,即处理“2登记房屋信息”有一条“费用单”数据流输出至外部实体“房主”,因此图5-10中(1)空缺处的输出数据流是“费用单”。②由题干给出的关键信息“租赁房屋:已经登记在系统中的租赁者,可以得到一份系统提供的待租赁房屋列表……”,给合图5-11中处理“4查询待租赁房屋信息”有一条“待租赁房屋列表”数据流输出至外部实体“租赁者”可知,在图5-10中(2)空缺处的输出数据流是“待租赁房屋列表”。③由题干给出的关键信息“租赁房屋:已经登记在系统中的租赁者……租赁者从中(即待租赁房屋列表)找到合适的房屋,就可以提出看房请求。系统会……”可知,在图5-10中应有一条“看房请求”数据流从外部实体“租赁者”输入到处理“房屋租赁服务系统”。因此图5-10中(3)空缺处的输入数据流是“看房请求”。④由题干给出的关键信息“变更房屋状态:当租赁者与房主达成租房或退房协议后,房主向系统提交变更房屋状态的请求。系统将……”可知,在图5-10中应有一条“变更房屋状态请求”数据流从外部实体“房主”输入到处理“房屋租赁服务系统”。因此图5-10中(4)空缺处的输入数据流是“变更房屋状态请求”。知识点解析:暂无解析2、请使用[说明]中给出的词汇,将该房屋租赁服务系统第0层数据流图(见图5-11)中的(5)~(8)空缺处的数据存储补充完整。标准答案:这是一道要求读者掌握分层DFD局部数据存储隐蔽性原则的综合分析题。本题的解答思路如下。①由于在图5-11中(5)空缺处的数据存储与处理“1登记房主信息”相关联,因此应重点阅读题干说明中“登记房主信息”相关的信息。由题干给出的关键信息“登记房主信息:对于每名房主……并将这些信息写入房主信息文件”可知,在图5-11中处理“1登记房主信息”应有一条“房主信息”数据流输出到数据存储“房主信息文件”,即图5-11中(5)空缺处的数据存储是“房主信息文件”。②由题干给出的关键信息“登记房屋信息:所有在系统中登记的房屋……这些信息都保存在房屋信息文件中……”可知,在图5-11中处理“2登记房屋信息”应有一条“房屋信息”数据流输出到数据存储“房屋信息文件”,因此图5-11中(7)空缺处的数据存储是“房屋信息文件”。另外,在图5-11中(7)空缺处的数据存储也与处理“6变更房屋状态”相关联。由题干给出的关键信息“变更房屋状态:当租赁者与房主达成……系统将根据房主的请求,修改房屋信息文件”可知,在图5-11中处理“6变更房屋状态”应有一条“房屋变更信息”数据流输出给数据存储“房屋信息文件”。③由题干给出的关键信息“登记租赁者信息:所有想通过该系统租赁房屋的租赁者……这些信息都保存在租赁者信息文件中。”可知,处理“3登记租赁者信息”应有一个“租赁者信息”数据流输出到数据存储“租赁者信息文件”,因此图5-11中(6)空缺处的数据存储是“租赁者信息文件”。④由题干给出的关键信息“租赁房屋:已经登记在系统中的租赁者……对于每次看房,系统会生成一条看房记录并将其写入看房记录文件中”可知,处理“5安排租赁者看房”应有一条“看房记录”数据流输出到数据存储“看房记录文件”,因此图5-11中(8)空缺处的数据存储是“看房记录文件”。知识点解析:暂无解析3、请将以下与租赁者信息相关的数据字典条目补充完整。登录信息=租赁者ID+密码注册信息=(9)租赁者信息=(10)标准答案:由题干给出的关键信息“登记租赁者信息:所有想……租赁者信息包括姓名、现住址、电话号码、出生年月、性别,以及系统分配的唯一身份标识(ID)和密码”,结合试题中已给出的信息“登录信息:租赁者ID+密码”可知,该系统将“租赁者信息”划分为“登录信息”和“注册信息”两部分,所以租赁者信息中除去登录信息就是注册信息,将其表达成数据字典条目形式如下。注册信息=姓名+现住址+电话号码+出生年月+性别租赁者信息=登录信息+注册信息知识点解析:暂无解析4、该房屋租赁服务系统第0层数据流图(见图5-11)中缺失了一些数据流,请指出所缺失数据流的名称、起点和终点。标准答案:这也是一道要求读者掌握分层DFD父图与子图平衡原则和输入/输出平衡原则的综合分析题。本题的解答思路如下。①结合[问题1]的分析结果可知,在图5-10中与外部实体“租赁者”相关的输入/输出数据共有5条(即租赁者信息、待租赁房屋列表、看房请求、看房通知和查询房屋请求),而在图5-11中与外部实体“租赁者”相关的输入/输出数据仅画出了3条(即待租赁房屋列表、看房通知和查询房屋请求),缺少了“租赁者信息”和“看房请求”这两条数据流。②由题干给出的关键信息“登记租赁者信息:所有想通过该系统租赁房屋的租赁者,必须首先在系统中登记个人信息……这些信息都保存在租赁者信息文件中”可知,在图5-11中应有一条“租赁者信息”数据流从外部实体“租赁者”输入到处理“3登记租赁者信息”,然后再将租赁者的相关信息保存到数据存储“租赁者信息文件”中。③由题干给出的关键信息“租赁房屋:已经登记……一旦租赁者从中找到合适的房屋,就可以提出看房请求。系统会安排租赁者与房主见面的时间和地点,并将见面信息(包含见面双方的基本信息)通知租赁者和房主。对于每次看房,系统会生成一条看房记录并将其写入看房记录文件中”可知,在图5-11中应有一条“看房请求”数据流从外部实体“租赁者”输入到处理“5安排租赁者看房”,然后再将看房记录保存到数据存储“看房记录文件”中。同时注意到“将见面信息(包含见面双方的基本信息)通知租赁者和房主”这一关键信息,见面双方的基本信息也被包含在“见面信息”中,安排见面时需要查询租赁者信息文件和房主信息文件以获得双方的基本信息,并将见面信息通知双方,因此在图5-11中应有一条“查询租赁者信息”数据流从处理“5安排租赁者看房”输出到数据存储“租赁者信息文件”;在图5-11中还应有一条“查询房主信息”数据流从处理“5安排租赁者看房”输出到数据存储“房主信息文件”。④同理,在图5-10中与外部实体“房主”相关的输入/输出数据共有6条,而在图5-11中与外部实体“房主”相关的输入/输出数据仅画出了5条,即缺少了数据流“变更房屋状态请求”。⑤由题干给出的关键信息“变更房屋状态:当租赁者与房主达成租房或退房协议后,房主向系统提交变更房屋状态的请求。系统将根据房主的请求,修改房屋信息文件”可知,在图5-11中应有一条“变更房屋状态请求”数据流从外部实体“房主”输入到处理“6变更房屋状态”。知识点解析:暂无解析阅读以下某工厂人事信息管理系统数据库的设计说明,根据要求回答问题1~问题4。[说明]某工厂有多个部门,每个部门有多位职工,每位职工属于并且仅属于一个部门,每个部门有一位负责人,每个办公室有一部电话。每位职工的月工资大致是:800≤月工资≤4500元。软件开发公司A为该工厂开发的信息管理数据库的部分关系模式如下所示。职工(职工号,姓名,年龄,月工资,部门号,电话,办公室)部门(部门号,部门名,负责人代码,任职时间)其中“职工”和“部门”的关系示例分别见表5-17和表5-18。5、请使用“关系模式标记规则”(见本题附录),给出上述各关系模式的主键和外键。标准答案:这是一道要求考生根据题目给定的关系模式,以及属性间的函数依赖关系和给定的关系实例来确定各关系模式主键和外键的综合分析题。本试题的解答思路如下。(1)由试题中给出的关键信息“某工厂有多个部门,每个部门有多位职工,每位职工属于并且仅属于一个部门,每个部门有一位负责人,……每位职工的月工资大致是:800≤月工资≤4500元”,可以整理出如表5-24所示的关系模式主要属性、含义及约束。(2)设K为R(U,F)中的属性的组合,若,且对于K的任何一个真子集K′,都有K′不能决定U,则K为R的候选码(候选关键字)。若有多个候选码,则选一个作为主码(主键)。(3)部门关系模式的主键和外键。由题目中给出的关键信息“某工厂有多个部门,……每个部门有一位负责人”,并且结合试题所给出的“部门”关系示例(见表5-18)可知,仅用“部门号”作为主键,可以唯一区分部门关系中的每一个元组。同时考虑到部门负责人应该来自职员,所以“负责人代码”应为部门关系模式的外键。最后可得部门关系模式的主键和外键如下:部门(部门号,部门名,,任职时间)(4)职工关系模式的主键和外键。由题干中给出的关键信息“每位职工属于并且仅属于一个部门”可知,仅用“职工号”作为主键,可以唯一区分职工关系中的每一个元组。同时考虑到“部门号”是部门关系模式的主键,所以它应是职工关系模式的外键。最后可得职工关系模式的主键和外键如下:职工(职工号,姓名,年龄,月工资,,电话,办公室)。知识点解析:暂无解析6、对于表5-17和表5-18所示的“职工”和“部门”关系,请指出表5-19中第①、②和③行是否允许插入?请分别用100字以内的文字简要说明理由。标准答案:这是一道要求考生掌握完整性定义的约束性的综合分析题。本试题的解答思路如下。(1)用SQL定义关系模式的一个非常重要的问题是完整性控制。完整性控制应具有①定义功能、②检测功能和③处理功能等3方面的功能。一旦发现违背了完整性约束条件,则应采取相关的动作来保证数据的完整性。数据库中最重要的约束是声明一个或一组属性形成关系的键。键的约束在SQL的CREATETABLE命令中声明。在关系系统中,最重要的完整性约束条件是:实体完整性和参照完整性。(2)实体完整性定义。在关系中只能有一个主键。声明主键有以下两种方法:①将PRIMARYKEY保留字加在属性类型之后;②在属性列表中引入一个新元素,该元素包含保留字PRIMARYKEY和用圆括号括起的,形成该键的属性或属性组列表。(3)参照完整性定义。定义格式如下:参照完整性是通过使用保留字“FOREIGNKEY”定义哪些列为外码;REFERENCES用于指明外键对应于哪个表的主键;ONDELETECASCADE指明删除被参照关系的元组时,同时删除参照关系中的元组;SETNULL表示置为空值方式。(4)由于在职工表的定义中,职工号主码是唯一标识每个元组(记录)的,而在表5-19第①行中的职工号是“1001”,在题目给出的表5-17“职工”关系示例表中已经存在该职主号的记录,为了保证实体的完整性,该条记录不能插入。(5)表5-19第②行的元组可以插入到表5-17“职工”关系表中,尽管部门号、电话和办公室为空,但是它表示该雇员暂时没有分配到某个部门。虽然职工表中部门号是外键,但在定义中也没有约束它不能为空。(6)表5-19第③行的元组不能插入到表5-17“职工”关系表中,部门号是外键,而在部门关系中找不到部门号为“6”的元组,违反了参照完整性,所以不能做插入操作。知识点解析:暂无解析7、查询每个部门中月工资最高的“职工号”的SQL查询语句如下。(1)请用30字以内文字简要说明该查询语句对查询效率的影响。(2)对该查询语句进行修改,使它既可以完成相同功能,又可以提高查询效率。标准答案:这是一道要求考生分析查询效率的综合分析题。通常在涉及相关查询的某些情形中,构造临时关系可以提高查询效率。(1)试题中所给出的SQL查询语句,对于外层的职工关系E中的每一个元组,都要对内层的整个职工关系M进行检索,因此查询效率不高。(2)对该查询语句进行修改,使它既可以完成相同功能,又可以提高查询效率。解答思路①:改正后的SQL语句使用了临时表。解答思路②:知识点解析:暂无解析8、假定分别在“职工”关系中的“年龄”和“月工资”字段上创建了索引,如下的Select查询语句可能不会促使查询优化器使用索引,从而降低查询效率,请写出既可以完成相同功能又可以提高查询效率的SQL语句。标准答案:本试题所给出的原Select查询语句中使用了条件or,系统在查询的时候将对全表进行扫描,不会促使查询优化器使用索引,从而降低了查询效率。既可以完成相同功能又可以提高查询效率的SQL语句修改如下。知识点解析:暂无解析9、该数据库系统在设计时,采用了异构数据库技术。请给出目前3种通用的异构数据库查询技术。[附]关系模式的标记规则如下关系名(属性名1,属性名2,…,属性名n)其中:①若该属性仅为主键属性时,则该属性名下画实下画线;②若该属性仅为外键属性时,则该属性名下画虚下画线;③若该属性既是主键属性,又是外键属性时,则在该属性名下画实下画线和虚下画线;④若该属性既不是主键属性,又不是外键属性时,则在该属性名下不做标记。标准答案:这是一道要求考生掌握异构数据库的基本概念题。本题所涉及的知识点如下。异构数据库系统是相关的多个数据库系统的集合,可以实现数据的共享和透明访问,每个数据库系统在加入异构数据库系统之前本身就已经存在,拥有各自的DMBS。异构数据库的各个组成部分具有自身的自治性,实现数据共享的同时,每个数据库系统仍保有各自的应用特性、完整性控制和安全性控制。目前通用的异构数据库查询技术包括公共数据库网关技术、公共协议技术和公共编程接口技术。知识点解析:暂无解析阅读以下UML类图及其说明,根据要求回答问题1~问题4。[说明]某客户信息管理系统中保存着两类客户的信息:①个人客户。对于这类客户,系统保存了其客户标识(由系统生成)和基本信息(包括姓名、住宅电话和E-mail)。②集团客户。集团客户可以创建和管理自己的若干名联系人。对于这类客户,系统除了保存其客户标识(由系统生成)之外,也保存了其联系人的信息。联系人的信息包括姓名、住宅电话、E-mail、办公电话以及职位。该系统除了可以保存客户信息之外,还具有以下功能:①向系统中添加客户(addCustomer);②根据给定的客户标识在系统中查找该客户(getCustomer);③根据给定的客户标识从系统中删除该客户(removeCustomer);④创建新的联系人(addContact);⑤在系统中查找指定的联系人(getContact);⑥从系统中删除指定的联系人(removeContact)。该系统采用面向对象方法进行开发。在面向对象分析阶段,根据上述描述,得到如表5-20所示的类。描述该客户信息管理系统的UML类图如图5-12所示。10、根据上述描述,图5-12中类Customer的属性是(1);类Person的属性是(2)。(1)A.客户标识B.姓名、住宅电话、E-mailC.客户标识、办公电话、职位D.姓名、住宅电户、办公电话、E-mail、职位(2)A.客户标识B.姓名、住宅电话、E-mailC.客户标识、办公电话、职位D.姓名、住宅电户、办公电话、E-mail、职位标准答案:由试题关键信息“……对于这类客户(个人客户),系统保存了其客户标识……对于这类客户(集团客户),系统保存了其客户标识……”可知,“客户标识”是个人客户和集团客户的共同属性,因此该标识也必然是类“客户”的一个属性。据此可先排除(1)空缺处的选项B和选项D。而选项C的“办公电话、职位”是类InstitutionalCustomer(集团客户)的属性,如果它们也是类“客户”的属性,那么类IndividualCustomer(个人客户)也必然继承这两个属性,而试题中对于类“个人客户”无此相关描述,可见选项C不是正确答案。因此依据试题的描述,类Customer(客户)的属性只有“客户标识”。因此(1)空缺处的正确答案是选项A。在UML类图中,“”表示其相连的两个类之间存在泛化关系,即在图5-12中类Person(人)是类Contact(联系人)的基类;“”表示其相连的两个类之间存在关联关系,即在图5-12中类Person与IndividualCustomer(个人客户)之间具有关联关系。由试题关键信息“对于这类客户(个人客户),系统保存了其客户标识和基本信息(包括姓名、住宅电话和E-mail)”,以及对(1)空缺处解析中类“个人客户”继承了类“客户”的“客户标识”属性,可见类“个人客户”还有“姓名、住宅电话和E-mail”属性没有体现,在图5-12中这些属性应该从类Person(人)中进行关联。从试题关键信息“联系人的信息包括姓名、住宅电话、E-mail、办公电话和职位”可知,类Contact(联系人)除了从类“人”中继承了“姓名、住宅电话和E-mail”属性之外,还追加了“办公电话、职位”属性。这一点分析也证明了类Person(人)具有“姓名、住宅电话和E-mail”的属性。因此(2)空缺处的正确答案是选项B。知识点解析:暂无解析11、识别关联的多重度是面向对象建模过程中的一个重要步骤。根据说明中给出的描述,请将图5-12中(3)~(8)空缺处的内容填写完整。标准答案:关联表示了对象间的结构关系,它暗示两个类在概念上位于相同的级别。在UML类图中,符号“”表示其相连的两个类之间存在关联关系。识别关联的多重度是面向对象建模过程中的一个重要步骤。即说明一个关联的实例中有多少个相互连接的对象是很重要的。其中,这个“多少”被称为关联角色的多重度,把它写成一个表示取值范围的表达式或写成一个具体值。指定关联一端的多重度,就是说明在关联另一端的类的每个对象要求在本端的类必须有多少个对象。由题干给出的关键信息“集团客户可以创建和管理自己的若干名联系人”可知,类InstitutionalCustomer(集团客户)和类Contact(联系人)之间存在着一对多(1:m)的联系。根据图5-12类图中给出的关联导航,(7)空缺处应填入“1”,(8)空缺处应填入“1…*”。客户管理系统中必然包含若干个需要管理的客户信息,即类CustomerInformationSystem(客户信息管理系统)与类Customer(客户)之间存在着一对多(1:m)的联系。根据图5-12类图中给出的关联导航,(3)空缺处应填入“1”,(4)空缺处应填入“0…*”。根据[问题1]的解析可知,类Person(人)的属性有姓名、住宅电话和E-mail,类Customer(客户)的属性是“客户标识”。类IndividualCustomer(个人客户)从类Customer只能继承到属性“客户标识”,其他的属性都要依靠与类Person之间的关联关系来获取,即类Person(人)、类IndividualCustomer(个人客户)端的关联多重度均为“1”。因此(5)空缺处应填入“1”,(6)空缺处应填入“1”。知识点解析:暂无解析12、根据说明中的叙述,抽象出如表5-21所示的方法。请指出图5-12中,类CustomerInformationSystem应具有的方法:(9);类InstitutionalCustomer应具有的方法:(10)。标准答案:类CustomerInformationSystem(客户信息管理系统)的作用是向用户提供与客户管理相关的操作接口,所以addCustomer、getCustomer和removeCustomer是类CustomerInformationSystem(客户信息管理系统)的方法。由于联系人是由集团客户创建和管理的,按照面向对象的理念,与联系人相关的直接操作应由类InstitutionalCustomer(集团客户)来提供。因此addContact、getContact和removeContact是类InstitutionalCustomer(集团客户)的方法。知识点解析:暂无解析13、关联(Association)和聚集(Aggregation)是UML中两种非常重要的关系。请用150字以内的文字简要说明关联和聚集的关系,并说明其不同之处。标准答案:在UML规范中,构成关系可以使用关联和聚集来表示。关联(Association)关系用于描述两个概念上位于相同级别的类的实例之间存在的某种语义上的联系。例如,售票员小张为某个长途汽车站工作,1个汽车站有多辆长途汽车,那么售票员小张与长途汽车站、汽车站与汽车就存在着关联关系。聚集(Aggregation)关系是关联关系的一种特例(即聚集是关联的一种),它代表两个类之间的整体和局部关系。例如,一台电脑与键盘、鼠标、显示器之间就存在着聚集关系。聚集暗示着整体在概念上处于比局部更高的一个级别,在实例图中不存在回路,即只能是一种单向关系;而关联暗示两个类在概念上位于相同的级别。换言之,聚集表示部分与整体关系的关联。若从生命周期的角度考虑,则关联对象的生命周期一般无必然关系,聚集的整体对象往往对部分对象的生命周期负责。另外,聚集和组装也是UML中两种非常重要的关系,它们都表示实例之间的整体/部分关系。组装(Composition)关系是聚集关系的一种特殊形式,它暗示“局部”在“整体”内部的生存期职责。例如,某电子商务公司与其销售部、财务部之间就存在着组装关系。聚集是概念性的,只是区分整体与部分。组装具有很强的归属关系,而且整体与部分的对象生存周期是一致的。知识点解析:暂无解析阅读以下标准书号校验码的技术说明和程序流程图,根据要求回答问题1至问题3。[说明]为实现图书的国际统一编码,便于实现计算机化的图书管理,每本正式出版的图书都印有国际标准书号。标准书号由“ISBN”、10个数字(0~9)组成,其格式如下。ISBN组号-出版者号-书名号-校验码其中,校验码是根据前面9个数字计算得到的,用于计算机自动校验。假设标准书号的10个数字依次是a(1),a(2),…,a(10),则校验码a(10)的设置应使S=10*a(1)+9*a(2)+8*a(3)+…+1*a(10)能被11整除。如果校验码a(10)应设置成10,则规定以“X”表示之。例如,《软件设计师考试考前冲刺预测卷及考点解析》的标准书号为:ISBN7-121-05027-5。第1段上的数字“7”是国际ISBN中心分配给中国ISBN中心管理的组号;第2段上的“121”表示电子工业出版社。标准书号的校验过程如图5-13所示,计算校验码的过程如图5-14所示。其中,Mod(S,11)表示S除以11得到的余数。14、请根据标准书号校验码的技术说明,将图5-13和图5-14程序流程图中(1)~(4)空缺处的内容填补完整。标准答案:制订标准书号的目的是实现图书的国际统一编码,以便于实现计算机化的图书管理,使出版社内的图书管理、书库中的图书管理以及书店的图书销售管理具有更高的工作效率和管理水平。标准书号由“ISBN”、10个数字(0~9)组成,采用“ISBN组号-出版者号-书名号-校验码”的格式。其中,出版者号规定为2-7位数字。对较大的出版社分配比较短的码,留出较长的书名号为较多的书进行编码。标准书号的最后一位是校验码。设置校验码可以大大减少录入错误造成的管理混乱。校验码一般由计算机程序产生。当操作人员录入前9个数字后,计算机就会自动启动计算校验码的过程,输出正确的校验码。在书店(或书库),不论是建库还是查询检索,在手工输入带校验码的标准书号后,计算机就会自动启动校验过程,判断是否输入错误。在图5-14计算校验码的过程中,首先要计算部分S值,即S=10*a(1)+9*a(2)+8*a(3)+…+2*a(9)。此时需要使用循环处理。在循环开始之前,应设置初始值S=0。在循环体内,应执行语句“S+=(11-I)*a(I)”或“S+=(1+I)*a(10-I)”(注意,其中的乘号“*”不要丢失)。该循环应对循环变量I=1~9进行(步长默认为1)控制,因此,(2)空缺处应填入“9”,(3)空缺处所填写的内容是“S+(11-I)*a[I]->S”或“S+(1+I)*a(10-I)->S”。接着再计算该S值除以11的余数R。显然。由于“校验码a(10)的设置应使S=10*a(1)+9*a(2)+8*a(3)+…+1*a(10)能被11整除”,即余数R与校验码之和应能被11整除,因此校验码应等于MOD(11-R,11),即(4)空缺处所填写的内容是“MOD(11-R,11)”。若读者该空缺处填入“MOD(11-R)”,则是没有考虑R=0这一情况。当校验码等于10时,还应以符号X表示之。在对标准书号的校验过程(图5-13)中,首先要将校验码为X的情况转换成数据10,以便于后续计算。为了计算S=10*a(1)+9*a(2)+8*a(3)+…+1*a(10),需要使用循环处理。在循环开始之前,应0设置初始值S=0,对循环变量I从1到10(步长默认为1)。在循环体内,应执行语句“S+=(11-I)*a(I)”或“S+=I*a(11-I)”。因此(1)空缺处所填写的内容是“(11-I)*a(I)”或“I*a(11-I)”。在图5-13中,计算出S值之后,还应判断S除以11的余数是否为0。若余数为0,说明S能够被11整除,表示校验结果正确;若余数非0,则说明输入的标准书号有错(可能是校验码输入有错,也可能是前面的数字输入有错)。此时计算机应输出相应的错误提示信息,提醒信息录入人员仔细校对改正。知识点解析:暂无解析15、图5-13(或图5-14)中Mod(S,11)表示S除以11得到的余数。以下[C程序]实现不使用求余计算符号“%”,求取被除数p和除数q之间的余数。[C程序]标准答案:不使用求余计算符号“%”,求取被除数p和除数q之间的余数的C程序如下。[C程序1]知识点解析:暂无解析16、假设《应试捷径——典型考题解析与考点贯通_系统分析师考试》书籍标准书号前9个数字为7-121-04715,请写出其对应的校验码。标准答案:由题干说明可知,校验码可以是某个“0”~“9”的数字或者是符号“X”。《软件设计师考试考前冲刺预测卷及考点解析》的标准书号为:ISBN7-121-05027-5。该标准书号的校验过程如下。余数为0,说明输入的标准书号正确。结合[问题1]要点解析思路,若《应试捷径——典型考题解析与考点贯通_系统分析师考试》书籍标准书号前9个数字为7-121-04715,则其对应的校验码a(10)计算过程如下:①S1=10×a(1)+9×a(2)+8×a(3)+7×a(4)+6×a(5)+5×a(6)+4×a(7)+3×a(8)+2×a(9)=10×7+9×1+8×2+7×1+6×0+5×4+4×7+3×1+2×5=163②由于,因此R=Mod(163,11)=9③a(10)=Mod(11-R,11)=Mod(2,11)=2知识点解析:暂无解析二、选答题(本题共3题,每题1.0分,共3分。)17、阅读以下算法说明和C程序,根据要求回答问题1至问题2。[说明][算法4-1]的功能是:用来检查文本文件中的圆括号是否匹配。若文件中存在圆括号没有对应的左括号或者右括号,则给出相应的提示信息,如图4-18所示。在[算法4-1]中,stack为一整数栈。算法中各函数的说明如表4-16所示。[算法4-1]将栈stack置空,置EOF为false为了识别更多种类的括号,对[算法4-1]加以改进后得到[算法4-2]。[算法4-2]能够识别圆括号、方括号和花括号(不同类型的括号不能互相匹配)。改进后,函数kind(charch)的参数及其对应的返回值如表4-17所示。[算法4-2][问题1]请将[算法4-1]和[算法4-2]中,(1)~(7)空缺处的内容补充完整。[问题2]请从以下选项中选择相应的判断逻辑填补[算法4-2]中的“判断条件1”至“判断条件3”。注意,若“判断条件2”的逻辑判断结果为假,就无需对“判断条件3”进行判断。判断条件1:(8)判断条件2:(9)判断条件3:(10)[供选择的答案]A.栈顶元素表示的是与当前字符匹配的左括号B.栈顶元素表示的是与当前字符匹配的右括号C.字符是左括号D.字符是右括号E.栈不空F.栈空G.字符是括号标准答案:这是一道要求读者用创建Thread类的子类的方法实现多线程的编程题。本题的解答思路如下。通常把限定只能在一端进行插入和删除操作的线性表称为栈,所以栈又称为运算受限的线性表。把可以进行插入和删除操作的一端称为栈顶(习惯用top指针指示),而另一端称之为栈底。当栈中不包含任何数据元素时,这个栈就为空栈。由于栈具有“后进先出”的运算特点,因此在程序设计中应用十分广泛。例如,进制转换、括号匹配的检验、表达式求值以及迷宫求解等。[算法4-1]的功能是检查文本文件中的圆括号是否匹配。若文件中存在圆括号没有对应的左括号或者右括号,则给出图4-18所示的提示信息。从图4-18所给出的信息可知,程序不但要求检查出是否有括号匹配错误,而且还需给出具体错在哪个括号。通常,括号匹配的规则是把最近的左右括号配成一对,所以括号匹配最常用的方法是遇到左括号则入栈,遇到右括号就出栈。这样,出栈的左括号与当前的右括号是匹配的。[算法4-1]分析:①栈置空,置EOF为FALSE,并从文件中读取第一个字符到ch,然后进入循环。循环体执行一次处理一个ch。进入循环,利用kind函数算出ch的类型k。②虽然[算法4-1]中有(1)~(4)空缺处,但其基本结构却很明显,大致流程如下。当k等于什么的时候把什么入栈;当k等于什么的时候且栈不为空的时候,进行出栈操作。如果栈为空,则打印错误信息;如果都不是,则读文件的下一个字符再次进入循环。根据以上所提及的算法可知,入栈操作应该发生在类型k为1(即ch为左括号)时,而出栈操作应该发生在类型k为2(即ch为右括号)时。因此(1)空缺处所填写的内容是“1”,(4)空缺处所填写的内容是“2”。由于在(4)空缺处之后的出栈操作中,并没有用到栈的内容。因此可能有些读者理所当然地认为栈中的内容没有什么用,可以在(2)、(3)空缺处随便压个ch,即两个空缺处所填写“ch”。但换个角度思考,从逻辑上就可以推翻这种解答。如果(2)、(3)空缺处压的是同样的数据,又是在同一位置出栈,算法大可只用一个PUSH、POP就可以了。由语句“row<-pop();col<-pop();”可知,(2)、(3)空缺处应该把row和col压入堆栈。由于是先弹出row后弹出col,且根据栈的“后进先出”操作规则可知,应先将col压入栈,再压入row。因此(2)空缺处所填写的内容是“col”,(3)空缺处所填写的内容是“row"。[算法4-2]分析:同理,由[算法4-2]中的语句“row<-pop();col<-pop();”可知,(5)、(6)空缺处应该把row和col压入堆栈。由于是先弹出row后弹出col,因此应先将col压入栈,再压入row,即(5)空缺处所填写的内容是“col”,(6)空缺处所填写的内容是“row”。由于判断条件1为真时,需要进行入栈操作,因此判断条件1应是判断字符是不是左括号,如果是就入栈,即(8)空缺处应选择选项C的“字符是左括号”。判断条件2和判断条件3是相关联的,当两个判断条件都为真时,要进行出栈操作,因此要判断栈是否为空。由此可以得出在判断条件2和判断条件3中,至少有一个必定是用来判断栈是否为空的。可以用判断栈顶元素来确定当前括号是否和栈中压入括号是同一类型的,但前提是左括号类型入了栈,而且要在栈顶。如果(7)空缺处压入的是k,则正好符合这一条件。所以(7)空缺处所填写的内容是“k”。同时,判断括号是否匹配的条件也就可以确定了,如果当前ch是右括号且当前栈顶的左括号(只有左括号入了栈)类型与ch匹配,则匹配成功。根据试题说明中的提示信息:若“判断条件2”的逻辑判断结果为假,就无需对“判断条件3”进行判断,所以应把“栈不空”作为判断条件2,“栈顶元素表示的是与当前字符匹配的左括号”作为判断条件3,即(9)空缺处应选择选项E的“栈不空”,(10)空缺处应选择选项A的“栈顶元素表示的是与当前字符匹配的左括号”。知识点解析:暂无解析18、请阅读以下技术说明、类图及C++代码,根据要求将(1)~(5)空缺处的内容填写完整。[说明]已知对某载客车辆(Car)进行类建模,如图4-19所示。其中,类Engine表示发动机引擎,类Wheel表示车轮,类Body表示车身,类Driver表示司机,类Passenger表示乘客。[C++代码]car.run();}标准答案:根据已知类图进行程序代码设计的案例分析题,根据图4-19(或图4-20)载客车辆类图描述,分析可得:一辆汽车可以载0~7名乘客,一辆汽车可以被一个或者多个司机驾驶,并且一辆汽车有4~5个轮胎,一个引擎和一个车框架。程序代码中(1)空缺处表示一辆汽车最多载客数目,从后面的程序代码分析可得,应该填写MAX_PASSENGERS。(2)空缺处主要设置车的假设司机,由于参数的名称与成员变量的名称相同,因此需要加上this以示区别。(3)空缺处主要用于判断司机是否上车,因此,代码应该对汽车所维持的司机对象的引用是否为空进行判断。(4)空缺处用于产生一个汽车对象,所以,需要给汽车对象传递合适的参数,构造方法中需要传递一个司机对象,因此应该将driver对象传递到汽车对象中。(5)空缺处表示乘客上车,getOnPassenger要求传递的是乘客对象,因此空缺处应为构造乘客对象的代码。知识点解析:暂无解析19、请阅读以下技术说明、类图及Java代码,根据要求将(1)~(5)空缺处的内容填写完整。[说明]已知对某载客车辆(Car)进行类建模,如图4-20所示,其中类Engine表示发动机引擎,类Wheel表示车轮,类Body表示车身,类Driver表示司机,类Passenger表示乘客。标准答案:根据已知类图进行程序代码设计的案例分析题,根据图4-19(或图4-20)载客车辆类图描述,分析可得:一辆汽车可以载0~7名乘客,一辆汽车可以被一个或者多个司机驾驶,并且一辆汽车有4~5个轮胎,一个引擎和一个车框架。程序代码中(1)空缺处表示一辆汽车最多载客数目,从后面的程序代码分析可得,应该填写MAX_PASSENGERS。(2)空缺处主要设置车的假设司机,由于参数的名称与成员变量的名称相同,因此需要加上this以示区别。(3)空缺处主要用于判断司机是否上车,因此,代码应该对汽车所维持的司机对象的引用是否为空进行判断。(4)空缺处用于产生一个汽车对象,所以,需要给汽车对象传递合适的参数,构造方法中需要传递一个司机对象,因此应该将driver对象传递到汽车对象中。(5)空缺处表示乘客上车,getOnPassenger要求传递的是乘客对象,因此空缺处应为构造乘客对象的代码。知识点解析:暂无解析软件水平考试(中级)软件设计师下午(应用技术)试题模拟试卷第4套一、必答题(本题共19题,每题1.0分,共19分。)阅读下列说明和数据流图,回答问题1至问题3,将解答填入对应栏内。[说明]下面给出的是某房产管理系统的一套分层数据流图。其功能描述如下:(1)系统随时根据住房送来的入住单更新住户基本信息文件;(2)每月初系统根据物业管理委员会提供的月附加费(例如清洁费、保安费、大楼管理费等)表和房租调整表,计算每家住户的月租费(包括月附加费),向住户发出交费通知单。住户交费时,系统输入交费凭证,核对后输出收据给住户;(3)系统定期向物业管理委员会提供住房分配表和交费清况表;(4)住户因分户或换房,在更新住户基本信息文件的同时,系统应立即对这些住户做月租费计算,以了结分户或换房前的房租。以下是经分析得到的数据流图及部分数据字典,有些地方有待填充,假定顶层数据流图是正确的。图1-1是项层数据流图,图1-2是第0层数据流图,图1-3是第1层数据流图,其中A是加工1的细化图,B是加工2的细化图。假定题中提供的顶层图是正确的,请回答下列问题。[图1-1][图1-2][图1-3]1、指出图1-2中的哪些文件可不必画出。标准答案:“房租文件”和“交费文件”知识点解析:分层数据流图中,只涉及单个加工的文件不必画出,可在子图中再画。依此标准,图1-2中文件“房租文件”和“交费文件”不必画出。2、指出在哪些图中遗漏了哪些数据流。回答时请用如下形式之一:1)××图中遗漏了××加工(或文件)流向××加工(或文件)的××数据流;2)××图中加工××遗漏了输入(或输出)数据流××。标准答案:①加工1子图中,遗漏了从住户基本信息文件到加工1.1(入住单校验)的数据流。②加工1子图中,加工1.6(制作住房分配报告)遗漏了输出数据流:住房分配表。③加工2子图中,加工2.1(计算月租费)遗漏了输入数据流:月附加费表。④加工2子图中,加工2.4(制作收据)遗漏了输出数据流:收据。知识点解析:分层数据流图时刻牢记父图与子图平衡原则。对这种数据流缺失题目,认真对照父图与子图就可得出答案。另外,还要注意与文件的交互,包括错误数据流大多也是出在此。3、指出图1-3的B中加工2.3能检查出哪些不合格交费凭证。标准答案:①交费凭证中有非法字符;②交费文件中不存在与之对应的交费凭证。知识点解析:暂无解析阅读下列说明和E-R图,回答问题1至问题3,将解答填入对应栏内。[说明]建立一个供应商零件数据库,数据库要满足如下要求:(1)供应商代码不能为空,且是值惟一的,供应商的名也是惟一的。(2)零件号不能

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论