首页整卷下载分项下载 试卷搜索题目搜索全站搜索招考信息

2011年上半年程序员下午试卷案例

分类:软考/初级_程序员    来源:软考

1
 
下面的流程图可在正文字符串T(1:L)中计算关键词字符串K(l:m)出现的次数(用n表示)。其中,L为字符串T的长度,m为字符串K的长度(m<L)„为便于模糊查找,关键词中的字符“?”可以匹配任意一个字符。
在该流程图中,先从T中取出长度为m的子串存入A中,再将A与K进行逐个字符的比较(其中,K可以包含字符“? ”)。注意:从正文字符串中取出的关键词字符串不允许交叉。例如,“aaaaaa”中有3个关键词字符串“aa”。
【流程图】
 
问题:1.1   阅读以下说明和流程图,填补流程图中的空缺(1)〜(5),将解答填入答题纸的对应栏内。
 
 
2
 
函数 substring(const char str[], int index, int length)的功能是求出字符串 str 中指定序号index开始且长度为length的子串,并返回所取出的子串。以字符串“China today” 为例,其第一个字符“C”的序号为1 (而其在字符数组str中的下标为0),从序号5开始且长度为3的子串为“at”。
 
问题:2.1   函数substring中有两处错误,请指出这些错误所在代码的行号,并在不增加和删除代码行的情况下进行修改,写出修改正确后的完整代码行(有注释时,注释可省略)。
 
问题:2.2   请根据说明2,填充C函数2中的空缺(1)和(2)。
 
问题:2.3   请说明以62354879643作为实参调用函数reverse时返回结果出错的原因。
 
 
2
 
函数 substring(const char str[], int index, int length)的功能是求出字符串 str 中指定序号index开始且长度为length的子串,并返回所取出的子串。以字符串“China today” 为例,其第一个字符“C”的序号为1 (而其在字符数组str中的下标为0),从序号5开始且长度为3的子串为“at”。
 
问题:2.1   函数substring中有两处错误,请指出这些错误所在代码的行号,并在不增加和删除代码行的情况下进行修改,写出修改正确后的完整代码行(有注释时,注释可省略)。
 
问题:2.2   请根据说明2,填充C函数2中的空缺(1)和(2)。
 
问题:2.3   请说明以62354879643作为实参调用函数reverse时返回结果出错的原因。
 
 
2
 
函数 substring(const char str[], int index, int length)的功能是求出字符串 str 中指定序号index开始且长度为length的子串,并返回所取出的子串。以字符串“China today” 为例,其第一个字符“C”的序号为1 (而其在字符数组str中的下标为0),从序号5开始且长度为3的子串为“at”。
 
问题:2.1   函数substring中有两处错误,请指出这些错误所在代码的行号,并在不增加和删除代码行的情况下进行修改,写出修改正确后的完整代码行(有注释时,注释可省略)。
 
问题:2.2   请根据说明2,填充C函数2中的空缺(1)和(2)。
 
问题:2.3   请说明以62354879643作为实参调用函数reverse时返回结果出错的原因。
 
 
3
 
对于具有n个元素的整型数组a,需要进行的处理是删除a中所有值为0的数组元素,并将a中所有非0元素按照原顺序连续地存储在数组空间的前端。
下面分别用函数CompactArr_vl和CompactArr_v2来实现上述处理要求,函数的返回值为非零元素的个数。
函数CompactArr_vl(int a[], intn)的处理思路是:首先申请一个与数组a的大小相同的动态数组空间,然后顺序扫描数组.a的每一个元素,将遇到的非0元素依次复制到动态数组空间中,最后再将动态数组中的元素传回数组a中。
函数CompaetArr_v2(int a[], intn)的处理思路是:利用下标i (初值为0)顺序扫描数组a的每一个元素,下标k (初值为0)表示数组a中连续存储的非0元素的下标。扫描时,每遇到一个数组元素,i就增1,而遇到非0元素并将其前移后k才增1。
 
问题:3.1   请根据说明中函数CompactArr_vl的处理思路填补空缺(1)〜(3),根据CompactArr_ v2的处理思路填补空缺(4)。
 
问题:3.2   请说明函数CompactArr_vl存在的缺点。
 
 
4
 
假设一个算术表达式中可以包含以下三种括号:“(”和“)”、“[”和“]”及和 “}”,并且这三种括号可以按照任意的次序嵌套使用。
下面仅考虑表达式中括号的匹配关系,其他问题暂时忽略。例如,表达式 [a-(b-5)]*c[{}]中的括号是完全匹配的,而表达式[a-(b-5]))*c中的括号不是完全匹配的, 因为“(”与“]”不能匹配,而且多了一个“)”,即缺少一个与“)”相匹配的“(”。
函数ifMatched (char expr[])的功能是用栈来判断表达式中的括号是否匹配,表达式 以字符串的形式存储在字符数组expr中。若表达式中的括号完全匹配,则该函数的返回 值为Matched,否则返回值为Mismatched。
该函数的处理思路如下:
(1) 设置一个初始为空的栈,从左至右扫描表达式。
(2) 若遇上左括号,则令其入栈;若遇上右括号,则需要与栈顶的左括号进行匹配。
(3) 若所遇到的右括号能与栈顶的左括号配对,则令栈顶的左括号出栈' 然后继续匹配过程;否则返回Mismatched,结束判断过程。
(4) 若表达式扫描结束,同时栈变为空,则说明表达式中的括号能完全匹配,返回 Matched o
函数ifMatched中用到了两种用户自定义数据类型BOOL和STACK,其中,BOOL 类型的定义如下:
 
问题:4.1   填补C函数中的空缺(1)〜(5)
 
 
5
 
已知对某几何图形绘制工具进行类建模的结果如图5-1所示,其中Shape为抽象类 (应至少包含一个纯虚拟(virtual)函数),表示通用图形,Box表示矩形,Ellipse表示椭圆,Circle表示圆(即特殊的椭圆),Line表示线条。

下面的C++代码用于实现图5-1所给出的设计思路,将其空缺处填充完整并编译运行,输出结果为:


 
问题:5.1   填补C++代码中的空缺(1)〜(5)
 
 
6
 
已知对某几何图形绘制工具进行类建模的结果如图6-1所示,其中Shape为抽象 (abstract)类,表示通用图形,Box (矩形)、Ellipse (椭圆)和Line (线条)继承(extends) 了 Shape类,其中,Circle表示圆(即特殊的椭圆)。

下面的Java代码用于实现图6-1所给出的设计思路,将其空缺处填充完整并编译运行,输出结果为:






 
问题:6.1   填补Java代码中的空缺(1)〜(6)