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

上传人:b****6 文档编号:8768501 上传时间:2023-05-14 格式:DOCX 页数:17 大小:2.25MB
下载 相关 举报
上半年程序员考试真题及答案下午卷.docx_第1页
第1页 / 共17页
上半年程序员考试真题及答案下午卷.docx_第2页
第2页 / 共17页
上半年程序员考试真题及答案下午卷.docx_第3页
第3页 / 共17页
上半年程序员考试真题及答案下午卷.docx_第4页
第4页 / 共17页
上半年程序员考试真题及答案下午卷.docx_第5页
第5页 / 共17页
上半年程序员考试真题及答案下午卷.docx_第6页
第6页 / 共17页
上半年程序员考试真题及答案下午卷.docx_第7页
第7页 / 共17页
上半年程序员考试真题及答案下午卷.docx_第8页
第8页 / 共17页
上半年程序员考试真题及答案下午卷.docx_第9页
第9页 / 共17页
上半年程序员考试真题及答案下午卷.docx_第10页
第10页 / 共17页
上半年程序员考试真题及答案下午卷.docx_第11页
第11页 / 共17页
上半年程序员考试真题及答案下午卷.docx_第12页
第12页 / 共17页
上半年程序员考试真题及答案下午卷.docx_第13页
第13页 / 共17页
上半年程序员考试真题及答案下午卷.docx_第14页
第14页 / 共17页
上半年程序员考试真题及答案下午卷.docx_第15页
第15页 / 共17页
上半年程序员考试真题及答案下午卷.docx_第16页
第16页 / 共17页
上半年程序员考试真题及答案下午卷.docx_第17页
第17页 / 共17页
亲,该文档总共17页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

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

《上半年程序员考试真题及答案下午卷.docx》由会员分享,可在线阅读,更多相关《上半年程序员考试真题及答案下午卷.docx(17页珍藏版)》请在冰点文库上搜索。

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

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

2015上半年程序员考试真题及答案-下午卷 

试题一(共15分)

阅读以下说明和流程图,填补流程图中的空缺,将解答填入答题纸的对应栏内。

【说明】

下面流程图的功能是:

在给定的两个字符串中查找最长的公共子串,输出该公共子串的长度L及其在各字符串中的起始位置(L=0时不存在公共字串)。

例如,字符串"thelightisnotbrighttonight”与“Tonightthelightisnotbright”的最长公共子串为"thelightisnotbright?

,长度为22,起始位置分别为2和10。

设A[1:

M]表示由M个字符A[1],A[2],…,A[M]依次组成的字符串;B[1:

N]表示由N个字符B[1],B[2],…,B[N]依次组成的字符串,M≥N≥1。

本流程图采用的算法是:

从最大可能的公共子串长度值开始逐步递减,在A、B字符串中查找是否存在长度为L的公共子串,即在A、B字符串中分别顺序取出长度为L的子串后,调用过程判断两个长度为L的指定字符串是否完全相同(该过程的流程略)。

【流程图】

(1)N或min(M,N)

(2)M-L+1(3)N-L+1(4)L-1(5)L,I,J

本题考查对算法流程图的理解和绘制能力。

这是程序员必须具有的技能。

本题的算法可用来检查某论文是否有大段抄袭了另一论文“thelightisnotbrighttonight"是著名的英语绕口令,它与"onightthelightisnotbright"大同小异。

由于字符串A和B的长度分别为M和N,而且M≥N≥1,所以它们的公共子串长度L必然小于或等于N。

题中采用的算法是,从最大可能的公共子串长度值L开始逐步递减,在A、B字符串中查找是否存在长度为L的公共子串。

因此初始时,应将min(M,N)送L。

或直接将N送L。

(1)处应填写N或min(M,N),或其他等价形式。

对每个可能的L值,为查看A、B串中是否存在长度为L的公共子串,显然需要执行双重循环。

A串中,长度为L的子串起始下标可以从1开始直到M-L+1(可以用实例来检查其正确性);B串中,长度为L的子串起始下标可以从1开始直到N-L+1。

因此双重循环的始值和终值就可以这样确定,即

(2)处应填M-L+1,或等价形式;(3)处应填N-L+1或等价形式(注意循环的终值应是最右端子串的下标起始值)。

A串中从下标I开始长度为L的子串可以描述为A[I:

I+L-1];B串中从下标J开始长度为L的子串可以描述为A[J:

J+L-1]。

因此,双重循环体内,需要比较这两个子串(题中采用调用专门的函数过程或子程序来实现)。

如果这两个子串比较的结果相同,那么就己经发现了A、B串中最大长度为L的公共子串,此时,应该输出公共子串的长度值L、在A串中的起始下标I、在B串中的起始下标J。

因此,(5)处应填L,I,J(可不计顺序)。

如果这两个子串比较的结果不匹配,那么就需要继续执行循环。

如果直到循环结束仍然没有发现匹配子串时,就需要将L减少1((4)处填L-1或其等价形式)。

只要L非0,则还可以继续对新的L值执行双重循环。

如果直到L=0,仍没有发现子串匹配,则表示A、B两串没有公共子串。

试题二(共15分)

阅读以下说明和C函数,填补函数代码中的空缺,将解答填入答题纸的对应栏内,

【说明1】

函数f(doubleeps)的功能是:

利用公式

计算并返回π的近似值。

【函数1】

【说明2】

函数fun(Char*str)的功能是:

自左至右顺序取出非空字符串str中的数字字符,形成一个十进制整数(最多8位)。

例如,若str中的字符串为"iyt?

67kpf3g8d5.j4ia2e3p12”,则函数返回值为67385423。

【C函数2】

(1)n+2

(2)-s或-1*s(3)*p!

=’\0’或等价形式(4)num*10或等价形式(5)p++或等价形式

本题考查c语言程序设计基本技能。

考生需认真阅读题目中的说明,从而确定代码的运算逻辑,在阅读代码时,还需注意各变量的作用。

函数f(doubleeps)的功能是计算π的近似值。

观察题中给出的计算公式,可知在循环中n每次递增2,因此空

(1)处应填入"n+2"。

由于公式中的各项是正负交替的,因此结合表达式"term=S/n"可知变量s就是起此作用的。

(2)处应填入"-s"或"-1*s"。

对于函数fun(char*str),从字符序列中取出数字并组合为一个整数时,对于每个数字,只需将之前获取的部分乘以10再加上该数字的值即可。

以67385423为例。

67385423=(((((((0+6)*10+7)*10+3)*10+8)*10+5)*10+4)*10+2)*10+3

函数中的变量i是用来计算位数的,num用来计算所获得的整数值。

显然,最多读取字符序列中的前8个数字,或者到达字符序列的末尾(*p!

='\0’)时,计算也需结束。

因此,空(3)处应填入“*p!

=’\0’”。

根据num的作用,空(4)处应填入“num*10”。

根据指针P的作用,空(5)处的代码应使得p指向下一个字符,因此应填入“p++”。

试题三(共15分)

阅读以下说明和C代码,填补代码中的空缺,将解答填入答题纸的对应栏内。

【说明】

下面的程序代码根据某单位职工的月工资数据文件(名称为Salary.dat,文本文件),通过调用函数GetlncomeTax计算出每位职工每月需缴纳的个人所得税额并以文件(名称为IncomeTax.dat,文本文件)方式保存。

例如,有4个职工工资数据的Salary.dat内容如下,其中第一列为工号(整数),第2列为月工资(实数)。

10300016200.00

10300025800.00

20100018500.00

20100108000.00

相应地,计算所得IncomeTax.dat的内容如下所示,其中第3列为个人所得税额:

10300016200.0047.20

10300025800.0035.94

20100018500.00233.50

20100108000.00193.00

针对工资薪金收入的个人所得税计算公式为:

个人所得税额=应纳税所得额X税率—速算扣除数

其中,应纳税所得额=月工资—三险一金—起征点

税率和速算扣除数分别与不同的应,如表3-1所示。

设三险一金为月工资的19%,起征点为3500元。

例如,某人月工资为5800元,按规定19%缴纳三险一金,那么:

其应纳税所得额X=5800—5800x19%—3500=1198元,对应税率和速算扣除数分别为3%和0元,因此,其个人所得税额为1198X3%-0=35.94元。

【C代码】

(1)doubleGetIncomeTax(doublesalary)或doubleGetlncomeTax(double)

(2)!

fin或fin==NULL或fin==0

(3)!

fout或fout=NULL或fout=0

(4)&id,&salary

(5)GetlncomeTax(salary)

(6)salary*(1-RATE)或等价形式

注:

RATE可替换为0.19

本题考查c语言程序设计基本技能。

考生需认真阅读题目中的说明,以便理解问题并确定代码的运算逻辑,在阅读代码时,还需注意各变量的作用。

根据注释,空

(1)处应填入"doubleGetIncomeTax(doublesalary)"或"doubleGetlncomeTax(double)”,对函数GetlncomeTax进行声明。

(2)、(3)处所在的代码是判断文件打开操作是否成功,因此应分别填入“!

fin”、“!

fout”。

根据说明可知,变量id和salary分别表示工号和月工资数。

空(4)处所在语句为从文件中读取数据的操作,从fscanf的格式控制串可知读取的两个数是整数和双精度浮点数,则输入表列的两个变量分别为接收整数值的变量id和接收整数值的变量salary,因此空(4)应填入“&id,&salary”。

空(5)处所在代码向fout关联的文件写入计算出的所得税额,显然需调用函数GetlncomeTax来计算,因此应填入“GetlncomeTax(salary)”。

空(6)处的代码计算应纳税所得额,根据说明中给出的计算公式及三险一金的计算方法:

应纳税所得额=月工资—三险一金—起征点

空(6)处应填入“salary*(1-RATE)”。

试题四(共15分)

阅读以下说明和C函数,填补代码中的空缺,将解答填入答题纸的对应栏内。

【说明】

函数Combine(LinkListLa,LinkListLb)的功能是:

将元素呈递减排列的两个含头结点单链表合并为元素值呈递增(或非递减)方式排列的单链表,并返回合并所得单链表的头指针。

例如,元素递减排列的单链表La和Lb如图4-1所示,合并所得的单链表如图4-2所示。

【c函数】

(1)LinkList

(2)pa&&pb(3)tp->next(4)tp(5)tp=pa

本题考查数据结构应用及C语言实现。

链表运算是C程序设计题中常见的考点,需熟练掌握。

考生需认真阅读题目中的说朋,以便理解问题并确定代码的运算逻辑,在阅读代码时,还需注意各变量的作用。

根据注释,空

(1)所在的代码定义指向链表中结点的指针变量,结合链表结点类型的定义,应填入“LinkList”。

由于pa指向La链表的元素结点、pb指向Lb链表的元素结点,空

(2)所在的while语句中,是将pa指向结点的数据与pb所指向结点的数据进行比较,因此空

(2)处应填入"pa&&pb",以使运算"pa->data>pb->data?

中的pa和pb为非空指针。

从空(3)所在语句的注释可知,需将tp所指结点插入Lc链表的头结点之后,空(3)处应填入"tp->next",空(4)处应填入"tp",如下图所示。

空(5)所在的while语句处理还有剩余结点的链表,pa是保存指针的临时变量循环中的下面4条语句执行后的链表状态如下图所示。

空(5)处应填入“tp=pa”,以继续上述的重复处理过程。

试题五(共15分)

阅读下列说明和C++代码,填补代码中的空缺,将解答填入答题纸的对应栏内。

【说明】

设计RGB方式表示颜色的调色板,进行绘图,其类图如图5-1所示9该程序的C++代码附后。

【C++代码】

(1)free(palette)

(2)this->number(3)staticconst(4)newMyColor(5)newDrawing()

本题考查C++程序设计的能力,涉及类、对象、方法定义和相关操作、要求考生根据给出的案例和代码说明,认真阅读并理清程序思路,然后完成题目。

先考查题目说明。

本题目中涉及到颜色、调色板、绘图等类以及初始化和调色相关等操作。

根据说明进行设计。

类图中给出三个类Drawing、Palette和MyColor及其之间的关系。

Drawing与Palette、MyColor之间具有关联关系,Palette与MyColor之间是聚合关系。

MyColor为以RGB方式表不颜色,由属性red、green和blue表示,每个MyColor对象即为一个RGB颜色。

MyColor具有两个构造器,缺省构造器将RGB颜色均初始化为0;带参数的构造方法将当前对象的RGB值设置为调用构造方法时消息中所传递的参数值。

print()用来输出当前对象的RGB值供测试使用。

Palette类用于表示调色板,其调色板颜色数量,用int型number表示,其MyColor对象指针数组,用指向指针的指针MyColor**palette表示。

Palette的缺省构造方法中,将number设置为256色,弁将palette指向动态申请存储256色MyColor对象指针的空间。

另一个构造方法Palette(MyColor**pale,intnumber)中参数有指向MyColor对象指针数组的指针pale以及颜色数量number。

该构造方法设置当前调色板对象的颜色数量,用this->number表示当前对象的number属性,动态申请该数量对应的MyColor指针类型的number个存储空间,并将此存储空间复制给属性palette。

析构方法先用delete删除用new创建的每个MyColor对象,并用free释放采用malloc函数动态申请的存放MyColor对象指针的存储空间。

print()方法用来打印palette中每个颜色对象的颜色,供测试使用。

在print()函数体内部,为每个数组元素调用当前对象的print()打印一个RGB颜色。

Drawing类属性intCOLORMJMBER定义绘画时所用的颜色数量(本例中设置为16表示基于16色绘图)。

voiddraw()方法声明调色板Palettepalette、定义COLORNUMBER色MyColor对象指针数组color,随机生成RGB颜色并根据此颜色创建COLORNUMBER个MyColor对象,即循环COLORNUMBER次,每次循环生成随机的RGB颜色后调用MyColor的带参数构造器创建MyColor对象,即:

所有颜色数组创建完成后,基于所创建的COLORNUMBER个MyColor对象指针数组创建调色板,即:

调用调色板的print()方法进行打印(模拟绘图)。

最后将MyColor对象指针元素进行删除。

由于COLORMJMBER的作用是绘图的颜色数量,在创建MyColor对象指针数组时作为元素个数,所以,需要是staticconst静态常量。

主控逻辑代码在main函数中实现。

在main()函数中,创建Drawing对象指针d,即生成一个绘图对象:

并进行绘图,即调用d的draw()方法,实现绘图功能。

在使用完对象之后,需要对new出的对象采用delete操作进行释放对象,对d对象进行删除,即deleted;,释放内存。

综上所述,空

(1)需要表示释放malloc函数申请的动态内存的函数,即free(palette);空

(2)需要表示当前对象的number属性,即this->number;空(3)需要修饰COLORNUMBER为静态常量,IPstaticconst;空(4)需要调用MyColor的构造方法创建MyColor对象,即newMyColor;空(5)处为创建Drawing类的对象指针d的newDrawing()。

 

试题六(共15分)

阅读以下说明和Java代码,填补代码中的空缺,将解答填入答题纸的对应栏内。

【说明】

设计RGB方式表示颜色的调色板,进行绘图。

其类图如图6-1所示。

该程序的Java代码附后。

【java代码】

 

(1)MyColor[]

(2)this.number(3)this.palette(4)staticfinal(5)MyColor()

本题考查Java语言程序设计的能力,涉及类、对象、方法的定义和相关操作。

要求考生根据给出的案例和代码说明,认真阅读并理清程序思路,然后完成题目。

先考查题目说明。

本题目中涉及到本题目中涉及到颜色、调色板、绘图等类以及初始化和调色相关等操作。

根据说明进行设计。

类图中给出三个类Drawing、Palette和MyColor及其之间的关系。

Drawing与Palette、MyColor之间具有关联关系,Palette与MyColor之间是聚合关系。

MyColor为以RGB方式表不颜色,由属性red、green和blue表示,每个MyColor对象即为一个RGB颜色。

MyColor具有两个构造器,缺省构造器将RGB颜色均初始化为0;带参数的构造方法将当前对象的RGB值设置为调用构造方法时消息中所传递的参数值。

toString()用来构造并返回当前对象的RGB值的字符串供测试使用。

Palette类用于表示调色板,有调色板颜色数,用int型number表示,有MyColor对象数组,用MyColor[]palette表示。

Palette的缺省构造方法中,将number设置为256色,并将palette初始化成256色MyColor数组。

另一个构造方法Palette(MyColor[]pale,intnumber)中参数有MyColor对象数组pale以及颜色数量number。

该构造方法设置当前调色板对象的颜色数量,用this.number表示当前对象的number属性,将参数palette数组赋值给当前对象的palette,用this.palette表示当前对象的palette属性。

toString()方法用来构造并返回palette中每个颜色对象的颜色的字符串,供测试使用。

在toString()方法体内部,构造字符串时用+进行拼接palette[i]时,每个数组元素调用当前对象的toString()构造并返回一个RGB颜色的字符串。

Drawing类属性intCOLORMJMBER定义绘画时所用的颜色数量(本例中设置为16表示基于16色绘图)。

main()方法声明调色板Palettepalette、定义COLORNUMBER色MyColor对象数组color,即:

随机生成RGB颜色并根据此颜色创建COLORNUMBER个MyColor对象,即循环COLORNUMBER次,每次循环生成随机的RGB颜色后调用MyColor的带参数构造器创建MyColor对象,即:

所有颜色数组创建完成后,基于所创建的COLORNUMBER个MyColor对象数组创建调色板,即:

釆用System.out.println(palette);进行打印(模拟绘图),其中会自动调用调色板的toString()方法。

由于COLORNUMBER的作用是绘图的颜色数量,在创建MyColor对象数组时作为元素个数,所以,需要是staticfinal静态常量。

综上所述,空

(1)需要表示MyColor对象数组,即MyColor[];空

(2)需要表示当前对象的number属性,即this.number;空(3)需要当前对象的palette属性,即this.palette;空(4)需要表示COLORNUMBER为静态常量,即staticfinal;空(5)处为创建MyColor类的对象,即newMyColor。

 

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2