ImageVerifierCode 换一换
格式:DOCX , 页数:14 ,大小:655.98KB ,
资源ID:11458558      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/11458558.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(上半年程序员考试真题及答案下午卷3.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

上半年程序员考试真题及答案下午卷3.docx

1、上半年程序员考试真题及答案下午卷32022上半年程序员考试真题及答案-下午卷试题一下面的流程图可在正文字符串T(1:L)中计算关键词字符串K(l:m)出现的次数用n表示)。其中,L为字符串T的长度,m为字符串K的长度(mL时,即当iL-m+1时,就不应该再取子串了。因此流程图的1)处应填L-m+1。流程图右下方一片描绘了字符数组A(i),A(i+1),A(i+m-1)与字符数组K(1),K(2), K(m)的比较过程。题中用j表示数组K的动态下标指针,j=1,2,m。显然,数组A的动态下标指针为i+j-1j=1,2,,m)。两个字符数组都从左到右逐个字符地进展比较,假设发现有不一致的字符,就完

2、毕比较,将i增1后准备继续从数组T中取新的子串放在A中。 假设一直到比较完毕,发现两个数组中对应的各个字符都是一致的,那么,就找到了一处关键词。此时,找到关键词的计数器n应增l(n+1n)。因此,流程图的4)处应填n+1字符数组A与K的比较过程关键是逐个字符A(j)与K(j)的比较。由于允许模糊査找,即K(j)中的字符 ? 可以与任何字符匹配。因此,可以写成判断“A(j)=K(j) or K(j)= ?是否为真。只要K(j)= ?,比较结果就一定为真。因此,流程图的5)处应填 A(j)=K(j)。假设比较结果为真,那么还需要执行j+1j,准备继续往下比较。因此流程图 的3)处应填 j+1。试题

3、二函数 substring(const char str, int index, int length)的功能是求出字符串 str 中指定序号index开始且长度为length的子串,并返回所取出的子串。以字符串“China today 为例,其第一个字符“C的序号为1 (而其在字符数组str中的下标为0),从序号5开始且长度为3的子串为“at。 【问题1】函数substring中有两处错误,请指出这些错误所在代码的行号,并在不增加和删除代码行的情况下进展修改,写出修改正确后的完好代码行有注释时,注释可省略)。本问题考察字符串运算及常见编程错误的处理。求子串运算substring的原型如下:根

4、据题目说明,参数index为子串的位置序号从1开始),length为子串的长度。 显然,在函数substring中,首先应判断参数的合理性,即index应不小于1,length应不小于0,同时,从index开始可以得到长度为length的子串,即index+length-1应不大于 最后一个字符的序号。因此,第6行的代码是正确的。第7行申请动态内存块的语句是正确的。第9行的代码判断内存申请是否成功,其中,判断指针tptr的表达式tptr = 0有错误,即误用了 “=与“=,导致无论内存申请操作是否成功,在此都将tptr赋值为空指针,造成内存泄漏。第10、11行代码用于从字符串str中复制子串,

5、代码是正确的。第12行的代码设置 字符串的完毕标志,为错误代码。由于所获得字符串的长度为length,其在动态数组tptr 的下标从0开始,因此,下标length-1为最后一个字符的下标,tptrlength-l = 0会导致 丧失最后一个字符,因此该语句中tptr的下标应为length。【问题2】请根据说明2,填充C函数2中的空缺1)和2)。 (1) n!=0 或 n0(2) n/10 本问题考察整数运算。从题中给出的运算过程可知,在所运算的整数不为0时,运算过程会继续,因此空(1)处应填入“11!=0。除以10后要丢掉个位数的处理那么由空2)处进展,即填入“n/10。【问题3】请说明以62

6、354879643作为实参调用函数reverse时返回结果出错的原因。运算结果溢出或超出范围,或其他含义相近的描绘)。本问题考察溢出问题。由于程序语言提供的根本数据类型都有其表示范围的限制,因此在运算过程中需要 注意是否发生溢出。通过分析,上面的运算过程并没有问题,而且前三个数据的处理结果都是正确的,因此最后一个数据出错的原因是其超出整型的表示范围造成的。试题三对于具有n个元素的整型数组a,需要进展的处理是删除a中所有值为0的数组元素,并将a中所有非0元素按照原顺序连续地存储在数组空间的前端。下面分别用函数CompactArr_vl和CompactArr_v2来实现上述处理要求,函数的返回值为

7、非零元素的个数。函数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。【问题1】请根据说明中函数CompactArr_vl的处理思路填补空缺(1)(3),根据Compac

8、tArr_ v2的处理思路填补空缺4)。 (1) sizeof(int)(2) tempk+ 或 *(temp+k+)或等价表示(3) ik 或等价表示(4) ak+ 或*(a+k+)或等价本问题考査C程序构造、数组及运算的应用知识。根据题目中对函数CompactArr_vl的处理思路描绘,空1)处应填入sizeof(int)。 以下代码将数组a中的非0元素复制到动态数组temp中。显然,k应作为temp的下标索引变量使用,因此空2)处应填入tempk+,当该 循环语句完毕后,k的值也就是a中非0元素的个数。据此,空3)处应填入ik。【问题2】请说明函数CompactArr_vl存在的缺点。可

9、能由于动态内存申请操作失败而导致函数功能无法实现,没有释放动态数组空间 (存在内存泄漏问题),时间和空间效率低。本问题考察程序分析根本才能。解决同一个问题会有多种不同的方法,务种方法都有其特点。在本问题中,相比于函数CompactArr_v2, CompactArr vl的处理思路容易理解,由于数组a的数据需要复制 给temp,然后再复制回来,因此需要更多的空间支持,处理速度时间也更长。另外,其 代码执行时也可能由于申请内存空间的要求得不到满足,从而导致函数的功能不能实现, 虽然发生这种情况的概率很低,但也有可能发生。此外,数完毕前也没有释放所申请 的内存块。试题四假设一个算术表达式中可以包含

10、以下三种括号:“(和“)、“和“及和 “,并且这三种括号可以按照任意的次序嵌套使用。下面仅考虑表达式中括号的匹配关系,其他问题暂时忽略。例如,表达式 a-(b-5)*c中的括号是完全匹配的,而表达式a-(b-5)*c中的括号不是完全匹配的, 因为“(与“不能匹配,而且多了一个“),即缺少一个与“)相匹配的“(。函数ifMatched (char expr)的功能是用栈来判断表达式中的括号是否匹配,表达式 以字符串的形式存储在字符数组expr中。假设表达式中的括号完全匹配,那么该函数的返回 值为Matched,否那么返回值为Mismatched。该函数的处理思路如下:(1) 设置一个初始为空的栈

11、,从左至右扫描表达式。(2) 假设遇上左括号,那么令其入栈;假设遇上右括号,那么需要与栈顶的左括号进展匹配。(3) 假设所遇到的右括号能与栈顶的左括号配对,那么令栈顶的左括号出栈 然后继续匹配过程;否那么返回Mismatched,完毕判断过程。(4) 假设表达式扫描完毕,同时栈变为空,那么说明表达式中的括号能完全匹配,返回 Matched o函数ifMatched中用到了两种用户自定义数据类型BOOL和STACK,其中,BOOL 类型的定义如下:填补C函数中的空缺1)5)(1) cptrH- 或 +cptr 或 cptr +=1 或 cptr = cptr+-l(2) Push(&S, *cp

12、tr)(3) Top(S)(4) Pop(&S)(5) IsEmpty(S)此题考察c程序设计根本才能。由于已经将表达式以字符串的形式存入字符数组expr,因此指针cptr就用于指示表 达式中的每个字符。显然,以下for语句用于扫描expr中的每个字符:for (cptr = expr; *cptr!= 10; (1)因此,空1)处应填入cpti+或其等价形式。空2)处进展处理的前提是遇到了左括号,因此,根据题目中对函数ifMatched的 处理思路描绘,这时应进展压栈操作,即应填入Push(&S,*cptr),这里要注意函数调用 时实参的形式。由于弹栈操作不能返回栈顶元素,因此根据注释,空3

13、)处需要读取栈顶元素, 即应填入Top(S),空4)处填入Pop(&S)。由于表达式扫描完毕且同时栈变为空,才说明表达式中的括号能完全匹配,因此, for语句的条件表达式*cptr!=W不成立时表达式完毕,此时控制流可以到达空5)所在 语句,在此需要判断栈的状态来决定括号是否完全匹配,即空5)处应填入IsEmpty(S)。 试题五对某几何图形绘制工具进展类建模的结果如图5-1所示,其中Shape为抽象类 (应至少包含一个纯虚拟virtual)函数),表示通用图形,Box表示矩形,Ellipse表示椭圆,Circle表示圆即特殊的椭圆,Line表示线条。下面的C+代码用于实现图5-1所给出的设计

14、思路,将其空缺处填充完好并编译运行,输出结果为:填补C+代码中的空缺1)5)(1) virtual(2) : public Shape(3) : public Ellipse(4) new Diagram(5) delete此题考察C+语言程序设计的才能,涉及类和抽象类、对象、函数和虚函数的定义和相关操作,以及继承关系。要求考生根据给出的案例和执行过程说明,认真阅读理清程序思路,然后完成题目。先考察类图整体构造。此题中根据类图定义了类:Diagram、Shape、Box、Ellipse、 Line和Circle。其中Shape为抽象类,表示通用图形,抽象类中应至少包含一个纯虚拟 (virtua

15、l)函数。Box表示矩形,Ellipse表示椭圆,Line表示线条,三者都是Shape的子类,继承了 Shape类,Circle表示圆即特殊的椭圆,继承了 Ellipse。抽象类Shape的定义中,需要通过使用virtual标识虚函数,void paintO = 0;表示 paint()是纯虚函数,其定义前必须添加virtual进展表示。类Ellipse为Shape的子类,Circle 为Ellipse的子类,需要在代码中表达出继承。另外,在子类的构造函数中,调用父类的 构造函数,所以继承的权限为public。其语法为:public后加类名。类Diagram中没有定义构造函数,编译器生成一个缺

16、省的构造函数,调用是釆用new 关键字加类名。使用完成之后,通过delete进展释放。因此空1)需要表现出paint()函数为纯虚函数,即为virtual;空2)和空3)处 添加继承父类,并且权限为public,即为:public Shape和:public Ellipse ;空(4)处补 充通过使用编译器生成的缺省构造函数创立对象,即new Diagram;空5)处通过delete 释放new创立的对象diagram。试题六对某几何图形绘制工具进展类建模的结果如图6-1所示,其中Shape为抽象 (abstract)类,表示通用图形,Box (矩形)、Ellipse (椭圆和Line (线条

17、继承extends) 了 Shape类,其中,Circle表示圆即特殊的椭圆。下面的Java代码用于实现图6-1所给出的设计思路,将其空缺处填充完好并编译运行,输出结果为: 填补Java代码中的空缺1)6)(1) abstract 或 public abstract(2) abstract 或 public abstract 或 protected abstract(3) extends Shape(4) extends Ellipse(5) eraseAShape(shapesi)(6) new Diagram()此题考察Java语言程序设计的才能,涉及类和抽象类、对象、方法和抽象方法的定义

18、和相关操作,以及继承关系。要求考生根据给出的案例和执行过程说明,认真阅读理 清程序思路,然后完成题目。先考察类图整体构造。此题中根据类图定义了类:Diagram、Shape、Box、Ellipse、 Line和Circle。其中Shape为抽象类,表示通用图形,抽象类中应至少包含一个抽象 (abstract)方法。Box表示矩形,Ellipse表示椭圆,Line表示线条,三者都是Shape的 子类,继承了 Shape类,Circle表示圆即特殊的椭圆,继承了 Ellipse。抽象类Shape的定义中,需要通过使用abstract标识抽象方法,方法void paintO;没 有实现体,表示pai

19、ntO是抽象方法,其定义前必须添加abstract进展表示。类Ellipse为 Shape的子类,Circle为Ellipse的子类,需要在代码中表达出继承。另外,在子类的构 造方法中,需调用父类的构造方法,而在父类中没有不带参数的构造方法,必须使用super 关键字显式地进展调用。在Java中,继承的语法为extends后加类名。类Diagram中没有定义构造方法,编译器生成一个缺省的构造方法,调用时釆用new 关键字加缺省构造器方法。因此空1)和(2)需要表现出Shape为抽象类,paint()方法为抽象方法,即为abstract; .和3)处添加继承父类Shape,即extends Shape;空4)处补充继承父类Ellipse,即 extends Ellipse;空5)处删除图形,即 eraseAShape(shapesi),调用空6)通过使用 编译器生成的缺省构造方法创立对象,即newDiagram()。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1