1、中级软件设计师下午试题-29 及答案解析(总分:74.99,做题时间:90 分钟)一、试题一(总题数:1,分数:10.00)【说明】某大学准备开发一个学生课程注册系统,学生可以使用该系统查询新学期将开设的课程和讲课教师情况,选择自己要学习的课程进行登记注册,并可以查询成绩单;教师可以使用该系统查询新学期将开设的课程和选课学生情况,并可以登记成,绩单;注册管理员使用该系统进行注册管理,包括维护教师信息、学生信息和课程信息等。在每个学期的开始,学生可以获得该学期的课程目录表,课程目录表列出每门课程的所有信息,诸如基本信息、教师、开课系和选课条件等。新学期开始前两周为选课注册时间,在此期间学生可以选
2、课注册,并且允许改变或取消注册申请,开学两周后注册管理员负责关闭课程注册。每个学生可以选择不超过 4 门课程,同时指定 2 门侯选课程以备主选课程未选上。每门课程最多不能超过 10 人,最少不能低于 3 人,低于 3 人选课的课程将被取消。一旦学生的注册过程完毕,注册系统将有关信息提交收费系统以便学生付费。如果在实际注册过程中名额已满,系统将通知学生在提交课程表之前予以更改。在学期结束时,学生可以存取系统查看电子成绩单。由于学生成绩属于敏感信息,系统必须提供必要的安全措施以防非法存取。【用例图】表 1 学生课程注册系统的实体类实体类 说明Professor 学校中讲课的教师student 学校
3、中注册课程的学生Schedule 学生在新学期选择登记的课程列表CourseCatalog 学校所有课程的目录Course 课程的基本信息CourseOffering 新学期课程的开设信息,如讲课教师、时间、地点等信息表 2 学生课程注册系统的边界类边界类 说明LoginForm 为教师、学生和注册管理员提供登录的操作RegisterCoursesForm 为学生提供选课注册的操作ViewReportForm 为学生提供成绩查询的操作selecrTeachCoursesForm 为教师提供查看学生选课情况的操作SubmitCradesForm 为教师提供登记成绩的操作MaintainProfe
4、ssorsForm 为注册管理员提供维护教师信息的操作MaintainStudentsForm 为注册管理员提供维护学生信息的操作MaintainCoursesForm 为注册管理员提供维护课程信息的操作CloseRegistrationForm 为注册管理员提供关闭注册的操作BillingSystemNotice 提供与收费系统的信息交换接口表 3 学生课程注册系统的控制类 控制类 说明RegisterCoursesControl 负责新学期学生的选课登记ViewReportControl 负责学生成绩的查询SelectTeachCoursesControl 负责新学期课程的学生选择情况Su
5、bmitGradesControl 负责学生成绩的登记CloseRegistrationControl 负责关闭课程注册【协作图】(分数:9.99)(1).【问题 1】在 UML 中,用例代表一个完整的功能,如与角色通信、进行计算或在系统内工作等。请简要说明用例具有哪些的特征,并指出用例图中(1)(3)处表示的内容。(分数:3.33)_(2).【问题 2】协作图与时序图是同构的,二者表示的都是同样的系统交互活动,只是各自的侧重点不同而已。根据题目提供的信息,指出协作图中(4)(8)处表示的内容。(分数:3.33)_(3).【问题 3】UML 采用 5 个互联的视图来描述软件系统的体系结构,即用
6、例视图(Usecase View)、设计视图(Design View)、进程视图(Process View)、实现视图(Implementation View)和展开视图(Deployment View)。系统模型中每一个视图的内容是由一些图来描述的,UML 中包含用例图、类图、对象图、状态图、时序图、协作图、活动图、组件图、分布图等 9 种图。对整个系统而言,其功能由用例图描述,静态结构由类图和对象图描述,动态行为由状态图、时序图、协作图和活动图描述,而物理架构则是由组件图和分布图描述。请分别指出用例图、类图、对象图、状态图、时序图、协作图、活动图、组件图、分布图的作用。(分数:3.33)_
7、二、试题二(总题数:1,分数:10.00)【说明】算法 2-1 是用来检查文本文件中的圆括号是否匹配。若文件中存在圆括号没有对应的左括号或者右括号,则给出相应的提示信息,如下所示:文件 提示信息(1+2)abc) 缺少对应左括号:第 2 行,第 4 列(def)gx) 缺少对应左括号:第 3 行,第 10 列(h)ij)(k(1ml) 缺少对应右括号:第 5 行,第 4 列;第 4 行,第 1 列在算法 2-1 中,stack 为一整数栈。算法中各函数的说明见表 4。表 4函数名 函数功能push (int i) 将整数 i 压人栈 stack 中pop( ) stack 的栈顶元素出栈emp
8、ty( ) 判断 stack 栈是否为空。若为空,函数返回 1,否则函数返回 0nextch( ) 读取文本文件中的下个字符,井返回该字符的 ASCII 值,将字符所在的行号以及字符在行中的位置分别存储到变量 row 和 col中,若遇到文件结束符,则将变量 EOF 置为 truekind (char ch) 判断字符 ch 是左括号还是右括号,若是左括号,函数返回 1,若是右括号,函数返回 2,若两者都不是,函数返回。【算法 2-1】将栈 stack 置空,置 EOF 为 falsech - nextch();while( not EOF) k - kind(CH); if(k= (1) )
9、 push( (2) );push( (3) ); elseif(k= (4) ) if(not empty() pop( ) ;pop( ); else 显示错误信息(缺少对应左括号或右括号); 显示行号 row;显示列号 col; endif endif ch - nextch( ); endwhileif(not empty() 显示错误信息(缺少对应左括号或右括号); while(not empty() row - pop() ; col - pop(); 显示行号 row; 显示列号 col; endwhile endif 为了识别更多种类的括号,对算法 2-1 加以改进后得到算法
10、2-2。算法 2-2 能够识别圆括号、方括号和花括号(不同类型的括号不能互相匹配)。改进后,函数 kind(char ch)的参数及其对应的返回值见表 5。 表五ch ( ) 其他返回值 1 2 3 4 5 6 0【算法 2-2】将栈 stack 置空,置 EOF 为 falsech -nextch();while(not EOF)k -kind(ch);if( k 0)if( 判断条件 1 )push( (5) );push( (6) );push( (7) );elseif( 判断条件 2 and 判断条件 3 )pop() ;pop() ;pop();else显示行号 row; 显示列号
11、 col;endifendifch - nextch();endwhileif(not empty( ) )显示错误信息(缺少对应左括号或右括号);while( not empty( ) )pop( ); rowpop( ); colpop( );显示行号 row;显示列号 col;endwhileendif(分数:10.00)(1).【问题 1】请将【算法 2-1】和【算法 2-2】中(1)(7)处补充完整。(分数:5.00)_(2).【问题 2】请从下面的选项中选择相应的判断逻辑填补【算法 2-1】中的“判断条件 1”至“判断条件 3”。注意,若“判断条件 2”的逻辑判断结果为假,就无需对
12、“判断条件 3”进行判断。 (a)字符是括号 (b)字符是左括号 (c)字符是右括号 (d)栈空 (e)栈不空 (f)栈顶元素表示的是与当前字符匹配的左括号(R)栈顶元素表示的是与当前字符匹配的右括号(分数:5.00)_三、试题三(总题数:1,分数:11.00)【说明】某超市的销售业务由一个销售业务管理系统进行管理,该系统每完成一次交易都需要提供顾客发票,其格式见表 6 所示。(分数:11.00)(1).【问题 1】设计一的关系模式 Invoice 最高满足第几范式?为什么?设计一和设计二哪个更加合理?为什么?(分数:2.75)_(2).【问题 2】根据设计二中关系模式,以下 SQL 语句是用
13、于“建立 2005 年 1 月期间每张发票的发票号,交易日期,交易商品件数和交易总金额的视图”的不完整语句,请填补其中的空缺。CREATE VIEW Invoice -total (1) SELECT Invoice. ino, ldate, (2) , (3) FROM Invoice, lnvoicedetailWHERE (4) ANDldate BETWEEN 2005-01-01AND 2005-01-31GROUPBY (5) ;(分数:2.75)_(3).【问题 3】根据设计二中关系模式,以下 SQL 语句是用于“查询从未售出的商品信息”的不完整语句,请填补其中的空缺。SELEC
14、T Mno, Mname, priceFROM Merchandise (1) WHERE (2) (SELECT (3) FROM lnvoicedetailWHERE A. Mno=lnvoicedetail. Mno);(分数:2.75)_(4).【问题 4】设计二中关系 Merchandise 中由属性 price 表示商品价格,关系 lnvoicedetail 中的属性 unitprice 也表示商品价格。两个是否有必要同时存在?为什么?(分数:2.75)_四、试题四(总题数:1,分数:11.00)1.【函数 1 说明】函数 compare(SqList A, SqList B)的功
15、能是:设 A=(al,am)和 B=(b1,bn)均为顺序表,“比较”,两个顺序表 A 和 B 的大小。设 A 和 B 分别为 A 和 B 中除去最大共同前缀后的子表(例如,A=(y,x,x,z,x,z),B=(y,x,x,2,y,x,x,z),则两者中最大的共同前缀为 (y,x,x,z),在两表中除去最大共同前缀后的子表分别为 A=(x,z)和 B=(y,x,x,z)。若 A=B=空表,则 A=B;若A=空表,而 B空表,或者两者均不为空表,且 A的首元小于 B首元,则 AB:否则 AB。提示:算法的基本思想为:若相等,则 j+1,之后继续比较后继元素;否则即可得出比较结果。显然,j的初值应
16、为 0,循环的条件是 j 不超出其中任何一个表的范围。若在循环内不能得出比较结果,则循环结束时有 3 种可能出现的情况需要区分。【函数 1】int compare ( SqListA, SqList B)/若 AB,则返回-1;若 A=B,则返回 0:若 AB,则返回 1j =0;while(i (1) else (2) ;if(A. length = B. length) return(0);else if(A. lengthB. length)return(-1);else return(1)/compare /函数 1 的时间复杂度是 (3) 。【函数 2 说明】函数 exchanse_
17、L(SLnkL,int m)的功能是:用尽可能少的辅助空间将单链表中前 m 个结点和后 n 个结点的互换。即将单链表(a 1、a 2,a m,b 1,b 2,b n)改变成(b 1,b 2,b n,a 1, a 2,a m,)。【函数 2】void exchange_L(SLink k=1;while( k m+k;if( (6) /以指针 ha 记 a1结点的位置L - next = p - next; /将 B1结点链接在头结点之后p - next = NULL; /设 am的后继为空q= (7) ; /令 q 指向 b1结点while(q-next)q = (8) ; /查找 bn结点q
18、-next= (9) ; /将 a1结点链接到 bn结点之后/函数 2 的时间复杂度是 (10) 。(分数:11.00)_五、试题五(总题数:1,分数:11.00)2.【程序说明】本程序先从文件读人各考生的准考证号(设为整型数)及成绩,并将其存放在一棵检索二叉树上,二叉树结点的健值是成绩,每个结点带一链表,链表结点存放取得该成绩的考生的准考证号。然后,程序按中序遍历检索二叉树,从高分到低分输出结果,使每行输出成绩及其取得成绩的考生的准考证号。【程序】#include stdio. h typedef struet idnode int id;struct idnode * next;ldNod
19、e;typedef struct marknode Iint mark;ldNode * head;struct marknode * left, * right;MarkNode;char fname = “sp07.dat“;main( )int id, mark;MarkNode * root = null;FILE * fp = fopen(fname,“ r“ );if(!fp) printf(“file%s open error, /n“ , fname);exit(0);while (!feop(fp) fscanf(fp,“ %d%d“, btree(fclose(fp);pr
20、int(root);btree(MarkNod * * mpptr, int id, int mark)ldNode * ip;MarkNode *mp = * mpptr;if (1) if (mark=p-mark) addldNODE ( (2) , id);else if ( mark mp - mark) btree (else btree(elseImp = ( marknode * ) malloc(sizeo (marknode) );mp - mark = mark;mp - left =mp - right = NULL;(3) addldNode(4) ;addldNod
21、e(ldNode * * ipp, int id)ldNode * ip = * ipp;if ( (5) )addldNode ( (6) ), id;else ip = (ldNode * )malloc(sizeof(ldNode) );sp - id = id;ip - next = NULL;(7) print(MarkNode * rap)ldNode *ip, *ip0;if (mp) print ( mp - left);printf(“ %6d: /t“ ,mp - mark);ip = mp - head;while(ip) printf(“ %6d“ ,ip - id);
22、ip0 =ip;ip = ip - next;free (ip0);printf(“ /n“ ); printf( mp - right); free(mp);(分数:11.00)_六、试题六(总题数:1,分数:11.00)3.【说明】本题将有向网(带权有向图)定义为类 Adjacency WDigraph。类中的数据成员 n 表示有向网中的顶点数;a为带权邻接矩阵,用于存储有向网中每一对顶点间弧上的权值;c 为二维数组,存储有向网中每一对顶点间的最短路径长度;kay 为二维数组,存储最短路径,kayij=k 表示顶点 i 到达顶点 j 的最短路径必须经过顶点 k。类中的主要成员函数有:Inp
23、ut():输入有向网的顶点数、各条弧及权值,建立带权领接矩阵 a。若顶点 i 到顶点 j 有弧,则 aij取弧上的权值,否则 aij的值取 NoEdge。AllPairs();用弗洛伊德(Floyd)算法求有向网中每一对顶点间的最短路径长度。OutShortestPath (int i, int j:计算顶点 i 到顶点 j 的最短路径。outputPath(int i, int j):输出顶点 i 到顶点 j 的最短路径上的顶点。Floyd 算法的基本思想是递推地产生一个矩阵序列 C0,C 1,C 2,C n,其中 C0是已知的带权邻接矩阵,a,C k(i, j(0i,j)表示从顶点 i 到
24、顶点 j 的中间顶点序号不大于 k 的最短路径长度。如果 i 到 j 的路径没有中间顶点,则对于 0kn,有 Ck(i,j)=C0(i,j)= aij。递推地产生 C1,C 2,C n的过程就是逐步将可能是最短路径上的顶点作为路径上的中间顶点进行试探,直到为全部路径都找遍了所有可能成为最短路径上的中间顶点,所有的最短路径也就全部求出,算法就此结束。【C+代码】#include iostream. h #define NoEdge 10000/ 当两个顶点之间没有边相连时,在邻接矩阵中用 NoEdge 表示void Make2DArray(int * * class AdjacencyWDigr
25、aph privateint n; /有向网中的顶点数目int* *a; /存储顶点间弧上的权值int* *c; /存储计算出的最短路径长度int* * kay; /存储求出的最短路径pubic:int Vertices( )const j return n;void AllPairs( );void Input( ); /输入有向网的顶点数、各条弧及权值,建立邻接矩阵 avoid OutShortestPath(int i, int j); /计算顶点 i 到 j 的最短路径(试卷中未列出) AdjacencyWDigraph ( ); /析构函数(试卷中未列出)private:void o
26、utputPath(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)cij= (1) ; kayij=0;for(k=1;k=n; k+)for(i=1;i=n; i+)if(i= =k) continue;t1=cik;for(j=1;j=n; j+)if(j=k|j=i) continue;t2 =ck j; t3 =ci j;if( t1 ! = NoEdge kayij= (3) ;/for/forvoid AdjacencyWDig
27、raph: outputPath(int i, int j)/输出顶点 i 到 j 的最短路径上的顶点if(i=j) return;if(kayi j=0)coutj “;else outputPath(i, (4) ); outputPath( (5) );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+) aij=NoEdge;fo
28、r(i=1;i =n; i+) aii=0;Make2DArray(c, n+1, n+1);Make2DArray(kay, n+1, n+1)for(i=1;i=E; i+)cout“输入弧的信息(起点终点权值); “; cin u v w; auv =w;void Make2DArray(int * * x=new int* rows+1;for(i=0;irows+1;i + ) xi=new int cols+1;for(i=1;i= rows; i +)for(j=1;j=cols; j+) xij=0;(分数:11.00)_七、试题七(总题数:1,分数:11.00)4.【说明】下
29、面是一个 Applet 程序,其功能是通过一个按钮控制一个窗口的创建,显示与隐藏,并且以按钮文字作为提示,可以随着窗口的状态改变,即如果窗口出现,则按钮文字为“Hide myFrm“,提示用户点击按钮,则隐藏窗口,反之亦然。请将横线处语句补充完整。程序运行结果如图 5 所示:(分数:11.00)_中级软件设计师下午试题-29 答案解析(总分:74.99,做题时间:90 分钟)一、试题一(总题数:1,分数:10.00)【说明】某大学准备开发一个学生课程注册系统,学生可以使用该系统查询新学期将开设的课程和讲课教师情况,选择自己要学习的课程进行登记注册,并可以查询成绩单;教师可以使用该系统查询新学期
30、将开设的课程和选课学生情况,并可以登记成,绩单;注册管理员使用该系统进行注册管理,包括维护教师信息、学生信息和课程信息等。在每个学期的开始,学生可以获得该学期的课程目录表,课程目录表列出每门课程的所有信息,诸如基本信息、教师、开课系和选课条件等。新学期开始前两周为选课注册时间,在此期间学生可以选课注册,并且允许改变或取消注册申请,开学两周后注册管理员负责关闭课程注册。每个学生可以选择不超过 4 门课程,同时指定 2 门侯选课程以备主选课程未选上。每门课程最多不能超过 10 人,最少不能低于 3 人,低于 3 人选课的课程将被取消。一旦学生的注册过程完毕,注册系统将有关信息提交收费系统以便学生付
31、费。如果在实际注册过程中名额已满,系统将通知学生在提交课程表之前予以更改。在学期结束时,学生可以存取系统查看电子成绩单。由于学生成绩属于敏感信息,系统必须提供必要的安全措施以防非法存取。【用例图】表 1 学生课程注册系统的实体类实体类 说明Professor 学校中讲课的教师student 学校中注册课程的学生Schedule 学生在新学期选择登记的课程列表CourseCatalog 学校所有课程的目录Course 课程的基本信息CourseOffering 新学期课程的开设信息,如讲课教师、时间、地点等信息表 2 学生课程注册系统的边界类边界类 说明LoginForm 为教师、学生和注册管理
32、员提供登录的操作RegisterCoursesForm 为学生提供选课注册的操作ViewReportForm 为学生提供成绩查询的操作selecrTeachCoursesForm 为教师提供查看学生选课情况的操作SubmitCradesForm 为教师提供登记成绩的操作MaintainProfessorsForm 为注册管理员提供维护教师信息的操作MaintainStudentsForm 为注册管理员提供维护学生信息的操作MaintainCoursesForm 为注册管理员提供维护课程信息的操作CloseRegistrationForm 为注册管理员提供关闭注册的操作BillingSystem
33、Notice 提供与收费系统的信息交换接口表 3 学生课程注册系统的控制类 控制类 说明RegisterCoursesControl 负责新学期学生的选课登记ViewReportControl 负责学生成绩的查询SelectTeachCoursesControl 负责新学期课程的学生选择情况SubmitGradesControl 负责学生成绩的登记CloseRegistrationControl 负责关闭课程注册【协作图】(分数:9.99)(1).【问题 1】在 UML 中,用例代表一个完整的功能,如与角色通信、进行计算或在系统内工作等。请简要说明用例具有哪些的特征,并指出用例图中(1)(3)
34、处表示的内容。(分数:3.33)_正确答案:(用例的特征如下:用例总是由角色初始化;用例为角色提供值;用例具有完全性,即不管其内部是如何实现的,只有最终产生了返回角色的结果,用例的执行才能完毕。(1)登记成绩(2)查询成绩单(3)关闭注册)解析:(2).【问题 2】协作图与时序图是同构的,二者表示的都是同样的系统交互活动,只是各自的侧重点不同而已。根据题目提供的信息,指出协作图中(4)(8)处表示的内容。(分数:3.33)_正确答案:(4)create Schedule (5)display blank schedule() (6)get course offerings()(7)create
35、 with offerings() (8)add schedule(Schedule)解析:(3).【问题 3】UML 采用 5 个互联的视图来描述软件系统的体系结构,即用例视图(Usecase View)、设计视图(Design View)、进程视图(Process View)、实现视图(Implementation View)和展开视图(Deployment View)。系统模型中每一个视图的内容是由一些图来描述的,UML 中包含用例图、类图、对象图、状态图、时序图、协作图、活动图、组件图、分布图等 9 种图。对整个系统而言,其功能由用例图描述,静态结构由类图和对象图描述,动态行为由状态图
36、、时序图、协作图和活动图描述,而物理架构则是由组件图和分布图描述。请分别指出用例图、类图、对象图、状态图、时序图、协作图、活动图、组件图、分布图的作用。(分数:3.33)_正确答案:(1)用例图定义了系统的功能需求,它完全是从系统的外部观看系统功能,并不描述系统内部对功能的具体实现。在用例图中,角色代表触发系统功能的用户或其他系统,用例代表具体的功能描述。2)类图描述系统的静态结构,表示系统中的类以及类与类之间的关系。3)对象图描述了一组对象以及它们之间的关系,表示类的对象实例。4)状态图表示一个状态机,强调对象行为的事件顺序。5)时序图和协作图均表示一组对象之间的动态协作关系。其中,时序图反
37、映对象之间发送消息的时间顺序,协作图反映收发消息的对象的结构组织。时序图和协作图是同构的,即两者之间可以相互转换。6)活动图反映系统中从一个活动到另一个活动的流程,强调对象间的控制流程。7)组件图描述组件以及它们之间的关系,表示系统的静态实现视图。8)分布图反映了系统中软件和硬件的物理架构,表示系统运行时的处理节点以及节点中组件的配置。)解析:解析 用例描述了它所代表的功能的各个方面,即包含了用例执行期间可能发生的各种情况。用例和角色之间具有“关联”的连接关系,表示什么角色与该用例进行通信。在 UML 语言中,用例用一个椭圆图形和名称表示。在本题中,我们通过题目说明可以识别以下用例:1与教师有
38、关的用例1)选择课程选择所教的课程,并获得学生名册。2)登记成绩在学期结束时,提交学生的课程成绩。2与学生有关的用例1)注册课程在学期开始进行选课注册,允许在一段时间内更改或删除,课程目录系统提供当前学期的所有可选课程列表。2)查看成绩单学生可以查看以前学期的电子成绩单。3与注册管理员有关的用例1)维护课程信息在系统中增加、修改和删除课程信息。2)维护学生信息在系统中增加、修改和删除学生信息。3)维护教师信息在系统中增加、修改和删除教师信息。4)关闭注册删除少于 3 人的课程,并由付费系统通知学生缴费。4与安全性要求有关的用例登录使用此系统的人员需要进行登录,以验证其身份和权限。发现和定义对象
39、类应以问题域和系统责任为出发点,正确地运用抽象原则,尽可能全面地发现对象的因素,并对其进行检查和整理,最终得到系统的对象类。我们可以在用例模型的基础上,通过识别实体类、边界类和控制类,从而发现和定义系统中的对象类。识别上述对象类之后,通过建立交互图,将用例的行为分布到这些对象类中。时序图表示完成某项行为的对象类和这些对象类之间传递消息的时间顺序,其中,对象生命线是一条垂直的虚线,表示对象存在的时间;控制焦点是一个细长的矩形,表示对象执行一个所经历的时间段;消息是对象之间的一条水平箭头线,表示对象之间的通信。协作图包含一组对象和以消息交换为纽带的关联,用于描述系统的行为是如何由系统的成分合作实现
40、的。二、试题二(总题数:1,分数:10.00)【说明】算法 2-1 是用来检查文本文件中的圆括号是否匹配。若文件中存在圆括号没有对应的左括号或者右括号,则给出相应的提示信息,如下所示:文件 提示信息(1+2)abc) 缺少对应左括号:第 2 行,第 4 列(def)gx) 缺少对应左括号:第 3 行,第 10 列(h)ij)(k(1ml) 缺少对应右括号:第 5 行,第 4 列;第 4 行,第 1 列在算法 2-1 中,stack 为一整数栈。算法中各函数的说明见表 4。表 4函数名 函数功能push (int i) 将整数 i 压人栈 stack 中pop( ) stack 的栈顶元素出栈e
41、mpty( ) 判断 stack 栈是否为空。若为空,函数返回 1,否则函数返回 0nextch( )读取文本文件中的下个字符,井返回该字符的 ASCII 值,将字符所在的行号以及字符在行中的位置分别存储到变量 row 和 col中,若遇到文件结束符,则将变量 EOF 置为 truekind (char ch) 判断字符 ch 是左括号还是右括号,若是左括号,函数返回 1,若是右括号,函数返回 2,若两者都不是,函数返回。【算法 2-1】将栈 stack 置空,置 EOF 为 falsech - nextch();while( not EOF) k - kind(CH); if(k= (1)
42、) push( (2) );push( (3) ); elseif(k= (4) ) if(not empty() pop( ) ;pop( ); else 显示错误信息(缺少对应左括号或右括号); 显示行号 row;显示列号 col; endif endif ch - nextch( ); endwhileif(not empty() 显示错误信息(缺少对应左括号或右括号); while(not empty() row - pop() ; col - pop(); 显示行号 row; 显示列号 col; endwhile endif 为了识别更多种类的括号,对算法 2-1 加以改进后得到算法
43、 2-2。算法 2-2 能够识别圆括号、方括号和花括号(不同类型的括号不能互相匹配)。改进后,函数 kind(char ch)的参数及其对应的返回值见表 5。 表五ch ( ) 其他返回值 1 2 3 4 5 6 0【算法 2-2】将栈 stack 置空,置 EOF 为 falsech -nextch();while(not EOF)k -kind(ch);if( k 0)if( 判断条件 1 )push( (5) );push( (6) );push( (7) );elseif( 判断条件 2 and 判断条件 3 )pop() ;pop() ;pop();else显示行号 row; 显示列号 col;endifendifch - nextch();endwhileif(not empty( ) )显示错误信息(缺少对应左括号或右括号);while( not empty( ) )pop( ); rowpop( ); colpop( );显示行号 row;显示列号 col;endwhileendif(分数:10.00)(1).【问题 1】请将【算法 2-1】和【算法 2-2】中(1)(7)处补充完整。(分数:5.00)_正确答案:(1)1 (2)col (3)row (4)2 (5)co