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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

本文([计算机类试卷]2016年下半年软件水平考试(初级)程序员下午(应用技术)真题试卷及答案与解析.doc)为本站会员(visitstep340)主动上传,麦多课文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知麦多课文库(发送邮件至master@mydoc123.com或直接QQ联系客服),我们立即给予删除!

[计算机类试卷]2016年下半年软件水平考试(初级)程序员下午(应用技术)真题试卷及答案与解析.doc

1、2016年下半年软件水平考试(初级)程序员下午(应用技术)真题试卷及答案与解析 1 阅读以下说明和流程图,填补流程图中的空缺,将解答填入答题纸的对应栏内。【说明】设有整数数组 A1: N(N1),其元素有正有负。下面的流程图在该数组中寻找连续排列的若干个元素,使其和达到最大值,并输出其起始下标 K、元素个数 L以及最大的和值 M。例如,若数组元素依次为 3,一 6, 2, 4,一 2, 3,一1,则输出 k=3, L=4, M=7。该流程图中考察了 A1: N中所有从下标 i到下标j(ji)的各元素之和 S,并动态地记录其最大值 M。【流程图】注:循环开始框内应给出循环控制变量的初值和终值,默

2、认递增值为 1,格式为:循环控制变量 =初值,终值 1 阅读以下代码,回答问题 1至问题 3,将解答填入答题纸的对应栏内。 【代码 1】 #include Void swap(int x, int y) int tmp=x; x=y; y=tmp; int main() int a=3, b=7; printf(“a1= d b1= d n”, a, b); swap(a, b); printf(“a2= d b2= d n”, a, b); return 0; 【代码 2】 #include #define SPACE 空格字符 int main() char str128=“Nothing

3、 is impossible! ”; int i, num=0, wordMark=0; for(i=0; stri; i+) if(stri: =SPACE) wordMark=0; else if(wordMark=0) wordMark=1; num+; printf(“ d n”, num); return 0; 【代码 3】 #include #define SPACE 空格字符 int countStrs(char*); int main() char str128=“Nothing is impossible! ”; printf(“ d n”, (1)(str); return

4、 0; int countStrs(char*p) int num=0, wordMark=0; for(;(2); p+) if( (3) =SPACE) wordMark=0; else if(!wordMark)( WordMark=1; +num return (4); 2 写出代码 1运行后的输出结果。 3 写出代码 2运行后的输出结果。 4 代码 3的功能与代码 2完全相同,请补充代码 3中的空缺,将解答写入答题纸的对应栏内。 5 阅读以下说明和代码,填补代码中的空缺,将解答填入答题纸的对应栏内。 【说明】 下面的程序利用快速排序中划分的思想在整数序列中找出第 k小的元素 (即 将

5、元素从小到大排序后,取第 k个元素 )。 对一个整数序列进行快速排序的方法是:在待排序的整数序列中取第一个数作为基准值,然后根据基准值进行划分,从而将待排序的序列划分为不大于基准值者 (称为左子序列 )和大于基准值者 (称为右子序列 );然后再对左子序列和右子序列分别进行快速排序,最终得到非递减的有序序列。 例如,整数序列 “19, 12, 30, 11, 7, 53, 78, 25”的第 3小元素为 12。整数序列“19, 12, 7, 30, 11, 11, 7, 53, 78, 25, 7”的第 3小元素为 7。 函数 partition(int a, int low,int high)

6、以 alow的值为基准,对 alow,alow+1, ahigh 进行划分,最后将该基准值放入 ai(lowihigh),并使得alow, alow+1, ai 1都小于或等于 ai,而 ai+1, ai+2, ahigh 都大于ai。 函数 findkthElem(int a, int startldx, int endldx, int k)在 astartldx,astartldx+1 , aendIdx中找出第 k小的元素。 【 代码】 #include #include int partition(int a, int low, int high) 对 alow high进行划分,使得

7、 alow i中的元素都不大于ai+1 high中的元素。 int pivot=alow; pivot表示基准元素 int i=low, j=high; while( (1) ) while(ipivot)一一 j; ai=aj; while(iendIdx kendIdx k一 1name=name; string getName() return name; void sendMessage(string message); ; class ChatRoom public: static void showMessage(User*user, string message) coutget

8、Name() sendMessage(“Hi!Leo!”); li-sendMessage(“Hi!John!”); void join(User*user) (3) (“Hello Everyone!I am”+user一 getName(); ; int main() chatRoomsystem* crs =(4) ; crs一 startup(); crs-join(*(5)(“Wayne”); delete crs; *程序运行结果: John:Hi!Leo!Leo: Hi!John!Wayne: Hello Everyone!I am Wayne* 2016年下半年软件水平考试(初

9、级)程序员下午(应用技术)真题试卷答案与解析 1 【正确答案】 (1)i,N或 i,N, l或等效形式 (2)S+Aj或等效形式 (3)S (4)ji+1或等效形式 (5)S 【试题解析】 本题考查程序员对算法流程进行设计的能力。 既然要考察整数数组 A1: N中所有从下标 i到下标 j(ji)的各元素之和 S,因此需要执行对 i和 j的双重循环。显然,对 i的外循环应从 l到 N进行。在确定了 i后,可以从 Ai开始依次将元素 Aj累加到 S中。所以,对 j的内循环应从 i开始直到 N,以保持 (ji)。因此空 (1)处应填入 “i, N”,而空 (2)处应填写 “S+Aj”。 为了在内循环

10、中累计计算若干个连续元素之和 S,在 i循环之后, j循环之前,首先应将 S清 0。 由于已知数组元素中有正数,所以 S的最大值 M肯定是正数,因此,流程图一开始就应将 M赋值 0,以后,每当计算出一个 S,就应将其与 M比较。当 SM时,就应将 S的值送入 M(替代原来的值 )。因此,空 (3)处和 (5)处都应填写 “S”。此时,从下标 i到 j求和各元素的开始下标 K为 i,个数 L为 ji+1,因此,空 (4)处应填写 “j-i+1”。 2 【正确答案】 a1=3 b1=7, a2=3 b2=7 【试题解析】 本问题考查函数调用时的参数传递。 C语言仅支持传值调用方式,实参传递给形参的

11、值可以是数值,也可以是地址值。根据题目中给出的函数 swap(int x, int y)定义信息,在 main中执行函数调用“swap(a, b)”时,是将实参 a的值传递给形参 x、实参 b的值传递给形参 y,这个传递过程是单方向的,此后再执行 swap中的操作时, x、 y的修改与 a、 b再无关联,因此在 main函数中, a和 b的值没有变化 。 3 【正确答案】 3 【试题解析】 本问题考查程序的基本结构和运算逻辑。 首先确定变量的作用, num用来对单词进行计数。 for循环语句的作用是遍历字符串中的字符。对字符串中的每个字符 stri,如果是空格字符,则将 wordMark设置为

12、 0,然后继续考查下一个字符。观察存储在数组 str中的字符串,空格字符的作用是作为单词的分隔符。显然,对于每个单词的第一个字符,此时 wordMark的值一定为 0。当字符 stri不是空格字符,接下来通过判断 wordMark是否为 0来决定 num是否增加,以及是否改变 wordMark。据此可以看出,对于一个单词的第一个字符之后的其他字符,通过将 wordMark设置为 1,使得 对每个单词,num的值仅自增 1次。因此,程序的功能是对字符串中的单词进行计数 (与单词连载一起的特殊符号也算作单词的一部分,单词仅以空格分隔 )。 4 【正确答案】 (1)countStrs (2)*p 或

13、 p0 或 *(p+0)或 *p! =0或 *p!= 0或等效形式 (3)*p或 p0或 *(p+0)或等效形式 (4)num 【试题解析】 本问题考查程序的基本结构、运算逻辑和函数调用规范。 在代码 3中,将对字符串中的单词计数用一个函数来实现,需要在理解代码 2的基础上来完善代码 3。 空 (1)处的 要求很明确,就是要通过函数调用来完成单词计数,为防止考生误解,该函数调用的实参已给出,因此填入函数名 “countStrs”即可。 空 (2)处的 for循环用来遍历字符串中的字符,显然, p是指向串中字符的指针,循环条件应为是否遇到串结束标志字符,因此空 (2)处应填入 “*p!=0”或者

14、等效方式。 空 (3)处所在表达式是串中的字符与空格字符进行相等比较,应填入 “*p”或者等效方式。 根据函数 countStrs的首部定义及函数体内的代码逻辑,空 (4)处是返回字符串中的单词数目,应填入 “num”。 5 【正确答案】 (1)ipiVot ) 一一 j; 然后通过 “ai=aj”将不大于基准的元素 aj往前移了。 之后从序列的前端开始向后扫描,遇到一个大于基准的元素为止,语句如下: while ( iname (2)ChatRoom: showMessage (3)user-sendMessage (4)new ChatRoomSystem(i)或 new ChatRoom

15、System (5)new User 【试题解析】 本题考查 C+语言程序设计的能力,涉及类、对象、对象函数 (非静态 )和静态函数的定义和使用。要求考生根据给出的案例和代码说明,认真阅读理清程序思路,然后完成题目。题目所给代码较短,较易理清思路。 先考查题目说明,实现一个简单的聊天室系统 (ChatRoomSystem),多个用户 (User)可以向聊天室 (ChatRoom)发送消息,聊天室将消息展示给所有用户。根据说明进行设计,题目说明中图 6-1的类图给出了类 ChatRoomSystem、 User、 ChatRoom之间的关系。 ChatRoom作为中介器,处理 User对象之间的

16、所有消息交互,即User向 ChatRoom发送消息, ChatRoom负责将消息显示给所有的 User对象。User对象使用 ChatRoom的函数分享其消息。 ChatRoom中定义了一个静态成员函数,使所有调用者直接通过类来访问此函数,无须创建对象。静态函数用关键字 static修饰,参数接收 User对象和消息内容,并显示。 public static void showMessage(User*user, string message) 在 C+中, static函数直接通过类名 ChatRoom来访问,即: ChatRoom: showMeSSage() User类中定义私有属性

17、name及其 get和 set函数,通过 User类的构造器创建对象,赋给新建对象的 name属性值。构造器参数和对象的属性区分方式用 this关键字。 User类的对象发送消息时提供对象自身,用 this表示,以及消息 内容,字符串表示,调用 ChatRoom中的静态函数 showMessage,即: ChatRoom: showMessage(this, message); ChatRoomSystem类实现聊天室系统,实现启动初始化聊天和聊天过程中加入新聊天用户 (聊天过程中的退出等实现类似 )。在主函数 main中,创建ChatRoomSystem对象,然后调用 startup函数 (

18、crs一 startupO),初始化加入一些用户 (字符串用户名: “John”和 “Leo”)并发送问候消息,即: User*zhang: new User(“John”); User*li=new User(“Leo”); zhang一 sendMessage(“Hi!Leo!”); li一 sendMessage(“Hi!John!”); 调用 join函数 (crs一 join)加入用户 “Wayne”,并由此用户对象发送问候消息,即: user一 sendMessage(“Hello Everyone!I am”+user一 getName(); C+中创建对象采用 new关键字,在

19、没有定义构造器时,使用编译器自动创建一个不带参数的缺省 构造器。 ChatRoomSystem中没有定义构造器,所以对象创建方式为: new chatRoomsystem() 或 new chatRoomsystem User的对象创建为: new User(字符串用户名 ) 综上所述,空 (I)需要标识当前对象的 name属性,即 this-name;空 (2)调用类ChatRoom的静态函数 showMessage,即 ChatRoom: showMessage空 (3)需要表示 user对象调用发送消息的函数 sendMessage,即 user-sendMessage:空 (4)需要用 new关键字调用缺省构造器,即 new ChatRoomSystem()或 new ChatRoomSystem;空 (5)处为采用 new关键字调用 User类的构造器函数创建 User类的对象,即 new User。

copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1